目录
一、条件测试操作
1、test命令
Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非0值(假false)时表示失败或异常。
test 命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立($?返回值为 0 表示条件成立)。
格式一:test 条件表达式
格式二:[ 条件表达式 ] #方括号“[”或“]”与条件表达式之间需要至少一个空格进行分隔
2、文件测试
格式:[ 操作符 文件或目录 ]
常用的操作符:
-d:测试是否为目录(Directory)。
-e:测试目录或文件是否存在(Exist)。
-f:测试是否为文件(File)。
-r:测试当前用户是否有权限读取(Read)。
-w:测试当前用户是否有权限写入(Write)。
-x:测试是否设置有可执行(Excute)权限。
3、整数值比较
格式:[ 整数变量1 操作符 整数变量2 ]
常用的操作符:
-eq:等于 ==
-ne:不等于 !=
-gt:大于 >
-lt:小于 <
-le:小于等于 <=
-ge:大于等于 >=
[root@localhost ~]#free #显示当前的内存的容量,Men表示物理内存,Swap表示虚拟内存
total used free shared buff/cache available
Mem: 1867024 314892 1091840 9256 460292 1334460
Swap: 4194300 0 4194300
[root@localhost ~]#free -m #使用-m表示以M(兆)为单位显示
total used free shared buff/cache available
Mem: 1823 307 1066 9 449 1303
Swap: 4095 0 4095
[root@localhost ~]#free -h #-h 表示以更人性化的方式显示,该选项只有在centos7以上的版本才有用
total used free shared buff/cache available
Mem: 1.8G 307M 1.0G 9.0M 449M 1.3G
Swap: 4.0G 0B 4.0G
如果需要算出空闲比,就需要浮点运算符,bash不支持浮点运算,需要借助bc、awk
Awk
Awk是一个功能强大的编辑工具,用于在Linux/UNIK下对文本和数据进行处理。数据可以来自一个或多个文件,也可以为其他命令的输出,常作为脚本来使用。在执行操作时,Awk逐行读取文本,默认以空格为分割符进行分隔,将分隔所得的各个字段保存在内建变量中,对比改行是否与给定的模式相匹配,并按模式或者条件执行编辑命令,也可以从脚本中调用编辑指令过滤输出相应内容。
awk 例: 加:echo $(awk 'BEGIN{print 4.5+3.4}')
减:echo $(awk 'BEGIN{print 4.5-3.4}')
乘:echo $(awk 'BEGIN{print 4.5*3.4}')
除:echo $(awk 'BEGIN{print 4.5/3.4}')
bc
浮点运算,即小数点运算,使用 bc 命令
bc 例 加:echo "1.1+2.2" | bc
减:echo "5.3-4.6" | bc
乘:echo "2.3*1.4"| bc
除:echo "scale=2; 4.3/2.5"|bc
混合运算:echo "scale=2; 2.2/(1.2+2.3)*1.5+2.1" | bc
4、字符串比较
格式1:
[ 字符串1 = 字符串2 ] 或 [ 字符串1 == 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2:
[ -z 字符串 ] #检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
[ -n 字符串 ] #检查是否有字符串存在
5. 逻辑测试
格式1
[ 表达式1 ] 操作符 [ 表达式2 ]
格式2
[ 命令1 操作符 命令2 ]
-a或&& #逻辑与(而且的意思)
-o或|| #逻辑或(或者的意思)
! #逻辑否
二、if语句
1、if单分支语句
单分支结构(基本格式):
if 条件测试操作
then 命令序列
fi
2、if双分支语句
双分支结构(基本格式):
if 条件测试操作
then 命令序列1
else 命令序列2
fi
3、if多分支语句
多分支结构(基本格式):
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
三、case语句
格式:
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
....
*)
默认命令序列
esac
四、示例
if
vim score.sh
#!/bin/bash
read -p "请输入您的分数(0-100): " score
if [ $score -ge 85 ] && [ $score -le 100 ]
then
echo "$score 分,优秀!"
elif [ $score -ge 70 ] && [ $score -le 84 ]
then
echo "$score 分,合格!"
else
echo "$score 分,不合格!"
fi
case
vim score1.sh
#!/bin/bash
read -p "请输入您的分数(0-100): " score
[[ $score -ge 85 && $score -le 100 ]] && a="great"
[[ $score -ge 70 && $score -lt 85 ]] && a="standard"
[[ $score -ge 0 && $score -lt 70 ]] && a="false"
case $a in
great)
echo "$score 分,优秀!"
;;
standard)
echo "$score 分,合格!"
;;
false)
echo "$score 分,不合格!"
;;
*)
echo "输入有误!"
esac