bash中如何实现条件判断?
条件测试类型:
整数测试
字符测试
文件测试
条件测试的表达式:
[ 表达式 ]
[[ 表达式 ]]
test 表达式(expression)
一、整数比较:
-eq:测试两个整数是否相等
[root@localhost ~]# A=3 定义变量A=3
[root@localhost ~]# B=6 定义变量B=6
[root@localhost ~]# [ $A -eq $B ] 判断A是否等于B
[root@localhost ~]# echo $? 输出返回值
1 返回值为1 证明条件为假 A不等于B
-ne:测试两个整数是否不等 不等,为真:相等,为假
[root@localhost ~]# A=5
[root@localhost ~]# B=6
[root@localhost ~]# [ $A -ne $B ]
[root@localhost ~]# echo $? 不等为真
0
[root@localhost ~]# B=5
[root@localhost ~]# [ $A -ne $B ]
[root@localhost ~]# echo $? 等为假
1
[root@localhost ~]#
-gt:测试一个数 是否大于一个数 大于为真 否则为假
-lt:测试一个数是否小于一个数 小于为真 否则为假
-ge:大于或等于
-le:小于或等于
命令之间的逻辑关系:
逻辑与:一假即假: 第一个条件为假时,第二个条件不用再判断,最终结果已有
第一个条件为真时,第二个条件必须判断
&&符号表示
例如:如果用户user5存在,就不需要添加
id user5 && useradd user5 前面为真,后面不需要执行
逻辑或 :
|| 符号表示
如果用户user6不存在就添加user6
id user6 || useradd user6
二、字符串比较
字符串比较:
字符串测试
常用的符号
==或= 判断两个字符串是否相等 相等为真 不等为假
等号两端要有空格
[root@localhost ~]# A=hello
[root@localhost ~]# B=hi
[root@localhost ~]# [ $A == $B ]
[root@localhost ~]# echo $?
1
[root@localhost ~]#
!= 测试连个是否不等 不等为真相等为假
-n :测试指定字符串是否为空 空则真 不空为假
-s :测试指定的字符串是否为不空 不空为真 空位假
三、文件测试
常用的需要测试
-e 文件名或者文件路径 测试文件是否存在
[root@localhost ~]# [ -e /etc/inittab ] 测试/etc/inittab 文件是否存在的
[root@localhost ~]# echo $?
0
-f 测试文件是否为普通文件
-d 测试指定路径是否为目录的
-r 测试当前用户对指定文件是否有读取权限
-w 写入权限
-x 执行权限
[root@localhost ~]# [ -x /etc/rc.d/rc.sysinit ] 测试当前用户是否对etc/rc.d/rc.sysinit文件是否有执行权限
[root@localhost ~]# echo $?
0
四、if语法
if 判断条件 0为真 其他都为假
单分支if语句
if 判断条件;then
statement1
statement2
.......
fi
双分支的if语句:
if 判断条件;then
statement1
statement2
.....
else
statement3
statement4
fi
五、脚本实例
练习,写一个脚本,完成以下要求
给定一个用户
1,如果其UID为0,就显示此为管理员
2,否则,就显示其为普通用户
#!/bin/bash
#
USER=user1 定义一个变量USER
if id $USER $> /dev/null ;then 判断用户user1是否存在
echo "$USER exists." 用户存在就显示 用户存在
else
echo "$USER not exist." 如果用户不存在就显示用户不存在
fi
写一个脚本
给定一个文件
如果是一个普通文件,就显示之;
如果是一个目录,亦显示之
否则就显示无法识别
#!/bin/bash
#
FILE=/etc/rc.d/rc.sysinit
if [ ! -e $FILE ] ;then 首先判断这个文件是否存在
echo "no such file." 如果不存在就退出脚本
exit 5
fi
if [ -f $FILE ] ;then 判断这个文件是否为普通文件
echo "command file."
elif [ -d $FILE ];then 判断这个文件是否为目录
echo "directory."
else
echo "unknow"
fi
练习:写一个脚本
给脚本传递两个参数(整数)
显示两者之和,之积
#!/bin/bash
#
if [ $# -lt 2];then 判断参数个数不能小于2
echo "Usage:./ddzhu.sh ARG1 ARG2" 提示脚本的格式
exit 7 如果条件不满足退出
fi
echo "The sum is:$[$1+$2]"
echo "The prod is:$[$1*$2]"
在shell脚本的学习中一定要多些脚本,多看脚本。只有这样不断的联系,才是学好shell的最好方法。
本文出自 “deanzhu” 博客,谢绝转载!