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 ;; ... *) 默认分支 ;;