shell脚本之条件语句 与 if 语句
Posted 段小宝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本之条件语句 与 if 语句相关的知识,希望对你有一定的参考价值。
目录
一、条件测试
1.1 test 命令
test 命令用来 测试表达式是否成立(条件成立返回 0 ,不成立返回其他数值)。
test 命令 有两种形式:
-
格式:
test 条件表达式
-
格式二:
[ 条件表达式 ]
,方括号两边与条件表达式之间一定要用空格分隔,否则会执行失败。 -
检查最后所执行命令的状态的最简便方法是使用
$?
查看
1.2 文件测试
使用 test 命令进行 文件测试,可以用来判断 对应的是文件还是目录,或者判断是否有相应的权限等。
格式:[ 操作符 文件或目录 ] # 注意[ ]要有空格
常用的操作符 | 功能 |
---|---|
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(Excute) |
-L | 测试是否是软链接(符号链接)文件 |
1.3 整数值比较
用于比较两个整数值的大小。
$() 和 反撇号 是用来提取里面命令的执行结果。
格式:[ 整数变量1 操作符 整数变量2 ]
比较符 | 功能 | 符号 |
---|---|---|
-eq | 等于 | == |
-ne | 不等于 | != |
-gt | 大于 | /> |
-lt | 小于 | /< |
-ge | 大于等于 | ≥ |
-le | 小于等于 | ≤ |
实例:
1 . 如果当前登录系统的用户数量少于5人,进行输出提示。
2 . 判断主内存空闲是否小于1024M
free
命令显示系统使用和空闲的内存情况,-m 选项显示内存的单位为 M。Mem是存,swap 是交换分区内存。
先获取当前内存的值(主内存空闲是指:Mem 内存行的 free 列的值),交给一个变量,再用这个变量来比较。
表达式 && 语句1 || 语句2
相当于java中的三目运算符 ?:
1.4 字符串比较
- 字符串比较可用来测试 用户输入、系统环境等是否满足条件;
常用测试操作符:
=
:两个字符串内容相同!=
:内容不相同,!表示取反-z
:字符串内容为空
格式:
[ 字符串1 = / == 字符串2 ]
[ 字符串1 != 字符串2 ]
[ -z 字符串 ] #检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
-n 非空串
1.5 逻辑测试
用于判断两个或多个条件之间的依赖关系
常用的操作符:
-a或&& :逻辑与,“而且”的意思,为真时,左右表达式需都成立
-o或|| :逻辑或,“或者”的意思,只需前后条件中一个成立
! :逻辑否
注:-a 和 -o 需要在 [] 括号中执行。
格式1 :[ 表达式1 ] 操作符 [ 表达式2 ]
格式2 :命令1 操作符 命令2
注:&&、|| 操作符能够正常存在于 [[ ]]
条件判断结构中,但是如果出现在[ ]
结构中的话,会报错
示例:
[ 3 -ne 1 ] && [ 3 != 2 ]
等同于
[ 3 -ne 1 -a 3 != 2 ]
等同于
[[ 3 -ne 1 && 3 != 2 ]]
例:通过 输入IP地址,判断能否访问该主机。
linux 中的 ping 命令:
- -c 表示发送包的个数
- -i 表示发送包的间隔时间
- -w 表示多少秒后停止ping操作
二、if 语句
if-fi 语句是编程语言中用的最多的语句。可以直接一行写在终端框中,也可以写在shell文件中。
注意点:
- fi 表示结束判断,别忘了加上。
- if 不能直接跟符号,需要加空格,如 if [ ],if[]是错的。
2.1 单分支结构
例子:
当磁盘空间使用达到 5% 时,提示报警信息。
难点:如何获取磁盘使用空间?如何与 5 进行对比?
思路:使用 df -h 查看磁盘空间使用信息,
-h 会自动转换单位,不好截取G这个字符,这里不带参数。
例2:
写在一行时,每行都要加分号。
2.2 双分支结构
实验:启动http服务。
方便实验,我先 yum remove httpd 卸载httpd服务。
2.3 多分支结构
实例:
read -p "请输入你的分数:" score
if [ ${score} -eq 100 ]
then
echo "结果:满分"
elif [ ${score} -lt 100 ] && [ ${score} -ge 90 ]
then
echo "结果:优秀"
elif [ ${score} -lt 90 ] && [ ${score} -ge 70 ]
then
echo "结果:良好"
elif [ ${score} -lt 70 ] && [ ${score} -ge 60 ]
then
echo "结果:及格"
else
echo "你玩完了"
fi
三、case 条件选择语句
匹配模式支持通配符。
以实验 2.3 为例:
#!/bin/bash
read -p "请输入成绩:" score
#先根据输入的分数给变量赋予不同的值
[ $score -eq 100 ] && a=10
[ $score -lt 100 ] && [ $score -ge 90 ] && a=9
[ $score -ge 60 -a $score -le 89 ] && a=6
[ $score -ge 0 -a $score -le 59 ] && a=1
case $a in
10)
echo "满分"
;;
9)
echo "优秀"
;;
6)
echo "及格"
;;
1)
echo "完蛋"
;;
*)
echo "输入有误"
esac
直接使用通配符也可以:
以上是关于shell脚本之条件语句 与 if 语句的主要内容,如果未能解决你的问题,请参考以下文章