1. test测试

  Shell环境根据命令执行后的返回状态值($?) 来判断是否执行成功。
  当返回值为0时表示成功,返回值为非0值时表示失败或异常,test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立($?返回值为0表示条件成立)。

1 格式1:    test 条件表达式
2 格式2:    [ 条件表达式 ]

  测试表达式是否成立,若成立返回值为0,否则返回其他数值。

Shell条件语句if、case_if语句

2. 文件/目录测试

  格式为:操作符 文件名或者目录名

常用的测试操作符

 1 -d∶ 测试是否为目录(Directory)
 2 
 3 -e∶ 测试目录或文件是否存在(Exist)
 4 
 5 -f∶ 测试是否为文件(File)
 6 
 7 -r∶ 测试当前用户是否有权限读取(Read)
 8 
 9 -w∶ 测试当前用户是否有权限写入(Write)
10 
11 -x∶ 测试当前用户是否有权限执行(eXcute)
12 
13 -L∶ 测试是否为软链接文件

Shell条件语句if、case_if语句_02

Shell条件语句if、case_字符串_03

 整数值比较

  格式为:[ 整数1 操作符 整数2 ]

常用的测试操作符

 1 -eq∶ 等于(Equal)
 2 
 3 -ne∶ 不等于(Not Equal)
 4 
 5 -gt∶ 大于(Greater Than)
 6 
 7 -It∶ 小于(Lesser Than)
 8 
 9 -le∶ 小于或等于(Lesser orEqual)·
10 
11 -ge∶ 大于或等于(Greateror Equal)

Shell条件语句if、case_字符串_04

 字符串比较

1 格式1
2 
3 【 字符串1 = 字符串2 】
4 【 字符串1 != 字符串2 】
5 
6 格式2
7 
8 【 -z 字符串 】 #是否空值
9 【 -n 字符串 】 #字符集是否存在

常用的测试操作符

  • =: 字符串内容相同
  • !=: 字符串内容不同,! 号表示相反的意思
  • -z: 字符串内容为空

 逻辑测试

1 格式1:[ 表达式 1 ] 操作符 [ 表达式 2 ]
2 
3 格式2:命令1 操作符 命令2

常用的测试操作符

  • -a或&&: 逻辑与,‘‘而且" 的意思.
  • -o或||: 逻辑或,“或者” 的意思
  • !: 逻辑否

3. if条件语句

 单分支结构

  如果只有一个判断式要进行,那么我们可以使用单分支的if语句

1 if [ 条件判断式 ]; than
2     当条件判断成立时,可以进行的命令工作内容
3 fi                     #这里将if反过来写,结束if语句的意思

Shell条件语句if、case_程序段_05

例:

  使用if语句判断输入的内容是否为整数

Shell条件语句if、case_操作符_06

Shell条件语句if、case_操作符_07

 多分支结构

  如果数据需要进行多种不同的判断,则可以使用多分支结构

1 if [ 条件判断式 ]; than
2     当条件判断成立时,可以进行的命令工作内容
3 elif [ 条件判断式二 ]; than
4     当条件判断成立时,可以进行的命令工作内容
5 else    
6     当上面的条件判断都不成立时,可以进行的命令工作内容
7 fi         

Shell条件语句if、case_if语句_08

例:

  • 考试成绩100满分
  • 80~100分为优秀
  • 60~80分为良好
  • 0~60分为不及格

Shell条件语句if、case_字符串_09

Shell条件语句if、case_if语句_10

4. case条件语句

 1 case 变量名称 in
 2 “第一个变量内容”
 3     程序段
 4     ;;
 5 “第二个变量内容”
 6     程序段
 7     ;;
 8 *)
 9     不包含第一个变量内容与第二个变量内容的其他程序执行段
10     默认程序段
11     ;;
12 esac        

例1:

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

Shell条件语句if、case_字符串_11

Shell条件语句if、case_操作符_12

例2:

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

Shell条件语句if、case_操作符_13

Shell条件语句if、case_if语句_14