1-23-条件测试语句和if流程控制语句的使用
时间:2018-06-16
姓名:魏文应
一、变量测试语句
test测试命令
使用test命令,可以进行变量的测试。如果结果是对的,也叫结果为真,用$?=0表示,反之为假,用$?=1表示。
参数 | 说明 | 示例 |
---|---|---|
-e 文件名 | 文件是否存在,存在为真 | test -e my_test.txt |
-r 文件名 | 文件是否可读,可读为真 | test -r my_test.txt |
-w 文件名 | 文件是否可写,可写为真 | test -w my_test.txt |
-x 文件名 | 文件是否可执行,可执行为真 | test -x my_test.txt |
-s 文件名 | 文件是否有字符,有为真 | test -s my_test.txt |
-d 文件名 | 文件是否为目录,是为真 | test -d my_test.txt |
-f 文件名 | 文件是否为普通文件,是为真 | test -f my_test.txt |
-c 文件名 | 文件是否为字符型特殊文件,是为真 | test -c my_test.txt |
-b 文件名 | 文件是否为块特殊文件,是为真 | test -b my_test.txt |
# 测试文件是否存在
test -e my_test.txt
# 打印测试结果
echo $?
数值大小比较
参数 | 说明 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-ge | 大于等于 |
-lt | 小于 |
-le | 小于等于 |
# 判断5和4是否相等
test5 -eq 4
# 打印测试结果
echo $?
字符串比较
参数 | 说明 |
---|---|
= | 等于则为真 |
!= | 不相等则为真 |
-z 字符串 | 字符串的长度为零则为真 |
-n 字符串 | 字符串的长度不为零则为真 |
str1=abc
str2=abcdtest $str1 = $str2
echo $?test $str1 == $str2
echo $?test $str1 != $str2
echo $?test -z $str1
echo $?
test测试语句另一种常用的使用方法 我们使用
[ ]
中括号来表示test这个命令,比如 [ -d /etc ]
来判断 /etc 是否是一个目录,相当于 test -d /etc
这个命令。使用 [ ]
中括号,在数值比较时,我们可以使用正常的数学符号来比较数值大小,也可以使用 -eq、-ne、-gt 等字符。字符表示 | 符号替代表示 |
---|---|
-eq | == 等于 |
-ne | != 不等于 |
-gt | > 大于 |
-lt | < 小于 |
[ ]
替代test命令是,我们要注意一下几点:- 中括号开始和结束 需要带空格,比如:
[ -d /etc ]
是正确的,[-d /etc]
是不正确的。 - 比较符两边要加空格,比如:
[ 9 == 4 ]
是正确的,[ 9==4 ]
是不正确的。 - 大于号和小于号要加转义字符(\),比如:
[ 9 \< 4 ]
是正确的,[ 9 < 4 ]
是不正确的。如果不用转义字符,可以这样使用:[[ 9 < 4 ]]
。
- 在
[ ]
表达式中,常见的> 、<需要加转义字符,表示字符串大小比较。
[[ ]]
运算符只是[ ]
运算符的扩充, 能够支持< 、>符号运算,而不需要转义符。里面支持逻辑运算符 || 、 && 不再使用 -a 、-o 。
-
[[ ]]
能用正则,而[ ]
不行,比如:
# 这个打印false,*.html就是字面上的意思,而不是通配符* [ "a.html" == *.html ] && echo true || echo false# 这个打印ture,*是通配符 [[ "a.html" == *.html ]] && echo true || echo false# 用引号引起来,*也不是通配符,只是字面上的意思 [[ "a.html" == "*.html" ]] && echo true || echo false
-a
表示(在[[ ]]
这中有双中括号的时候,不能用 -a 表示 &&)。比如:[ -f /etc/passwd ] && [ -w /etc/passwd ]
。逻辑或(||): 可以用
-o
表示(在[[ ]]
这中有双中括号的时候,不能用 -o 表示 ||)。比如:[ -f /etc/passwd ] || [ -w /etc/passwd ]
。在条件判断中,使用逻辑与,可以使用下面三种写法:
if [ 条件判断一 ] && [ 条件判断二 ];
then
命令一
fi
if [[ 条件判断一 && 条件判断二 ]];
then
命令一
fi
if [ 条件判断一 -a 条件判断二 ];
then
命令一
fi
逻辑与和逻辑或,还有下面的用途,比如
[ 1 -lt 2 -a 5 > 3 ] && echo true || echo false
上面语句,如果
[ 1 -lt 2 -a 5 > 3 ]
为真时,执行echo true
,如果为假时,执行echo false
。二、流程控制--if语句 单分支if语句 语法格式:
if条件1; then
命令1
fi
比如:
#!/bin/bashif [ $USER != root ]
then
echo "error: not root user, permission demain."
exit 127# 给它一个退出码
fi
也可以将then和if放在同一行:
#!/bin/bashif [ $USER != root ];
then
echo "error: not root user, permission demain."
exit 127# 给它一个退出码
fi
双分支if语句 语法格式:
if条件1; then
命令1
else
命令2
fi
比如,写一个ping测试IP的脚本,看一下是否能够ping通:
#!/bin/bash# 在类Unix系统中,/dev/null,或称空设备,
# 是一个特殊的设备文件,它丢弃一切写入其
# 中的数据(但报告写入操作成功),读取它
# 则会立即得到一个EOF。ping -c 3 -i 0.2 $1 > /dev/nullif [ $? -eq 0 ];
then
echo "HOST $1 is up"
else
echo "HOST $1 is down"
fi
多分支if语句 语法格式:
if条件1; then
命令1
elif条件2; then
命令2:
elif条件3; then
命令3
else
命令n
fi
【1-23-条件测试语句和if流程控制语句的使用】比如:
#!/bin/bashm=man
w=womanread -p "请输入你的性别:" sexif [ $sex == $m ];
then
echo "这是男人。"
elif [ $sex == $w ];
then
echo "这是女人。"
else
echo "输入错误。"
fi
推荐阅读
- (七)谈条件
- 女生该不该用小号测试男朋友()
- BNC公链|BNC公链 | Eth2.0测试网Topaz已质押超100万枚ETH
- 我的软件测试开发工程师书单
- Improve|Improve Nested Conditionals(优化嵌套的条件语句) 面对大量的if-else语句
- 无条件接纳
- 性能测试中QPS和TPS的区别
- vue中的条件判断详解v-if|vue中的条件判断详解v-if v-else v-else-if v-show
- 如何在手机上查看测试vue-cli构建的项目
- 工作好忙