首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

shell编程基础(六)

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180425G1PVTU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券