shell编程之条件语句
条件测试
test命令
Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0 ( 真true)时表示成功,返回值为非0值(假false)时表示失败或异常。
测试表达式是否成立,若成立返回0,否则返回其他数值
格式1: test 条件表达式
格式2: [ 条件表达式 ]
方括号“["或"]”与条件表达式之间需要至少一个空格进行分隔
文件测试
[ 操作符 文件或目录 ]
常用的测试操作符 | 说明 |
---|---|
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在( Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(eXcute) |
-L | 测试是否为软连接文件 |
注: -d 和 -f都拥有-e的条件
整数值比较
[ 整数1 操作符 整数2 ]
常用的测试操作符 | 说明 | 数字符 |
---|---|---|
-eq | 等于(Equal) | = |
-ne | 不等于(Not Equal) | != |
-gt | 大于(Greater Than) | > |
-lt | 小于(Lesser Than) | < |
-le | 小于或等于(Lesser or Equal) | <= |
-ge | 大于或等于(Greater or Equal) | >= |
字符串比较
格式1
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2
[ -z 字符串]
[ -n 字符串]
常用的测试操作符 | 说明 |
---|---|
= | 字符串内容相同 |
!= | 字符串内容不同,! 号表示相反的意思 |
-z | 字符串内容为空(Zero) ,对于未定义或赋予空值的变量将视为空串 |
-n | 检查是否有字符串存在 |
逻辑测试
格式1
[ 表达式1 ] 操作符 [ 表达式2 ]
格式2
命令1 操作符 命令2
常用的操作符 | 说明 |
---|---|
-a或&& | 逻辑与,“而且"的意思,前后条件需都成立 |
-o或▕▕ | 逻辑或,“或者"的意思,只需前后条件中一个成立 |
! | 逻辑否 |
a=5
[ $a -ne 1] && [ $a != 2 ] 等同于 [ $a -ne 1 -a $a !=2 ]
#&&、||操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错
[[ $a !=1 && $a != 2 ]]
[ 2 -lt 3 ] && echo true|echo false
[ 2 -ge 3 ] && echo true川|echo false
vim ping. sh
#! /bin/bash
ping -c 3 -i 0.5 -W 2 $1 &> /dev/null && echo “$1 online” || echo “$1 offline”
-c:发送包的个数
-i:发送包的间隔时间
-W:超时时间
-w: 多少秒后停止ping 命令操作
if语句
if单分支
if单分支结构图
单分支if语句
if 条件测试操作
then
命令序列
fi
[1]
if [ 3 -gt 2 ]
then
echo "ok"
fi
[2]
if [ 3 -gt 2]; then echo "ok" ; fi
[3]
[ 3 -gt 2 ] && echo "ok"
if双分支
if双分支结构图
双分支if语句
if 条件测试操作
then 命令序列1
else 命令序列2
fi
if多分支
if多分支结构图
多分支if语句
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
case多分支语句
case多分支结构图
多分支case语句
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认命令序列
esac
case语句结构
1.关键字case后面跟的是“变量值”,即“$变量值”
2.模式1 、模式2、… 、* 对应变量的不同取值,
3.*为通配符,可匹配任意值。
case语句注意事项
1.case行首必须以单词“in”,每一模式必须以单个右括号")“结束
2.双分号”;“表示命令序列的结束
3.模式字符串中,可以用方括号表示一个连续的范围,如”[0-9]"; 还可以使用竖杠表示或,比如alb
4.最后的*)表示默认模式,其中的 * 相当于通配符
练习
1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录