【判断方式】
1、if命令
if判断类型 | 单分支结构 | 双分支结构 | 多分支结构 |
命令格式 | if [condition];then COMMAND fi | if [condition];then COMMAND else COMMAND fi | if [condition];then COMMAND elif [condition] COMMAND else COMMAND fi |
2、test判断
命令格式:test [option] object ,就是 test [选项] 对象
test -f pass.txt #判断文档pass.txt是否是文档,若是则命令返回值为0,若不是则命令返回值非0
echo "$?"
0
3、[[option] filename]
此种方式一般用来进行文件判断,可搭配的选项有
-e 文件 :判断文件是否存在,存在则为真
-f 文件 :判断文件是否存在,并且文件为普通文件
-d 文件 :判断文件是否存在,并且文件为目录文件
-r 文件 :判断文件是否存在,并且是否拥有可读权限
-w 文件:判断文件是否存在,并且是否拥有可写权限
-u 文件:判断文件是否存在,并且是否拥有SUID权限
-g 文件:判断文件是否存在,并且是否拥有SGID权限
-k 文件:判断文件是否存在,并且是否拥有SBit权限
【注意SUID、SGID、Sbit权限均为文档的特殊权限位】
[ -r pass.txt ]
echo "$?"
0
4、两文件之间进行比较
文件1 -nt 文件2 >判断文件1的修改时间是否比文件2新
文件1 -ot 文件2 >判断文件1的修改时间是否比文件2晚
文件1 -ef 文件2 >判断两个文件的Inode号是否一致 【这个常用于判断硬链接的好方法】
5、整数之间的判断
整数之间判断 | -eq | -ne | -gt | -lt | -ge | le |
命令 | 相等 | 不相等 | 大于 | 小于 | 大于等于 | 小于等于 |
6、字符串的判断
-z string >判断字符串是否为空,为空则返回真
var1=CentOS7.0
if [ -z $var1 ];then echo "111"; else echo "2222"; fi
2222
-n string >判断字符串是否为非空,非空返回真
var1=CentOS7.0
if [ -n $var1 ];then echo "111"; else echo "2222"; fi
111
string1 == string2 >判断两字符串是否相等,相等返回真
var1=abc
var2=bcd
if [ $var2 == $var1 ];then echo "111"; else echo "2222"; fi
2222
string1 != string2 >判断两字符串是否相等,不相等返回真
var1=abc
var2=bcd
if [ $var2 == $var1 ];then echo "111"; else echo "2222"; fi
111
7、多重判断
【逻辑与】
判断1 && 判断2 >逻辑与,判断1和判断2都成立,结果为真
if [ 1 -lt 2 ] && [ 4 -gt 3 ];then echo "111"; else echo "222"; fi
111
[ 判断1 -a 判断2 ] >逻辑与,判断1和判断2都成立,结果为真
if [ 1 -lt 2 -a 4 -gt 3 ];then echo "111"; else echo "222"; fi
111
【逻辑或】
判断1 || 判断2 >逻辑与,判断1和判断2中有1个或以上成立,结果为真
if [ 1 -lt 2 ] || [ 4 -gt 3 ];then echo "111"; else echo "222"; fi
111
[ 判断1 -a 判断2 ] >逻辑与,判断1和判断2中有1个或者以上成立,结果为真
if [ 1 -lt 2 -o 4 -gt 3 ];then echo "111"; else echo "222"; fi
111
【逻辑非】
!判断
if [ ! 1 -lt 2 ];then echo "111"; else echo "222"; fi
222
8、流程判断语句case
命令格式:
case 变量 in
1)
COMMAND;;
2)
COMMAND;;
...
*)
COMMAND;;
esac
case $num in
1)
date +%F;;
2)
ls;;
3)
who;;
4)
pwd;;
*)
echo "Usage:[1|2|3|4]";;
esac
【循环方式】
1、for循环
for命令格式 | for 自定义变量 in 变量集 do COMMAND done | for ((i=1;condition;i++)) do COMMAND done |
实例 |
|
|
2、while循环
命令格式:
while [condition]
do
COMMAND
done
while : ##此处无条件,若while内部没有退出命令,如break、exit;则循环会一直进行
do
read -p "Please input a num:" num
if [ $num = 'quit' ];then
echo "quiting!"
break
else
echo "111"
fi
done
echo "323232"
3、until [ conditon ]
do
COMMAND
done
read -t 5 -p "Please input a number: " str
until [ $str = 'end' ]
do
read -t 5 -p "Please input a number: " str
done
【注意:until语句,无论条件判断是什么,最少执行一次循环体】