shell运算符
Posted cp-linux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell运算符相关的知识,希望对你有一定的参考价值。
1、整数运算工具
原生bash不支持简单的数学运算,需要命令协助使用
1)expr命令
乘法操作应采用 * 转义,避免被作为Shell通配符;参与运算的整数值与运算操作符之间需要以空格分开,引用变量时必须加$符号
X=1234
expr $X + 78
a=`expr 2 + 2`
echo $a
2)使用$[]或$(())表达式
乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号([]内不需要在变量前加$);计算结果替换表达式本身,可结合echo命令输出。
[root@server0 ~]# x=1234 [root@server0 ~]# echo $[x+78] #注意和输出变量{}的区分 1312 [root@server0 ~]# echo $x+78 1234+78 [root@localhost ~]# a=$[4+3] [root@localhost ~]# echo $a 7
3)let命令
expr或$[]、$(())方式只进行运算,并不会改变变量的值;而let命令可以直接对变量值做运算再保存新的值。因此变量X=1234,在执行let运算后的值会变更;另 外,let运算操作并不显示结果,但是可以结合echo命令来查看
[root@server0 ~]# x=1234 [root@server0 ~]# let y=x+22 [root@server0 ~]# echo $y 1256 [root@server0 ~]# x=7 [root@server0 ~]# let x*3 //不能这样写 [root@server0 ~]# echo $x //值为7 [root@server0 ~]# let x*=3 [root@server0 ~]# echo $x //值为21
2、小数运算工具
1)bc交互式运算
先执行bc命令进入交互环境,然后再输入需要计算的表达式。
scale=2 //小数点后面留出来2位数字
2)bc非交互式运算
将需要运算的表达式通过管道操作交给bc运算
[root@server0 ~]# echo ‘scale=4;12.34+5.6789‘ | bc
18.0189
可以进行数值比较
[root@server0 ~]# echo "2>3" | bc
0 //2是否大于3 输出0错误
[root@server0 ~]# echo "3>2" | bc
1 //3是否大于2 输出1正确
和$?相反
3、算数运算符
加+ 减- 乘* 除/ 取余% 赋值= 相等==(用于比较2个数字) 不相等!=
4、条件测试操作
1)字符串测试
使用“test 表达式”或者[ 表达式 ]都可以,表达式两边至少要留一个空格。
[root@localhost ~]# test $USER == root [root@localhost ~]# echo $? 0 [root@localhost ~]# test $USER = root [root@localhost ~]# echo $? 0 [root@server0 ~]# [ $USER == "root" ] // [ ] 内双引号有无都可以,[ 后面需要有空格 [root@server0 ~]# [ $USER != "root" ] [root@server0 ~]# echo $? //查看上一条命令的结果0为对,非0为错
-z 检查变量的值是否未设置(空值)
[root@server0 ~]# [ -z $dachui ] [root@server0 ~]# echo $? 0
= 和 == 的区别
在 [ ] 中表示判断(字符串比较)时是等价的
[root@localhost ~]# a1=root [root@localhost ~]# a2=root [root@localhost ~]# [ $a1 = $a2 ] && echo "equal" equal [root@localhost ~]# [ $a1 == $a2 ] && echo "equal" equal
在 (( )) 中 = 表示赋值, == 表示判断(整数比较),它们不等价
2)整数值比较
关系运算符
检测2个数是否相等 -eq
检测2个数是否不相等 -ne
检测左边的数是否大于右边的 -ge
检测左边的数是否小于右边的 -le
检测左边的数是否大于等于右边的 -gt
检测左边的数是否小于等于右边的 -lt
字符串运算符:
检测2个字符串是否相等 =
检测2个字符串是否不相等 !=
检测字符串长度是否为0 -z [ -z $a ]
检测字符串长度是否不为0 -n [ -n $a ]
检测字符串是否为空 $ [ $a ]
布尔运算符
! 非运算
-o 或运算 一真为真
-a 与运算 一假为假,全真为真
逻辑运算符
&& 逻辑and
|| 逻辑or
3)文件状态
检测文件(包括目录)是否存在 -e
检测目录是否存在 -d
检测文件是否为普通文件(不包括目录) -f
检测文件是否可读、可写、可执行 -r -w -x
检测文件是否为空 -s
4)多个条件/操作的逻辑组合
&& || ;
A && B //执行A,当A成功后执行B
A || B //执行A,当A失败后执行B
A ;B //执行A ,执行B
-x 判断对象是否具有可执行权限(特殊)
[root@svr5 ~]# chmod 644 /1.sh
[root@server0 ~]# chmod -x 1.sh
[root@server0 ~]# ./1.sh
-bash: ./1.sh: 权限不够
//没有x权限root也执行不了
#判断有没有装包,有没有起服务的脚本
#!/bin/bash rpm -q httpd if [ $? -ne 0 ];then yum -y install httpd &> /dev/null fi systemctl status httpd if [ $? -ne 0 ];then systemctl restart httpd systemctl status httpd echo $? fi
ping -c2 IP //count ping的次数
ping -i0.1 IP //每次间隔的时间
以上是关于shell运算符的主要内容,如果未能解决你的问题,请参考以下文章