shell运算符-数学运算,关系运算,字符串运算,文件检测运算

Shell中是不支持简单数学运算的,比如这样:

[root@VM_0_11_centos ~]# rest=10+10
[root@VM_0_11_centos ~]# echo $rest
10+10

但是我们可以加上命令使其支持,在shell中有三种弄方法可以支持简单的数学运算:

  1. 使用$(())
    这个$后面是两个小括号,一个小括号不对:
[root@VM_0_11_centos ~]# rest=$((10+20))
[root@VM_0_11_centos ~]# echo $rest
30
[root@VM_0_11_centos ~]# rest=$(10+20) 
-bash: 10+20: command not found
  1. 使用$[]
    使用$[]这个感觉是最简单的
[root@VM_0_11_centos ~]# rest=$[10 + 10]
[root@VM_0_11_centos ~]# echo $rest
20

3.使用关键字expr
使用这个expr有点复杂,在使用的时候需要用反单引号将其包裹起来,而且必须有空格:

[root@VM_0_11_centos ~]# rest=`expr 10 + 20`
[root@VM_0_11_centos ~]# echo $rest
30

如果没有空格的话:

[root@VM_0_11_centos ~]# rest=`expr 10+20`
[root@VM_0_11_centos ~]# $rest
-bash: 10+20: command not found

而且还不支持括号,并且乘号还要用反斜杠给转译一下:

[root@VM_0_11_centos ~]# rest=`expr 10 + 20 \* (10 + 10)` 
-bash: command substitution: line 1: syntax error near unexpected token `('
-bash: command substitution: line 1: `expr 10 + 20 \* (10 + 10)'
[root@VM_0_11_centos ~]# 

所以遇到复杂的运算,需要一步一步的算,很麻烦!

还有一些其他的简单运算 比如乘除,取余等都类似

关系运算:
一般用条件语句上,需要用到[]和(())
比如 大于 在[]中要用-gt表示 ,在(())用==表示,gt是 greater than的缩写
例如 在文件中写入:

if (($1 > $2))
then
        echo "$1 大于 $2"
else
        echo "$1 小于 $2"
fi

if [ $1 -gt $2 ]
then
        echo "$1 大于 $2"
else
        echo "$1 小于 $2"
fi

执行:

[root@VM_0_11_centos shell]# ./myShell.sh 100 200
100 小于 200
100 小于 200

shell的if语句也挺奇怪,if 之后是换行,然后then 最后需要加上fi,表示结束。 如果多个判断的话用elif,不是else if,跟java还是有区别的
需要注意的一点的是[]中括号使用的时候,一定要主要前后的空格,否则会报错的。

其他的关系运算类似:
-eq 表示相等,在(())用 ==表示,是equal的缩写
-ne表示不相等,在(())用 !=表示,是 not equal的缩写
-gt 表示大于,在(())用 >表示,是greater than的缩写
-ge 表示大于等于,在(())用 >=表示,是greater equall的缩写
-lt 表示小于,在(())用 <表示,是litter than的缩写
-le 表示小于等于,在(())用 <=表示,是litter equal的缩写

逻辑运算符
逻辑运算符,一般是指与或非
在shell []中 -a表示与,就是两个表达式都成立,条件才成立,在(())表示为&&
-o或运算,表示两个条件只要有一个为真即可,在(()))表示为||
!表示非 在(()))表示为!

字符串运算符
= 检测两个字符串是否相等,相等则返回true
!= 检测两个字符串是否相等,不相等则返回true
-z 检测字符串长度是否为0,为0则返回true
-n 检测字符串长度是否为0,不为0则返回true
str 检测字符串是否为null,不为null则返回true

比如:

str="abcdee"

if [ $str = "abc" ]
then
        echo "相等"
else
        echo "不相等"
fi

if [ -n $str ]
then
        echo "不为0"
else
        echo "为0"
fi

执行结果:

[root@VM_0_11_centos shell]# ./myShell.sh  
不相等
不为0

文件检测运算符:

-b 检测文件是否是块设备文件,如果是,则返回true
-c 检测文件是否是字符设备文件,如果是,则返回true
-d 检测文件是否是目录文件,如果是,则返回true
-f 检测文件是否是普通文件(既不是目录也不是设备文件),如果是,则返回true
-g 检测文件是否设置了SGID位,如果是,则返回true
-k 检测文件是否设置了粘着位(stucky Bit),如果是,则返回true
-p 检测文件是否具名管道,如果是,则返回true
-u 检测文件是否设置了SUID位,如果是,则返回true
-r 检测文件是否可读,如果是,则返回true
-w 检测文件是否可写,如果是,则返回true
-x 检测文件是否可执行,如果是,则返回true
-s 检测文件是否为不为空(文件大小是否不为0),如果不为0,则返回true
-e 检测文件(包括目录)是否存在,如果存在,则返回true
-a 检测文件(包括目录)是否存在,如果存在,则返回true

比如检测文件是否存在用-e 比如创建一个文件test.txt

file=/root/training/shell/test.txt

if [ -e $file ]
then
        echo "文件存在"
else
        echo "文件不存在"
fi

执行的结果:

[root@VM_0_11_centos shell]# ./myShell.sh 
文件存在

欢迎关注我的公众号:北风中独行的蜗牛

在这里插入图片描述
参考文章:
https://blog.csdn.net/yuki5233/article/details/81166509
https://www.runoob.com/linux/linux-shell-basic-operators.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟红尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值