1.1 条件表达式
1.1.0 条件表达式语法
[ 测试表达式 ]
好习惯:先敲一对[ ],然后退格输入2个空格[ ],最后再退回一个空格开始输入[ -f file ]
1.1.1 文件判断
常用文件测试操作符
判断文件是否存在
[root@kai scripts]#[ -f /etc/hosts ]
[root@kai scripts]#echo $?
[root@kai scripts]#[ -f /etc/hosts1 ]
[root@kai scripts]#echo $?
1
判断文件是否存在,返回方式
[root@kai scripts]#[ -f /etc/hosts ] && echo "文件存在" || echo "文件不存在"文件存在
[root@kai scripts]#[ -f /etc/hosts1 ] && echo "文件存在" || echo "文件不存在"
文件不存在
判断目录是否存在
[root@kai scripts]#[ -d /tmp ] && echo "目录存在" || echo "目录不存在"目录存在
[root@kai scripts]#[ -d /tmp1 ] && echo "目录存在" || echo "目录不存在"
目录不存在
使用变量的方法进行判断
dir=/etc1/;[ -d $dir ] && tar zcf etc.tar.gz $dir || echo"$dir目录不存在"
1.1.2 字符串判断
字符串测试操作符
-z 判断字符串长度(一般用来判断变量内容的长度)
[root@kai scripts]#x= ; [ -z "$x" ] && echo "输入为空" || echo '输入有内容'输入为空
[root@kai scripts]#x=12 ; [ -z "$x" ] && echo "输入为空" || echo '输入有内容'
输入有内容
-n判断字符串长度
[root@kai scripts]#x=12 ; [ -n "$x" ] && echo "输入有内容" || echo '输入为空'输入有内容
[root@kai scripts]#x= ; [ -n "$x" ] && echo "输入有内容" || echo '输入为空'
输入为空
"串 1" == "串 2 "使用定义变量的方式进行判断
cmd=$1
["$cmd"=="start"] &&echo start
#测试
[root@kai scripts]#cmd=start;[ "$cmd" == "start" ] && echo start
start
1.1.3 整数判断
整数二元比较操作符参考
判断两数是否相等
[root@kai scripts]#[ 1 -eq 1 ]
[root@kai scripts]#echo $?
[root@kai scripts]#[ 1 -eq 2 ]
[root@kai scripts]#echo $?
1
大于等于
[root@kai ~]#[ 11 -ge 1 ] && echo "成立" || echo "不成立"
成立
小于
[root@kai ~]#[ 11 -lt 1 ] && echo "成立" || echo "不成立"
不成立
大于
[root@kai ~]#[ 11 -gt 1 ] && echo "成立" || echo "不成立"
成立
不等于
[root@kai ~]#[ 11 -ne 1 ] && echo "成立" || echo "不成立"
成立
1.1.4 逻辑符号
常用逻辑操作符
逻辑操作符与整数判断配合
[root@kai ~]#[ 11 -ne 1 ] && echo "成立" || echo "不成立"
成立
取反
[root@kai ~]#[ ! 11 -ne 1 ] && echo "成立" || echo "不成立"
不成立
两边都为真
[root@kai ~]#[ 11 -ne 1 -a 1 -eq 1 ] && echo "成立" || echo "不成立"
成立
至少有一边为真
[root@kai ~]#[ 11 -ne 1 -o 1 -eq 1 ] && echo "成立" || echo "不成立"
成立
感叹号的特殊用法
使用历史命令,感叹号加上history中的序号,即可执行
[root@kai ~]#!516ls
anaconda-ks.cfg bootime.avg setup.sh vim
1.1.5 【练习题】开发3个shell脚本比较2个整数大小
要求:
1.分别以定义变量,脚本传参以及read读入的方式写3个脚本。
2.用条件表达式(禁止if语句)进行判断。
3.将2个整数的比较结果输出到屏幕,出错需要提示。
使用定义变量方法
[root@kai panduan1]#cat panduan1.sh
#!/bin/bash
NUM1=6
NUM2=2
expr1 + $NUM1 &>/dev/null
[ $?-eq 2 ] && echo"$NUM1 不是整数"&& exit 2
expr1 + $NUM2 &>/dev/null
[ $?-eq 2 ] && echo"$NUM2 不是整数"&& exit 2
["$NUM1"-eq"$NUM2"] && echo $NUM1 = $NUM2 &&exit
["$NUM1"-gt"$NUM2"] && echo $NUM1 \> $NUM2 &&exit
["$NUM1"-lt"$NUM2"] && echo $NUM1 \
使用传参方法
[root@kai panduan1]#cat panduan_chuanchan.sh
#!/bin/bash
[ $#-ne 2 ] && echo "UASGE $0 num1 num2 " && exit
NUM1=$1
NUM2=$2
expr1 + $NUM1 &>/dev/null
[ $?-eq 2 ] && echo"$NUM1 不是整数"&& exit 2
expr1 + $NUM2 &>/dev/null
[ $?-eq 2 ] && echo"$NUM2 不是整数"&& exit 2
["$NUM1"-eq"$NUM2"] && echo $NUM1 = $NUM2 &&exit
["$NUM1"-gt"$NUM2"] && echo $NUM1 \> $NUM2 &&exit
["$NUM1"-lt"$NUM2"] && echo $NUM1 \
使用read读入
[root@kai panduan1]#cat panduan_read.sh
#!/bin/bash
read -p "please input integer NO.1:" num1
expr $num1 + 1 &>/dev/null
[ $? -eq 2 ] && echo -e "\033[41;33m $num1不是整数 \033[0m" && exit 2
[ -z $num1 ] && echo "不能为空" && exit 2
read -p "please input integer NO.2:" num2
expr $num1 + 1 &>/dev/null
[ $? -eq 2 ] && echo -e "\033[41;33m $num2不是整数 \033[0m" && exit 2
[ -z $num2 ] && echo "不能为空" && exit 2
[ $num1 -eq $num2 ] && echo -e "\033[34m $num1 = $num2 \033[0m" && exit 0
[ $num1 -gt $num2 ] && echo -e "\033[35m $num1 > $num2 \033[0m" && exit 0
[ $num1 -lt $num2 ] && echo -e "\033[36m $num1
1.2 if 条件语句
# 条件表达式和if语句可以互相转换
1.2.1 三种语法
单分支语句
if[ -f /etc/hosts ]
then
echo'文件存在'
fi
双分支语句
if[ -f /etc/hosts ]
then
echo"文件存在"
else
echo"文件不存在"
echo"...">>/tmp/test.log
fi
多分支语句
if[ -f /etc/hosts ]
then
echo"hosts文件存在"
elif[ -f /etc/host ]
then
echo"host文件存在"
fi
1.2.2 if条件语句小结
单分支:一个条件一个结果
双分支:一个条件两个结果
多分支:多个条件多个结果
1.2.3 【练习题1】输入2个数字,比较大小(使用if语句结合条件表达式实现)
说明:
3个脚本:使用直接赋值,传参,read任一种方法写3种脚本(单分支,双分支,多分支)
示例脚本一:
[root@kai panduan1]#cat if_panduan_1.sh
#!/bin/bash
read -p"请输入第一个整数:"NUM1
expr 1 + $NUM1 &>/dev/null
if[ $? -eq 2]
then
echo"$NUM1 不是整数"17exit 2
fi
read -p"请输入第二个整数:"NUM2
expr 1 + $NUM2 &>/dev/null
if[ $? -eq 2]
then
echo"$NUM2 不是整数"
exit 2
fi
#判断输入数值大小
if[ $NUM1 -eq $NUM2 ]
then
echo"$NUM1 = $NUM2"
exit
fi
if[ $NUM1 -gt $NUM2 ]
then
echo"$NUM1 > $NUM2"
exit
fi
if[ $NUM1 -lt $NUM2 ]
then
echo"$NUM1
示例脚本二:
[root@kai panduan1]#cat if_panduan_2.sh
#!/bin/bash
12read -p"请输入第一个整数:"NUM1
13expr 1 + $NUM1 &>/dev/null
14if[ $? -eq 2]
15then
16echo"$NUM1 不是整数"17exit 2
18fi
19
20read -p"请输入第二个整数:"NUM2
21expr 1 + $NUM2 &>/dev/null
22if[ $? -eq 2]
23then
24echo"$NUM2 不是整数"
25exit 2
26fi
27
28#判断输入数值大小
29if[ $NUM1 -eq $NUM2 ]
30then
31echo"$NUM1 = $NUM2"
32exit
33else
34if[ $NUM1 -gt $NUM2 ]
35then
36echo"$NUM1 > $NUM2"
37exit
38else
39if[ $NUM1 -lt $NUM2 ]
40then
41echo"$NUM1
43fi
44fi
示例脚本三:
[root@kai panduan1]#cat if_panduan_3.sh2
#!/bin/bash
read -p "please input integer NO.1:" num1
expr $num1 + 1 &>/dev/null
if [ $? -eq 2 ]
then
echo -e "\033[41;33m $num1不是整数 \033[0m"
exit 2
else
read -p "please input integer NO.2:" num2
expr $num2 + 1 &>/dev/null
if [ $? -eq 2 ]
then
echo -e "\033[41;33m $num2不是整数 \033[0m"
exit 2
fi
fi
if [ -z $num1 -o -z $num2 ]
then
echo "不能为空"
exit 2
fi
if [ $num1 -eq $num2 ]
then
echo -e "\033[34m $num1 = $num2 \033[0m"
elif [ $num1 -gt $num2 ]
then
echo -e "\033[35m $num1 > $num2 \033[0m"
else
echo -e "\033[36m $num1
fi
领取专属 10元无门槛券
私享最新 技术干货