1.概述
接上一篇的shell变量,本篇将讲解shell的条件判断。条件分支语句在shell编程中使用较为广泛,本来接收单分支和双分支。秉承一个观点:技巧不在多,实用就行。所以掌握一个技能,使用熟练。若真有其他需求再学习其他技能。
2.用法
单分支if语句
if 判断条件; then
statement1
statement2
...
fi
双分支if语句
if 判断条件; then
statement1
statement2
...
else
statement3
statement4
...
fi
3.条件测试
条件测试只是判断条件中的一种,也可以直接使用命令进行条件。
例如
# 传递一个用户名参数给脚本,判断此用户的用户名跟基本组的组名是否一致,并将结果显示出来
#!/bin/bash
#判断传入的参数,用户是否存在
if ! id $1 &>/dev/null; then
echo "No such user."
exit
fi
#判断此用户的用户名跟基本组的组名是否一致
if [ `id -n -u $1` == `id -n -g $1` ];then
echo "Same"
else
echo "None"
fi
条件测试类型
- 整数测试
- 字符测试
- 文件测试
其中 条件测试的表示式
- [ expression ]
- [[ expression ]]
- test expression
ps:1."[[ ]]" bash的关键字
2.[ ] 与 expression 之间必须要有空格隔开
整数测试(双目):
- -eq: 测试两个整数是否相等 $A -eq $B
- -ne: 测试两个整数是否不等
- -gt: 测试一个数是否大于另一个数
- -lt: 一个数是否小于另一个数
- -ge: >=
- -le : <=
INT1=61
INT2=63
1.[ $INT1 -eq $INT2 ]
2.[[ $INT1 -eq $INT2 ]]
3.test $INT1 -eq $INT2
字符测试
- string1 ==/= string2 判断两字符串是否相等
- string1 != string2 判断两字符串是否不等
- -n string 测试指定字符串是否为空
- -s string 测试指定字符串是否不为空
ps:1.[ $A = $B ] 等号两端要有空格
文件测试
- -e FILE 测试文件是否存在
- -f FILE 测试文件是否为普通文件
- -d FILE 测试指定路径是否为目录
- -x FILE 测试当前用户对指定文件是否有执行权限
- -r FILE 测试当前用户对指定文件是否有读权限
- -w FILE 测试当前用户对指定文件是否有写权限
[ -e /etc/inittab ]
[ -x /etc/rc.d/rc.sysinit ]
bash脚本的运行
1.编写好脚本后添加执行权限
chmod +x xxx.sh
./xxx.sh
2.直接用打开新bash进程,通过传参方式运行
bash xxx.sh
bash -n 脚本 测试脚本是否有错误
bash -x 脚本 单步执行脚本
组合条件测试
- -a 逻辑与 同时满足 条件1 与 条件2 为真
- -o 逻辑或 满足 条件1 或者 条件2 一个为真
- ! 逻辑非
判断传入参数个数是否 1 < n <= 3
if [ $# -gt 1 -a $# -le 3 ]
if [ $# -gt 1 ] && [ $# -le 3 ]
4.练习
test1:给定一个用户
1.如果其UID为0, 就显示为管理员
2.否则,显示普通用户
#!/bin/bash
#
NAME=user1
if id -u $NAME -eq 0;then
echo "admin"
else
echo "command"
fi
test2:判断脚本是否有至少一个传入参数
#!/bin/bash
#
if [ $# -lt 1 ]; then
echo "User: ./file.sh ARG1 [ARG2 ...]"
exit 7
else
echo $*
fi