Shell编程之条件语句
Posted 还行少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell编程之条件语句相关的知识,希望对你有一定的参考价值。
一、条件测试
Shell环境根据命令执行后的返回状态值($?)来判断是否成功,当返回值为0时表示成功,非0表示失败或异常
使用test测试命令时,包括以下两种形式
test 条件表达式
或者
[ 条件表达式 ]
1 文件测试
- -d: 测试是否为目录(Directory)
- -e: 测试目录或文件是否存在(Exist)
- -f: 测试是否为文件(File)
- -r: 测试当前用户是否有读取权限(Read)
- -w: 测试当前用户是否有权限写入(Write)
- -x: 测试是否设置有权限执行(Excute)
[root@localhost ~]# [ -d 1.txt ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# mkdir 1
[root@localhost ~]# [ -d 1 ]
[root@localhost ~]# echo $?
0
2 整数值比较
- -eq: 第一个数等于第二个数
- -ne:第一个数不等于第二个数
- -gt: 第一个数大于第二个数
- -lt: 第一个数小于第二个数
- -le: 第一个数小于或等于第二个数
- -ge: 第一个数大于或等于第二个数
[root@localhost ~]# [ 6 -gt 3 ]&& echo "yes" || echo "no" //测试如果6大于3则输出yes,否则输出no
yes
[root@localhost ~]# [ 2 -gt 3 ]&& echo "yes" || echo "no"
no
[root@localhost ~]#
3 字符串比较
- =: 第一个字符串与第二个字符串相同
- !=: 第一个字符串与第二个字符串不相同,“!”表示取反
- -z:检查字符串是否为空,对于未定义或赋予空值的变量将是为空串
[root@localhost ~]# a=10
[root@localhost ~]# b=20
[root@localhost ~]# [ $a = $b ] && echo "zhen" || echo "jia" //a=b则输出zhen,否则输出jia
jia
[root@localhost ~]# [ $a != $b ] && echo "zhen" || echo "jia" //a!=b则输出zhen,否则输出jia
zhen
[root@localhost ~]#
4 逻辑测试
- &&:逻辑与,表示“而且”,只有当前后两个条件都成立,整个测试命令的返回值才为0(结果成立),“&&” 等同于 “-a”
- || :逻辑或,表示“或者”,只要前后两个条件有一个成立,整个测试命令的返回值即为0(结果成立),“||”等同于“-o”
- !:逻辑否,表示“不”,只有当指定条件不成立时,整个测试命令的返回值才为0(结果成立)
[root@localhost ~]# [ a == b ] && [ 10 -gt 5 ] && echo 1
[root@localhost ~]# [ a == b ] || [ 10 -gt 5 ] && echo 1
1
[root@localhost ~]# [ ! a == b ] && [ 10 -gt 5 ] && echo 1
1
[root@localhost ~]#
二、if语句
1.单分支语句
只有在“条件成立”时,才会执行相应的代码
if 条件测试操作(或命令)
then
命令序列
fi
[root@localhost ~]# bash dan.sh
yes
[root@localhost ~]# cat dan.sh
#!/bin/bash
ping -c 2 192.168.30.3 &> /dev/null
if [ $? -eq 0 ];then
echo "yes"
fi
[root@localhost ~]#
2.双分支语句
针对“条件成立”“条件不成立”两种情况,分别执行相应的代码
if 条件测试操作(或命令)
then
命令序列
else
命令序列
fi
[root@localhost ~]# bash dan.sh
no
[root@localhost ~]# cat dan.sh
#!/bin/bash
ping -c 2 192.168.30.10 &> /dev/null
if [ $? -eq 0 ];then
echo "yes"
else
echo "no"
fi
[root@localhost ~]#
3.多分支语句
嵌套使用,进行多次判断,针对“条件成立”“条件不成立”两种情况,分别执行相应的代码
if 条件测试操作 1
then
命令序列 1
elif 条件测试操作 2
then
命令序列 2
else
命令序列 3
fi
[root@localhost ~]# bash dan.sh
网络不通
[root@localhost ~]# cat dan.sh
#!/bin/bash
ping -c 2 192.168.30.10 &> /dev/null
if [ $? -eq 0 ];then
echo "yes"
elif [ $? -eq 1 ];then
echo "网络不通"
else
echo "no"
fi
[root@localhost ~]#
以上是关于Shell编程之条件语句的主要内容,如果未能解决你的问题,请参考以下文章