bash中实现条件判断的方式:
一、条件测试类型:
整数测试
字符测试
文件测试
二、bash条件测试的表达式
[ expression ] 括号两端必须要有空格
[[ expression ]] 括号两端必须要有空格
test expression
可独立执行的命令不需要使用如上测试方法
组合测试条件
-a : and
-o :or
! :非
三、整数比较:
-eq 测试两个整数是否相等 equal
-ne 测试两个整数是否不等 not equal
-gt 测试一个数是否大于另一个数 great than
-lt 测试一个数是否小于另一个数 less than
-ge 测试一个数是否大于或者等于另一个数 great equal
-le 测试一个数是否小于或者等于另一个数 less equal
四、命令间的逻辑关系
逻辑与:&&
第一个条件为假,第二个条件就不会判断
逻辑或:||
第一个条件为真,第二个条件不会判断;第一个条件为假,第二个条件判断
五、字符串比较
== 等于 =两边要有空格
!= 不等于
> 大于
< 小于
=~ 判断左边的字符串是否能够被右边的模式所匹配;通常用于[[]];[[ $opt1 =~ $opt2 ]],一般做行首、行尾锚定,不要加引号。
六、文件测试
-z string 测试指定字符串是否为空,为空则真,不为空则假
-n string 测试指定字符串是否不为空,不为空则真,为空则假
-e File 测试文件是否存在
-f File 测试文件是否为普通文件
-d File 测试文件是否为目录
-L File 测试文件是否为链接文件
-b File 测试文件是否为块设备
-c File 测试文件是否为特殊字符设备
-r File 测试文件对当前用户是否可读
-w File 测试文件对当前用户是否可写
-x File 测试文件对当前用户是否可执行
七、if语法
if 判断条件 0为真 其他都为假
单分支if语句
if 判断条件;do
语句1
语句2
……
fi
双分支if语句
if 判断条件;do
语句1
语句2
……
else
语句1
语句2
……
fi
多分支if语句
if 判断条件;do
语句1
语句2
......
elif
语句1
语句2
elif
语句1
语句2
fi
八、补充内容
1、在脚本中,很多时候需要使用到回传命令,$?如果上一个命令执行成功,则回传值为0,否则为1-255中的任意一个数值
0:表示真
非0:表示假
2、[]和[[]]的区别
[ expression ]等同于 test expression;
[[ expression ]],通用于字符串匹配=~;
九、小试牛刀
1、测试一个命令的执行结果的值
if grep “root”/etc/passwd ;then
echo “OK”
fi
2、测试一个命令的执行结果的相反值
if ! grep “root” /etc/passwd;then
3、测试两个数值的大小
if [ $A –gt $B ];then
4、组合测试
if[ $A –ge 90 –a $A –le 100 ];then 测试变量A是否大于等于90并且小于等于100
if [ –d /etc/passwd –o –f /etc/fstab ];then测试/etc/passwd是否为目录或者文件
5、测试/etc/fstab是否为文件
if [ –f /etc/fstab ];then
6、使用复合命令 ((算式))
if ((a>b));then
7、使用bash关键字[[判断式]]
if[[ a>b ]];then
if [[ str > myb ]];then
8、使用内置命令 test 判断式
if test “str”\> “myb”;then
9、使用内置命令:[判断式] 类似 test
if [“str”== “abc”];then
10、命令&&命令
if –f /etc/passwd && grep “root”/etc/passwd;then
11、命令||命令
if [ -e /tmp/test ] || mkdir /tmp/test;then
十、示例脚本
写一个脚本,输入一个文件的绝对路径,检测该文件的类型
#!/bin/bash # #==========CopyRight=============# #Version 0.1 #Auther:myb_sir #Pragram:这是一个检测文件类型的脚本 #Date:2014-03-30 #================================# #用户通过屏幕输入一个文件名,并保存到FileName变量中 read -p "Please Input Your FileName:" FileName #首先检测用户输入的文件是否存在 if [ ! -e $FileName ];then echo "$FileName 不存在" #检测用户输入的文件类型,并显示出该文件的类型 else if [ -d $FileName ];then echo "$FileName 是一个目录" elif [ -f $FileName ];then echo "$FileName 是一个普通文件" elif [ -L $FileName ];then echo "$FileName 是一个连接文件" elif [ -b $FileName ];then echo "$FileName 是一个块设备" else echo "$FileName 文件类型未知" fi fi执行结果如下
[root@myb362 scripts]# ./iffile.sh Please Input Your FileName:/tmp/a /tmp/a 不存在 [root@myb362 scripts]# ./iffile.sh Please Input Your FileName:/etc/fstab /etc/fstab 是一个普通文件 [root@myb362 scripts]# ./iffile.sh Please Input Your FileName:/dev/sdb /dev/sdb 是一个块设备 [root@myb362 scripts]# ./iffile.sh Please Input Your FileName:/etc/init.d /etc/init.d 是一个目录 [root@myb362 scripts]# ./iffile.sh Please Input Your FileName:/dev/cdrom /dev/cdrom 是一个连接文件 [root@myb362 scripts]# ./iffile.sh Please Input Your FileName:/dev/zero /dev/zero 文件类型未知总结:条件判断语句在shell中经常使用,上边的脚本如果配合循环语句使用可以实现一直让用户输入文件名并显示文件类型并不退出的功能,直到用户输入指定的字符才退出(例如quit)。
转载于:https://blog.51cto.com/mybsir/1386842