shell编程之条件语句

220 阅读1分钟

文件测试

要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。

test 操作符 表达式

操作符作用
-d测试文件是否为目录文件(Directory)
-f测试文件是否为普通文件(File)
-e测试目录或文件是否存在(Exist)。
-a测试目录或文件是否存在(Exist)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)
-L测试是否为符号链接(软链接文件)
-ef判断两个文件是否为同一文件。可用于硬链接,主要判断两个文件是否指向同一个inode

image.png

image.png

image.png

整数测试

test 整数变量1 操作符 整数变量2

 [ 整数变量1 操作符 整数变量2 ]

操作符含义
-eq等于
-ne不等于
-gt大于
-lt小于
-le小于等于
-ge大于等于

image.png

image.png

逻辑运算符

  • -a或&& :逻辑与,“而且”的意思,全真才为真。
  • -o或|| :逻辑或,“或者”的意思,一真即为真。
  • ! :逻辑否。

二元运算符

image.png

image.png

三元运算符

ping命令:

  • -c,发送包的个数。
  • -i,发送的间隔时间。
  • -w(小写),多少秒后停止ping操作。
  • -W(大写),以毫秒为单位设置ping的超时时间 。

image.png

image.png

if语句

if双分支结构

格式:

if 判断条件

then 条件成立的分支代码

else  条件不成立的分支代码

fi

image.png

实际应用

判断输入的数字是否为整数

image.png

if多分支结构

格式:

 if 判断条件1

 then

  条件1为真的分支代码

   elif 判断条件2

 then

  条件2为真的分支代码

   elif 判断条件3

 then

  条件3为真的分支代码

   ...

 else

  以上条件都为假的分支代码

   fi

image.png

实际应用

实验要求:提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入决赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入决赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误。

image.png

case语句

格式:

image.png

image.png

实际应用

实验要求:用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中(#chkconfig: 2345 99 20),使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务;如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。

image.png