引言:本章内容将和拐友们一起玩一下编程里的各种函数以及语句的用法。
目录:
一.条件测试
1.1.test命令
测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值 。
格式:
test 条件表达式
[ 条件表达式 ] (条件表达式的两边都需要有空格,且此方法更为常用)
1.2文件测试之常用的测试操作符
常见的测试操作符 | 含义 |
-d | 测试是否为目录(directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(eXcute) |
-b | 测试是否是设备文件 |
-c | 测试是否为字符设备文件 |
-s | 测试存在且文件大小为空 |
-L | 测试是否为链接文件 |
1.3.整数值比较
1.3.1格式
格式:
[ 整数1 操作符 整数2 ]
1.3.2常见测试操作符
操作符 | 含义 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-lt | 小于(Leser Than) |
-gt | 大于(Greater Than) |
-le | 小于或等于(Lesser or Equal) |
-ge | 大于或等于(Greater or Equal) |
1.4.字符串比较
1.4.1字符串格式
[ 字符串1 = 字符串2 ] #判断是否相等
[ 字符串1 != 字符串2 ] #判断是否不等
[ -z 字符串 ] #判断字符串内容是否为空
1.4.1字符串操作符
操作符 | 含义 |
---|---|
= | 字符串内容相同 |
!= | 字符串内容不同,!号表示相反的意思 |
-z | 字符串内容为空 |
-n | 检查是否有字符串存在 |
1.5逻辑测试
1.5.1逻辑测试的格式
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
1.5.2常用的测试操作符
-a或&& | 逻辑与,而且的意思 |
---|---|
-o或▕▕ | 逻辑或,或者的意思 |
! | 逻辑否 |
二.If语句
2.1单分支结构
2.1.1单分之结构的格式
第一种格式:
1.if [ 条件测试操作 ];
2.then 命令序列
3.fi #注意后面有个结尾,开头结尾要凑成一对否则会报语法错误
第二种格式:
1.if [ 条件测试操作 ];then
2.命令序列
3.fi
如果只有一个判断式要进行,那么我们可以使用单分支的if语句 ,只有在条件成立时才会执行,否则不执行任何操作。
案例一 :
案例二:
同理:
ps注意:
单个括号(【】):必须要有空格 两个字符或数字之间的比较左右必须有空格
条件判断:
test一种形式,【】中间只能使用=和!=比较字符串,如果使用< 、>需要进行转义\.
然后中间如果比较数字要用-lt 等符号,不能使用 \< 比较数字,他会当成字符串处理两个括号【【 】】 :可用于处理逻辑命令,也可以处理字符串是否相等,且使用< 、>不用转义符
2.2双分支结构
2.2.1双分支结构的格式
格式: if 条件
if 条件测试操作 then
then 命令序列1 指令集
then 命令序列2 else
fi 指令集
if
案列1:
-c: ping的次数
-i: 每次多久ping一次,单位是秒
-W :反馈结果的时间,如果不通时可加快反馈时间,单位是秒
案列二:判断输入的用户名是否存在,存在提示已存在,不存在则创建用户并设置密码
1.read -p "请输入你要创建的用户名:" name
2.id $name &> /dev/null
3.if [ $? -eq 0 ];then
4. echo "该用户已存在!"
5.else
6. useradd $name
7. echo "123" | passwd --stdin $name &> /dev/null
8. echo "已创建用户$name,并设置密码"
9.fi
案列三:开启查询apache服务
1.#!/bin/bash
2.netstat -natup | grep ":80" &> /dev/null //查询服务检索端口 有没有80端口的服务存在,把输出的信息放到黑洞里
4.if [ $? -eq 0 ];then
5.echo "apache服务已经运行!"
6.else
7.echo "启动httpd服务"
8.yum install -y httpd &> /dev/null
9.systemctl start httpd
10.echo "启动完成,欢迎使用Apaceh服务!"
11.fi
2.3多分支结构
2.3.1多分支结构的格式
if 条件
then
指令
elif 条件
then
指令
else
指令
fi
案列一:辨别文件的类别
1.root@localhost home]# vim dome6.sh
2.#!/bin/bash
3.name=/home
4.if [ -d $name ] && [ -r $name ];then
5. echo "$name 是一个目录并且具有可读权限"
6.elif [ -f $name ];then
7. echo "$name 是一个文件"
8.elif [ -b $name ];then
9. echo "$name 是一个设备文件"
10.else
11. echo "无法判断文件类别"
12.fi
案例二:根据输入的考试分数不同来区分
#!/bin/bash
read -p "请输入您的分数(0-100): " GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE 分,优秀!"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE 分,合格!"
else
echo "$GRADE 分,不合格!"
fi
案列三:罚抄案例
#!/bin/bash
read -p "请输入你的分数: " score
if [ $score -eq 100 ];then
echo "牛皮克拉斯"
elif [ $score -ge 90 ] && [ $score -lt 100 ]
then
echo "$score 分,小牛皮克拉斯,但错的还是得抄10遍!"
elif [ $score -ge 70 -a $score -le 89 ]
then
echo "$score 分,要继续加油哦,错的抄20遍!"
elif [ $score -ge 60 -a $score -le 69 ]
then
echo "$score 分,昨晚搁那梦游呢,错的抄30遍! "
elif [ $score -ge 0 -a $score -lt 60 ]
then
echo "$score 分,刷厕所去吧,所有的全抄30遍 !"
else
echo "输入有误!"
fi
ps:注意不能输入错误的语法哦
2.4 if嵌套语句
例1.判断httpd服务有没有启动
判断是否启动
如果启动------输出已启动
如果没启动----判断是否安装---如果安装---启动
如果没安装----安装---如果安装成功---启动
如果安装不成功-----报错
ps aux | grep httpd | grep -v grep
if [ $? -ne 0 ];then
if [ "$(rpm -q httpd)" == "未安装软件包 httpd " ];then
yum -y install httpd
systemctl start httpd
else
systemctl start httpd
fi
else
echo "httpd is running"
fi
三.case多分支语句的语法
3.1.case的概述
case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写
case 语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个 不同的条件,而 case 语句只是判断一个变量的不同取值
3.2case的格式
case 变量值 in
模式 1)
命令序列 1
;;
模式 2)
命令序列 1
;;
* )
默认命令序列
esac
ase 行尾必须为单词“in”,每一模式必须以右括号“)”结束。
1.双分号“;;”表示命令序列的结束。
2.模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号 “|”表示或,如“A|B”。
3.最后的“*)”表示默认模式,其中的*相当于通配符。
3.3case的实验
3.3.1检查用户输入的字符类型
1.#!/bin/bash
2.read -p "请输入一个字符,并按Enter键确认:" KEY
3.
4.case "$KEY" in
5.[a-z]|[A-Z])
6.echo "你输入的是字母"
7.;;
8.[0-9])
9.echo "你输入的是数字"
10.;;
11.*)
12.echo "你输入的是空格,*,_,等特殊字符"
13.esac
3.3.2编写 apache 启动服务脚本
1.#!/bin/bash
2.case $1 in
3.start)
4./usr/bin/systemctl $1 httpd
5./usr/bin/ps aux | grep httpd
6.echo "httpd start"
7.;;
8.stop)
9.//usr/bin/systemctl $1 httpd
10./usr/bin/ps aux | grep httpd
11.echo "httpd stop"
12.;;
13.restart)
14.echo "httpd STOP......"
15./usr/bin/ps aux | grep httpd
16./usr/bin/systemctl $1 httpd
17.echo "httpd restart"
18.;;
19.status)
20./usr/bin/systemctl $1 httpd
21.;;
22.*)
23.echo "plases input start|stop|restart|status"
24.esac
3.3.3罚抄案例
1.read -p " 请输入你的分数: " score
2.case $score in
3.100 )
4.echo "秀儿!"
5.;;
6.9[0-9]) //表示90到99
7.echo "$score 分,抄10遍!"
8.;;
9.[78][0-9]) //表示70到89
10.echo "$score 分,抄20遍!"
11.;;
12.6[0-9]) //表示60到69
13.echo "$score 分,抄30遍!"
14.;;
15.[0-9]|[1-5][0-9] ) //表示0-9 和10-59 |表示或
16.echo "$score 分,全抄30遍!"
17.;;
18.*)
19.echo " 输入有误! "
20.esac
四.总结
1..条件测试的语法 :(文件测试、整数值比较、字符串比较、逻辑测试)
2.if条件语句的语法 :(单分支、双分支、多分支)
3.case多分支语句的语法