当前位置: 首页 > news >正文

今天我们继续学习shell编程语言的内容

四、Shell脚本语言的运算


4.1 算数运算

shell支持算术运算,但只支持整数,不支持小数

4.2 Bash中的算术运算
-- + 加法运算
-- - 减法运算
-- * 乘法运算
-- / 除法运算
-- % 取模,即取余数
-- ** 乘方 
​
#乘法符号在有些场景需要转义
4.2 实现算术运算

1. let var=算术表达式
2. var=$[算术表达式]
3. var=$((算术表达式))
4. var=$(expr arg1 arg2 arg3 ...)
5. declare -i var = 数值
6. echo '算术表达式' | bc  (支持浮点数)

4.3 增强型赋值:
+= 
i+=10 <==> i=1+10
-=
i-=j  <==> i=i-j
*=
/=
%=
++ 
i++,++i <==> i=i+1 (自增)
--
i--,--i <==> i=i-1 (自减)

实例:

[root@localhost ~]#  let var+=1
[root@localhost ~]# echo $var
1
[root@localhost ~]# let var++
[root@localhost ~]# echo $var
2
[root@localhost ~]# let var-=1
[root@localhost ~]# echo $var
1
[root@localhost ~]# let var--
[root@localhost ~]# echo $var
0

# i++ 与 ++i的区别:
i++ 先赋值再运算
++i 先运算再赋值

[root@localhost ~]# unset i j ;i=1;let j=i++;echo "i=$i,j=$j"
i=2,j=1
[root@localhost ~]# unset i j ;i=1;let j=++i;echo "i=$i,j=$j"
i=2,j=2
[root@localhost ~]#

实例:鸡兔同笼问题

(1)

[root@localhost ~]# vim xiaojiji.sh
#!/bin/bash
HEAD=35
FOOT=94RABBIT=$(((FOOT-HEAD-HEAD)/2))
CHICKEN=$[35-RABBIT]
echo "兔子的数量为:"$RABBIT
echo "鸡的数量为:"$CHICKEN
[root@localhost ~]# chmod +x xiaojiji.sh
[root@localhost ~]# ./xiaojiji.sh
兔子的数量为:12
鸡的数量为:23

(2)在脚本中写入变量,让用户在命令行写入需要计算的数值

[root@localhost ~]# vim xiaojiji.sh
#!/bin/bash
HEAD=$1
FOOT=$2RABBIT=$(((FOOT-HEAD-HEAD)/2))
CHICKEN=$[35-RABBIT]
echo "兔子的数量为:"$RABBIT
echo "鸡的数量为:"$CHICKEN
[root@localhost ~]# ./xiaojiji.sh 30 80
兔子的数量为:10
鸡的数量为:25

4.2 逻辑运算(了解,不用掌握)

True用数字表示1,False用数字表示0

  • 与:&

    1 与 1 = 1   
    1 与 0 = 0
    0 与 1 = 0
    0 与 0 = 0
  • 或:|

    1 或 1 = 1
    1 或 0 = 1
    0 或 1 = 1
    0 或 0 = 0
  • 非:!

    !1 = 0  !True=False
    !0 = 1  !False=True
  • 异或:^

    #异或的两个值,相同为假,不同为真
    1 ^ 1 =0
    1 ^ 0 =1
    0 ^ 1 =1
    0 ^ 0 =0

4.4 条件测试命令

条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成测试过程,实现评估布尔声明,以便在条件性环境下进行执行。

  • 若真,则状态码变量$?返回0

  • 若假,则状态码变量$?返回1

扩展: [ ] 与 [[ ]] 的区别

`区别1:
[ ]是符合POSIX标准的测试语句,兼容性强,几乎可以运行在所有的Shell解释器中
[[ ]]仅可运行在特定的几个Shell解释器中(如Bash)
​
`区别2:
> < 可以在[[ ]]中使用ASCII码顺序进行排序,而[]不支持
​
`区别3:
在[ ]中使用-a 和 -o 表示逻辑与和逻辑或,[[ ]]使用&& 和 || 表示,[[ ]]不支持-a
​
`区别4:
在[ ]中==是字符匹配,在[[ ]]中==是模式匹配
​
`区别5:
[ ]不支持正则匹配,[[ ]]支持用=~进行正则匹配
​
`区别6:
[ ]仅在部分Shell中支持用()进行分组,[[ ]]均支持
​
`区别7:
在[ ]中如果变量没有定义,那么需要用双引号引起来,在[[ ]]中不需要
4.4.1 条件测试命令及其语法

[<测试表达式>] 说明:该方法和test命令的用法一样,[]的两边和内容之间至少有一个空格

[[ <测试表达式> ]] 说明:比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。[[]]中可以使用通配符等进行模式匹配

[root@localhost ~]# [ 1 > 2 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [[ 1 > 2 ]]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [[ 1 >= 2 ]]
-bash: 条件表达式中有语法错误
[root@localhost ~]# [[ 1 = 2 ]]
-bash: 未预期的记号 "1" 附近有语法错误
[root@localhost ~]# [[ "hello" =~ "h" ]]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [[ "hello" =~ "p" ]]
[root@localhost ~]# echo $?
1

http://www.xdnf.cn/news/1434349.html

相关文章:

  • Vscode + docker + qt 网络监听小工具
  • 方差分析(通俗易理解)
  • Java代码耗时统计的5种方法
  • docker redis容器命令行操作
  • # pdf.js完全指南:构建现代Web PDF查看与解析解决方案
  • flume扩展实战:自定义拦截器、Source 与 Sink 全指南
  • 基于SQLite索引的智能图片压缩存储系统设计与实现
  • 【Vue】前端 vue2项目搭建入门级(二)
  • Arduino Uno与4×4矩阵键盘联动完全指南
  • Day11--HOT100--25. K 个一组翻转链表,138. 随机链表的复制,148. 排序链表
  • 模拟在线测试中相关语句的应用
  • Python如何处理非标准JSON
  • 百度网盘基于Flink的实时计算实践
  • Markdown格式.md文件的编辑预览使用
  • 【Java基础|第三十二篇】增强流、缓冲流、标准流、转换流
  • 【Qt】bug排查笔记——QMetaObject::invokeMethod: No such method
  • Telnet 原理与配置
  • Deepin25安装mysql8.4.5
  • 【鸿蒙面试题-6】LazyForEach 懒加载
  • MQTT报文的数据结构
  • LeeCode104. 二叉树的最大深度,LeeCode111. 二叉树的最小深度
  • 动手学深度学习
  • 2025年IT行业女性职业发展证书选择指南
  • 企业微信怎么用能高效获客?拆解体检品牌如何实现私域营收提升
  • ReactAgent接入MCP服务工具
  • WMT2014:机器翻译领域的“奥林匹克盛会“
  • 【Unity开发】丧尸围城项目实现总结
  • 双八无碳小车cad+三维图+仿真+设计说明书
  • 快速入门Vue3——基础语法
  • SpringBoot RestTemplate 设置http请求连接池