shell编程之条件语句

210 阅读3分钟

一.条件测试

1.文件测试与整数测试

test命令

  • 格式一: test 条件表达式  ​

  • 格式二: [ 条件表达式 ]  ​

条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成。

测试过程,实现评估布尔声明,以便用在条件性环境下进行执行:

  • 若为真,则状态码变量 $? 返回0
  • 若为假,则状态码变量 $? 返回非0

微信截图_20230810170746.png

举例:

微信截图_20230810171007.png

微信截图_20230810171228.png

-e和-a都可以测试文件是否存在,但和 !(取反)连用时,-a可能不准确,建议使用-e

举例

微信截图_20230810171415.png

微信截图_20230810171807.png

测试root用户对文件是否拥有读、写、执行权限。

发现root用户的读取和写入权限,不受文件的基本权限控制;但执行权限受文件基本权限控制。

举例:

微信截图_20230810172255.png

2.整数测试

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

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

  • -eq:第一个数等于(Equal)第二个数
  • -ne:第一个数不等于(Not Equal)第二个数
  • -gt:第一个数大于(Greater Than)第二个数
  • -lt:第一个数小于(Lesser Than)第二个数
  • -le:第一个数小于或等于(Lesser or Equal)第二个数
  • -ge:第一个数大于或等于(Greater or Equal)第二个数

举例:

微信截图_20230810172704.png

微信截图_20230810172859.png

微信截图_20230810173035.png

3.字符串测试

常用的测试操作符

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

常见四种字符串比较

[ "字符串1"  =  "字符串2" ]   //测试字符串1和字符串2的内容是否相同

[ "字符串1" !=  "字符串2” ]   //测试字符串1和字符串2的内容是否不同

[ -z "字符串" ]   //测试字符串是否为空,或者指定的变量是否为空值。(测试字符串的长度是否为零)

[ -n "字符串" ]   //测试字符串是否存在,即是否不为空。(测试字符串的长度是否非零)

举例:

微信截图_20230810173622.png

使用-z或-n测试变量时,变量需要加引号,避免有歧义而导致判断结果有误。

举例

微信截图_20230810183346.png

4.逻辑测试

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

格式2:命令1 操作符 命令2 ...

常见的测试操作符

-a或&&:逻辑与,“而且” 的意思

-o 或||:逻辑或,”或者“ 的意思

!:逻辑否

短路与&& 短路或||

微信截图_20230810183707.png

举例:

微信截图_20230810183927.png

微信截图_20230810184053.png

二.if语句

2.1单分支语句格式

格式:

if 条件测试操作

then 命令顺序

fi

微信截图_20230810184432.png

举例:

微信截图_20230810184914.png

微信截图_20230810184802.png

注:if单分支语句与$$效果一致
如果if后面的条件测试成立则执行then后的命令如果不成立则直接结束判断
[表达式1]&&[表达式2]
如果表达式1成立则执行表达式2如果不成立则不会执行

2.2双分支结构

格式:

if 条件测试操作

then 命令顺序1

else 命令顺序2

fi分支语句

微信截图_20230810185221.png

举例:

微信截图_20230810185505.png

微信截图_20230810185702.png

举例2

微信截图_20230810190114.png

微信截图_20230810190157.png

2.3多分支结构

微信截图_20230810190453.png

举例:

微信截图_20230810191025.png

微信截图_20230810191127.png

三.case语句

格式: case 变量值 in

模式1) 命令序列1 ;;

模式2) 命令序列2 ;;

  • 默认命令序列 esac

举例

注:提示用户输入分数(0-100),判断分数范围,分出优秀、良好、及格、不及格四档。如果用户输入的分数值不在0-100之间,则提示重新输入。

微信截图_20230810191830.png

微信截图_20230810191733.png