目录
2.1判断目标主机是否存活,存活就打印is up,如果不存活就打印is down
2.2判断输入的用户名是否存在,存在提示已存在,不存在则创建用户并设置密码
引言:
本问介绍了if语句的部分知识点,通过一个简单的案例给大家介绍了if语句中的条件测试,包括检查是否相等、比较数字、检查多个条件的应用。
一、条件测试
1、test命令
测试表达式是否成立,若不成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]
2、文件测试
[ 操作符 文件或目录 ]
常用操作符 | 说明 |
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(eXcute) |
-b | 测试是否为设备文件 |
-c | 测试是否为字符设备 |
-s | 测试存在且文件大小为空 |
-L | 测试是否为链接文件 |
案例:
2.1测试是否为文件
2.2测试目录或文件是否存在
2.3 测试是否为目录
2.4测试是否为设备文件
2.5测试 当前用户是否有权限执行
2.6test可用[]代替
3、整数值比较
[ 整数1 操作数 整数2 ]
常用测试操作符
-eq: 等于 第一个数等于(Equal)第二个数。
-ne: 不等于 第一个数不等于(Not Equal)第二个数。
-gt: 大于 第一个数大于(Greater Than)第二个数。
-lt: 小于 第一个数小于(Lesser Than)第二个数。
-le: 小于等于 第一个数小于或等于(Lesser or Equal)第二个数。
-ge: 大于等于 第一个数大于或等于( Greater or Equal)第二个数
案例1:当系统登录用户超过5个时,提示:当前用户过多
案例 2:当系统磁盘剩余容量小于1024M时 进行报警
4、字符串比较
格式1 [ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2 [ -z 字符串 ]
常用操作符 | 说明 |
= | 字符串内容相同 |
!= | 字符串内容不同,!号表示相反的意思 |
-z | 字符串内容为空 |
-n | 检查是否有字符串存在 |
5、逻辑测试
格式一:【 表达式1 】 操作符 【 表达式2 】
格式二: 命令1 操作符 命令2
常用操作符 | 说明 |
-a或&& | 逻辑与,而且的意思 |
-o或|| | || 逻辑或,或者的意思 |
! | 逻辑否 |
案例:
&&、||操作符能够正常存在[[ ]]条件判断结构中,但是如果出现在一个[ ]结构中,就会报错
二、if语句的结构
1、单分支结构
if 条件测试操作
then 命令序列
fi
判断挂载点目录,若不存在则自动创建
注意:
单个括号(【】):必须要有空格 两个字符或数字之间的比较左右必须有空格
条件判断:
test一种形式,【】中间只能使用=和!=比较字符串,如果使用< 、>需要进行转义\.
然后中间如果比较数字要用-lt 等符号,不能使用 \< 比较数字,他会当成字符串处理
两个括号【【 】】 :可用于处理逻辑命令,也可以处理字符串是否相等,且使用< 、>不用转义符
2、双分支结构
if 条件测试操作
then
命令序列 1
else
命令序列 2
fi
2.1判断目标主机是否存活,存活就打印is up,如果不存活就打印is down
2.2判断输入的用户名是否存在,存在提示已存在,不存在则创建用户并设置密码
2.3开启查询apache服务
3、多分支结构
if 条件测试操作
then
命令序列1
elif
条件测试操作2
then
命令序列2
else
命令序列3
fi
3.1需求:判断文件的类别
3.2罚抄案例
4、if嵌套语句
判断httpd服务有没有启动
注意等号两边同为字符串必须有空格,可以将==换成-a,两边同为变量值时要引号不要空格。
三、case语句的结构
case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写
case 语句主要适用于以下情况: 某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个 不同的条件,而 case 语句只是判断一个变量的不同取值。
1、case多分枝结构
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
……
*)
默认命令序列
esac
2、case语句注意事项
①case行首必须以单词“in”,每一模式必须以单个右括号")"结束
②双分号";;"表示命令序列的结束
③模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]",还可以用竖杠符号 “|”表示或,如“A|B”。
最后的*)表示默认模式,其中的*相当于通配符
3、case 语句的执行流程
首先使用“变量值”与模式 1 进行比较,若取值相同则执行模式 1 后的命令序列,直到遇见双分号“;;”后跳转至 esac,表示结束分支;若与模式 1 不相匹配, 则继续与模式 2 进行比较,若取值相同则执行模式 2 后的命令序列,直到遇见双分号“;;”后 跳转至 esac,表示结束分支……依此类推,若找不到任何匹配的值,则执行默认模式“*)” 后的命令序列,直到遇见 esac 后结束分支
4.案例
4.1 检查用户输入的字符类型
4.2编写 apache 启动服务脚本
4.3罚抄案例
read -p " 请输入你的分数: " score
case $score in
100 )
echo "秀儿!"
;;
9[0-9]) //表示90到99
echo "$score 分,抄10遍!"
;;
[78][0-9]) //表示70到89
echo "$score 分,抄20遍!"
;;
6[0-9]) //表示60到69
echo "$score 分,抄30遍!"
;;
[0-9]|[1-5][0-9] ) //表示0-9 和10-59 |表示或
echo "$score 分,全抄30遍!"
;;
*)
echo " 输入有误! "
esac
五、总结
1.条件测试的语法
文件测试、整数值比较、字符串比较、逻辑测试
2.if条件语句的语法
单分支、双分支、多分支、嵌套