一、使用if-then语句(单分支)
用法:
if 条件测试;then
语句1
语句2
……
fi
解释:if 后面的条件测试返回的状态码为0,则执行程序体中的语句;若返回的状态码为非0,则退出。
条件测试:有多种形式,包括bash命令和“[]”测试,后面都会用到
例1:判断一个文件是否存在,如果存在,则输入该文件已存在,如果存在,则输出该文件存在
#!/bin/bash # PATH=PATH:/root/bin if test �Ce /etc/passwd;then echo “file exsit” fi
第一行的#!/bin/bash声明这个脚本所使用的shell名称,之后以#开头的行均为注释行。
这里条件测试为test �Ce /etc/passwd,用来判断/etc/passwd是否存在,如果存在,则该命令返回的状态值为0(单独执行完该命令后,可以使用$?查看其返回值)
例2:写一个脚本,判断,如果用户名存在,则显示其UID和shell
#!/bin/bash # User=user1 if id $User&> /dev/null;then grep "$User" /etc/passwd | cut -d":" -f3,7 fi
这里的条件测试为id $User,如果user1存在,那么id $User这个bash命令就会成功执行,返回状态值为0,但是我们不需要知道他执行成功后的结果,于是我们将其重定向至/dev/null,程序体中语句的意思是:讲grep撷取到的行送至cut命令,并以“:”为分割符,取其中第三和第七个字段,并显示出来
例3:如果/etc/rc.d/rc.sysinit中有空白行,就显示其行数
#!/bin/bash # if grep"^$" /etc/rc.d/rc.sysinit &> /dev/null;then grep "^$" /etc/rc.d/rc.sysinit |wc -l fi
“^”意味行首锚定,“$”意味行尾锚定,“^$”行首与行尾直接没有字符,即为空白行。“wc -l”的作用是用来统计grep所撷取到的行的数目。
二、使用if-else-then语句(双分支)
用法
if 条件测试;then
语句1
语句2
……
else
语句1
语句2
……
fi
解释:if 后面的条件测试返回的状态码为0,则执行程序体中的语句;若返回的状态码为非0,则执行else下面程序体中的语句。
例4:如果指定用户存在,先说明其存在并显示ID号和shell;否则,就添加用户,并显示其ID
#!/bin/bash # User=user2 if id $User&> /dev/null;then echo "$User exist" grep "$User" /etc/passwd | cut -d":" -f3,7 else useradd $User grep "$User" /etc/passwd | cut -d":" -f3 fi
例五:如果设备/dev/sda3已挂载,就显示其挂载点;否则,说明其未挂载。
#!/bin/bash # Device=/dev/sda3 if mount | grep"$Device" &> /dev/null;then grep "$Device" | cut -d"" -f3 else echo "$Device is not exist" fi
三、bash条件测试
1.整数测试
2.字符测试
3.文件测试
整数测试:数值1 比较符号数值2
比较符号:
-ge:相等(equal)
-ne:不等(not equal)
-gt:大于(greater than)
-lt:小于(less than)
-ge:大于等于(greater than or equal)
-le:小于等于(less than or equal)
例六:两个整数比较大小,输出较大值
注:这里使用$RANDOM 内置变量随机生成整数
#!/bin/bash # A=$RANDOM B=$RANDOM if [ $A -ge $B];then echo "Max num is $A" else echo "Max num is $B" fi
注意:[]中判断式与括号之间以i的那个要有空格。
例七:随机一个整数,判断其奇偶性
#!/bin/bash # A=$RANDOM if [ $[$A%2] -eq 0];then echo "$A is even" else echo "$A is odd" fi
字符测试:字符串1 比较符号字符串2
比较符号:
>:大于
<:小于
==:等于
例八:判断给定用户的shell是否为/bin/bash
#!/bin/bash # User=user1 Shell=`grep"$User" /etc/passwd | cut -d ":" -f7` if [ $Shell =="/bin/bash" ];then echo "$User is a bash user" else echo "$User is not a bash user" fi
文件测试:主要使用test [选项] filename
文件类型:
-e:文件名是否存在
-f:文件名是否存在且为文件
-d:文件名是否存在且为目录
-b:文件名是否存在且为块设备
-c:文件名是否存在且为字符设备
-S:文件名是否存在且为Socket文件
-p:文件名是否存在且为FIFO文件
-L:文件名是否存在且为链接文件
文件权限:
-r:读权限
-w:写权限
-x:可执行权限
-u:SUID权限
-g:SGID权限
-s:非空白文件
文件比较:file1 比较符号 file2
-nt:file1是否比file2新
-ot:file1是否比file2旧
-ef:file1与file2是否为同一文件
字符判定:
-z $string:若string为空字符串,则结果为true
-n $string:若string为空字符串,则结果为fasle
四、使用if-elif-else-then-else语句(多分支)
用法
if 条件1;then
语句1
语句2
……
elif条件2;then
语句1
语句2
……
else
语句1
语句2
……
fi