目录
一、条件测试
- Shell 环境根据命令执行后的返回状态值 " $? " 来判断是否执行成功,当返回值为0时表示成功,否则表示失败或异常(非0值)。
- 使用专门的测试工具 test 命令,可以对特定条件进行测试,并根据返回值(值为0)来判断是否成立。
1、文件测试
在shell脚本中进行条件判断的两种通式:
方式一: test [操作符选项] 表达式
方式二: [ 操作符选项 表达式 ] 两边要有空格
在Java中有boolean值来帮助我们识别逻辑判断条件的真假,在shell脚本中通过特俗变量$?同样能够达到判断上一命令执行的状态是否成功(返回码 0 为执行成功!非0则为执行异常! )
常用操作选项如下
test命令测试
[ 条件表达式 ]测试
2、整数值比较
整数值比较是指根据给定的两个整数值来判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。
基本格式和常用选项
-eq | 等于 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
-ne | 不等于 |
1、若要判断当前已登录的用户数,当小于5个时输出“太少了”。
3、字符串比较
= | 字符串内容相同 |
!= | 字符串内容不同,! 号表示相反的意思 |
-z | 字符串内容为空 |
-n | 字符是否存在 |
4、浮点运算(小数运算)
方式一 : echo "浮点运算字符串" | bc
方式二: awk 'BEGIN {print 浮点运算字符串}'
[root@localhost ~]#i=1.1*1.2
[root@localhost ~]#awk 'BEGIN {print '$i'}'
1.32
[root@localhost ~]#echo "$i"|bc
1.3
[root@localhost ~]#echo "scale=2; $i"|bc scale=n可以指定小数点后的位数或 几位小数显示几位
1.32
5、逻辑测试
-a或&& : 逻辑与,“而且”的意思,全真才为真。
-o或|| : 逻辑或,“或者”的意思,一真即为真。
! : 逻辑否。
逻辑与,“而且”的意思,全真才为真。
[root@localhost ~]#[ 1 -eq 2 ] && [ 1 -eq 1 ]
[root@localhost ~]#echo $?
1
逻辑或,“或者”的意思,一真即为真。
[root@localhost ~]#[ 1 -eq 2 ] || [ 1 -eq 1 ]
[root@localhost ~]#echo $?
0
TIPS:&和 | 既是逻辑运算符也是位运算符,而&&和||只是逻辑运算符;
- &&当左边为假,右边不再进行运算。
-
|| 当左边为真,右边不再进行运算。
双中括号(支持正则表达式和通配符)
注意使用的语法,可以理解为双中括号可以支持模糊匹配
[root@localhost opt]#script=ping.sh
[root@localhost opt]#[[ $script == *.sh ]];echo $?(可以)
[root@localhost opt]#[[ $script =~ sh$ ]];echo $?(可以)
小括号和花括号的区别
小括号类似于bash,在子bash中运行,不影响当前bash环境变量;
花括号类似于source,在当前的bash环境运行,会影响当前bash的环境变量的值;且需要以分号结尾
二、if语句
if条件语句的结构类型
2.1单分支结构
if [ 判断 ] #如果怎么样 [ 判断 ]
then #则
命令序列 #执行此命令
fi #结束。为固定搭配,别忘了打fi
2.2双分支结构
if [ 判断 ] #如果怎么样 [ 判断 ]
then #则
命令序列1 #执行此命令1
else #其他情况的话
命令序列2 #执行此命令2
fi
2.3多分支结构
if [ 判断1 ] #如果 情况1
then
命令序列1 #运行命令1
elif [ 判断2 ] #其他如果 情况2
then
命令序列2 #运行命令2
elif [ 判断3 ] #其他如果 情况3
then
命令序列3 #运行命令3
.....(可以有多个) #情况.......
else #运行命令...
命令序列4
fi #结束 固定搭配fi
实验1:
#!/bin/bash
#判断是否为root管理员
a=$(id -u)
if [ $a -eq 0 ]
then
echo "你是root管理员"
fi
实验2:判断是否为超级管理员![](https://img-blog.csdnimg.cn/direct/813ffa5095e94061849241a5b4502e92.png)
#!/bin/bash
#判断是否为root管理员
a=$(id -u)
if [ $a -eq 0 ]
then
echo "你是root管理员"
else
echo "你不是root管理员"
fi
实验3:根据分数反馈表现结果
#!/bin/bash
read -p "请输入你的分数:" a #读取键盘输入 变量名为a
if [ $a -ge 90 -a $a -le 100 ];then #if输入分数大于等于90 小于100;则
echo "宝宝最棒" #输出 宝宝最棒
elif [ $a -ge 70 -a $a -lt 90 ];then #其他情况1 输入分数大于等于70小于90则
echo "宝宝真厉害" #输出 宝宝最厉害
elif [ $a -ge 60 -a $a -lt 70 ];then #其他情况2 输入分数大于等于60小于70则
echo "宝宝加油" #输出 宝宝加油
elif [ $a -ge 0 -a $a -lt 60 ];then #其他情况3 输入分数大于等于0小于60则
echo "宝宝需要努力了!" #输出 宝宝需要努力了
else #除了以上的其他所有情况
echo "考多少分你不知道啊" #都输出 考多少分你不知道啊
bash $0 #重新执行本脚本,这样输入错误时可以继续输入
#不然得手敲重新执行脚本,显得很呆
fi #结束 固定搭配fi
三、case语句的结构
case的语法结
case 变量引用 in
模式1)
命令分支1
;;
模式2)
命令分支2
;;
...
*)
默认命令分支
esac
* | 任意长度任意字符 |
? | 任意单个字符 |
[0-9] | 指定范围内的任意单个字符 |
| | “或者” |
实验:
#!/bin/bash
read -p "请输入你的分数(0~100):" num
case $num in
100)
echo "优秀"
;;
[89][0-9])
echo "良好"
;;
[67][0-9])
echo "及格"
;;
[0-9]|[1-5][0-9])
echo "继续努力!"
;;
*)
echo "输入有误,请输入 0~100 的范围!"