shell基本运算符

        shell编程和其他编程语言一样,支持多种运算符,包括:关系运算符、算数运算符、布尔运算符、字符串运算符、文件测试运算符。我们依次来学习一下它们:

算数运算符

       在平常的编程语言里面,直接用加减乘除就可以运算,但在shell编程中,原生bash不支持简单的数学运算,我们需要借助其他的命令来实现。

       比如我们用expr实现,可以在man手册里查看expr的具体用法:

[root@localhost ~]# expr 2 + 24
[root@localhost ~]# expr 2 - 20
[root@localhost ~]# expr 2 * 2
expr: syntax error
[root@localhost ~]# expr 2 \* 24
[root@localhost ~]# expr 2 / 21

注意:1、运算符号两边是有空格的

           2、在使用乘法的时候,*有语义冲突,所以我们用转义符“\”转义之后才能运算。

关系运算符

下面给大家列出来一些常用的关系运算符:

-eq

检测两个数是否相等,相等返回 true。

-ne

检测两个数是否不相等,不相等返回 true。

-gt

检测左边的数是否大于右边的,如果是,则返回 true。

-lt

检测左边的数是否小于右边的,如果是,则返回 true。

-ge

检测左边的数是否大于等于右边的,如果是,则返回 true。

-le

检测左边的数是否小于等于右边的,如果是,则返回 true。

用脚本实现一下:

以下用方括号的地方可以用test来代替(test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试)

比如:if test $[a] -eq $[b]    括号里可以进行基本的算数运算,不需要空格。

#!/bin/bash
a=10	b=20
if [ $a -eq $b ];then		#方括号里面的而表达式两边都有空格
	echo "$a -eq $b :a等于b"
else
	echo "$a -eq $b :a不等于b"
fi
if [ $a -ne $b ];then
        echo "$a -ne $b :a不等于b"
else
        echo "$a -ne $b :a等于b"
fi
if [ $a -gt $b ];then
        echo "$a -gt $b :a大于b"
else
        echo "$a -gt $b :a不大于b"
fi
if [ $a -lt $b ];then
        echo "$a -lt $b :a小于b"
else
        echo "$a -lt $b :a不小于b"
fi
if [ $a -ge $b ];then
        echo "$a -ge $b :a大于等于b"
else
        echo "$a -ge $b :a小于或等于b"
fi
if [ $a -eq $b ];then
        echo "$a -le $b :a小于等于b"
else
        echo "$a -le $b :a大于等于b"
fi

运行结果为:

10 -eq 20 :a不等于b
10 -ne 20 :a不等于b
10 -gt 20 :a不大于b
10 -lt 20 :a小于b
10 -ge 20 :a小于或等于b
10 -le 20 :a大于等于b

布尔运算符

常用的布尔运算符有:与(-a)、或(-o)、非(!)

脚本里的内容为:

#!/bin/bash
a=10	b=20	c=5	d=100
if [ $a != $b ];then
        echo "$a != $b :a不等于b"
else
        echo "$a != $b :a等于b"
fi
if [ $a -lt $b -a $d -gt $c ];then
        echo "$a -lt $b :a小于b且d大于c:返回true"
else
        echo "$a -lt $b :a小于b且d大于c:返回false"
fi
if [ $a -ge $c -o $c -ge $d ];then
        echo "$a -le $b :a大于等于c或c大于等于d:返回true"
else
        echo "$a -le $b :a大于等于c或c大于等于d:返回false"
fi

运行结果为:

10 != 20 :a不等于b
10 -lt 20 :a小于b且d大于c:返回true
10 -le 20 :a大于等于c或c大于等于d:返回true

逻辑运算符

shell中的逻辑运算符有&&(逻辑的AND)和||(逻辑得到OR)

脚本为:

#!/bin/bash
a=10	b=20
if [[ $a -lt 100 && $b -gt 100 ]]		#注意是双方括号哦
then
   echo "返回 true"
else
   echo "返回 false"
fi
if [[ $a -lt 100 || $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

运行结果为:

返回 false
返回 true

字符串运算符

下面有一些常用的字符串运算符,实现方法跟上面的例子一样:

例如:a="huahua",b="shihuaa"

运算符

举例

结果

=

检测两个字符串是否相等,相等返回 true。

[ $a = $b ] 返回 false。

!=

检测两个字符串是否相等,不相等返回 true。

[ $a != $b ] 返回 true。

-z

检测字符串长度是否为0,为0返回 true。

[ -z $a ] 返回 false。

-n

检测字符串长度是否为0,不为0返回 true。

[ -n "$a" ] 返回 true。

str

检测字符串是否为空,不为空返回 true。

[ $a ] 返回 true。

文件测试运算符

文件测试运算符用于检测文件的各种属性,属性检测描述如下:

操作符

说明

举例

-b file

检测文件是否是块设备文件,如果是,则返回 true。

[ -b $file ] 返回 false。

-c file

检测文件是否是字符设备文件,如果是,则返回 true。

[ -c $file ] 返回 false。

-d file

检测文件是否是目录,如果是,则返回 true。

[ -d $file ] 返回 false。

-f file

检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。

[ -f $file ] 返回 true。

-g file

检测文件是否设置了 SGID 位,如果是,则返回 true。

[ -g $file ] 返回 false。

-k file

检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。

[ -k $file ] 返回 false。

-p file

检测文件是否是有名管道,如果是,则返回 true。

[ -p $file ] 返回 false。

-u file

检测文件是否设置了 SUID 位,如果是,则返回 true。

[ -u $file ] 返回 false。

-r file

检测文件是否可读,如果是,则返回 true。

[ -r $file ] 返回 true。

-w file

检测文件是否可写,如果是,则返回 true。

[ -w $file ] 返回 true。

-x file

检测文件是否可执行,如果是,则返回 true。

[ -x $file ] 返回 true。

-s file

检测文件是否为空(文件大小是否大于0),不为空返回 true。

[ -s $file ] 返回 true。

-e file

检测文件(包括目录)是否存在,如果是,则返回 true。

[ -e $file ] 返回 true。

脚本的实现方法也和上面的类似。

 

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务