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运算符的主要内容,如果未能解决你的问题,请参考以下文章

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

20个简洁的 JS 代码片段

20个简洁的 JS 代码片段

用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]

shell 脚本 片段