Bash中条件测试类型:
整数测试
文件测试
字符测试
条件测试的表达式:
[ expreesion ]
[[ expreesion ]]
test expreesion
整数测试:
-eq: 测试两个整数是否相等;比如 $A -eq $B
-ne: 测试两个整数是否不等;不等,为真;相等,为假;
-gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;
-lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;
-ge: 大于或等于
-le: 小于或等于
文件测试:
-e FILE:测试文件是否存在
-f FILE: 测试文件是否为普通文件
-d FILE: 测试指定路径是否为目录
-r FILE: 测试当前用户对指定文件是否有读取权限
-w FILE: 测试当前用户对指定文件是否有写权限
-x FILE: 测试当前用户对指定文件是否有执行权限
-s FILE: 测试当前文件是否不空,不空为真,空则假
字符测试:
==:测试是否相等,相等为真,不等为假
!=: 测试是否不等,不等为真,等为假
=~: 判断左边的字符串是否能够被右边的模式所匹配;通常用于[[]];
>: 大于
<: 小于
-n string: 测试指定字符串是否为空,空则真,不空则假
-z string: 测试指定字符串是否不空,不空为真,空则为假
命令的间逻辑关系:
逻辑与: &&
第一个条件为假时,第二条件不用再判断,最终结果已经有;
第一个条件为真时,第二条件必须得判断;
逻辑或: ||
第一个条件为真时,第二条件不用再判断,最终结果已经有;
第一个条件为假时,第二条件必须得判断;
逻辑非:!
简单示例
如果用户存在,就显示用户已存在;否则,就添加此用户
[root@localhost ~]# id user1 && echo "user1" || useradd user1
如果用户不存在,就添加;否则,显示其已经存在
[root@localhost ~]# ! id user1 && useradd user1 || echo "user1 exists"
如果/etc/inittab文件的行数大于100,就显示好大的文件
[root@localhost ~]# [ `wc -l /etc/inittab | cut -d' ' -f1` -gt 100 ] && echo "large file"
if条件判断,控制结构
单分支if语句
if 判断条件; then(then换行时分号;可省略) statement1 statement2 ... fi
双分支的if语句:
if 判断条件; then statement1 statement2 ... else statement3 statement4 ... fi
多分支的if语句:
if 判断条件1; then statement1 ... elif 判断条件2; then statement2 ... elif 判断条件3; then statement3 ... else statement4 ... fi
示例:
如果用户存在,就显示用户已存在;否则,就添加此用户
#!/bin/bash if id user1 &>/dev/null ;then echo "user1 exists" else useradd user1 fi
给定一个用户,如果其UID为0,就显示此为管理员;否则,就显示其为普通用户
#!/bin/bash USERNAME=root USERID=`id -u $USERNAME` if [ $USERID -eq 0 ];then echo "$USERNAME is admin" else echo "$USERNAME is a common user" fi
给定一个文件:如果是一个普通文件,就显示之;如果是一个目录,亦显示之;否则,此为无法识别之文件;
#!/bin/bash FILENAME=/etc/passwd if [ -f $FILENAME ];then echo "$FILENAME" elif [ -d $FILENAME ];then echo "$FILENAME" else echo "wu fa shi bie gai wen jian" fi
传递一个参数(单字符就行)给脚本,如参数为q、Q、quit或Quit,就退出脚本;否则,就显示用户的参数
#!/bin/bash if [ $1 == q ];then echo "Quiting..." exit 1 elif [ $1 == Q ];then echo "Quiting..." exit 2 elif [ $1 == quit ];then echo "Quiting..." exit 3 elif [ $1 == Quit ];then echo "Quiting..." exit 4 else echo "$1" fi