shell条件语句

一、测试

文件测试test

test的语法
test 条件表达式
[ 条件表达式 ] 
 
test 选项 文件
-d :判断是否是目录(Directory)
-f :判断是否是普通文件(File)
-b :判断是否是块设备(block)
-c :判断是否是字符设备
-e :判断是否存在  (Exist)
-a :判断是否存在  
-r :判断是否有读的权限(Read)
-w :判断是否有写的权限(write)
-x :判断是否有执行的权限(excute)
-L: 测试是否为软连接文件

test表示

 中括号表示

 整数比较[]

[ 整数1 -操作符 整数2 ] 公式
-eq :表示等于
-ne :表示不等于
-gt :表示大于
-ge :表示大于等于
-lt :表示小于
-le :表示小于等于

 判断磁盘空间是否充足

 字符串比较

= : 表示字符串相同
!= :表示字符串内容不相同
-z :表示字符串内容为空
-n :表示字符串存在
语法格式:
[ 字符串1 = 字符串2 ] ##判断两个字符串是否相同
[ 字符串1 != 字符串2 ] ##判断两个字符串是否不相同
[ -z 字符串 ] ##判断字符串是否为空或是否存在,(存在且空也为不存在)

逻辑测试(短路运算)

短路运算
与:&&(相当于电路串联)
格式1:[判断1] && [判断2] 
格式2:命令1 && 命令2 
##表示需要命令1和命令2都为真,才为真,真的意思是$?为0
 
##执行逻辑:如果命令1为真,继续执行命令2,如果命令1为假,没必要执行命令2
 
 
或:|| (相当于电路并联)
格式1:[判断1] || [判断2] 
格式2:命令1 || 命令2 
##表示需要命令1和命令2其中一个为真,就为真,真的意思是$?为0
 
##执行逻辑:如果命令1为真,没必要执行命令2;如果命令1为假,执行命令2

[判断1] && [判断2]  || [判断3]的格式等于if,基本用if替代 

双中括号(支持正则表达式和通配符)

[[ expression ]] 用法
== 左侧字符串是否和右侧的PATTERN相同
 注意:此表达式用于[[ ]]中,PATTERN为通配符
 
=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
 注意: 此表达式用于[[  ]]中;扩展的正则表达式

小括号和花括号的区别

(CMD1;CMD2;...)和 { CMD1;CMD2;...; } 都可以将多个命令组合在一起,批量执行。

总结:
小括号类似于bash,在子bash中运行,不影响当前bash环境变量;
花括号类似于source,在当前的bash环境运行,会影响当前bash的环境变量的值;且需要以分号结尾

二、条件语句

if

if 判断条件1
then
 条件1为真的分支代码

elif 判断条件2
then
 条件2为真的分支代码

elif 判断条件3;then
 条件3为真的分支代码

...
else
 以上条件都为假的分支代码  托底

fi

case

case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac

read -p          i

case $i in
PAT1)
 分支1
 ;;
PAT2)
 分支2
 ;;
...
*)
 默认分支
 ;;

 

posted @ 2024-05-14 16:14  hx_ky36  阅读(1)  评论(0编辑  收藏  举报