文章目录
一、条件测试
1、test命令
测试表达式是否成立,若不成立返回0,否则返回其他的数值
格式1:test 条件表达式
格式2:[条件表达式]
2、文件测试
[操作符 文件或目录]
常用的测试操作符
-d 测试是否为目录(Directory)
-e 测试目录或文件是否存在(Exist)
-f 测试是否为文件(File)
-r 测试当前用户是否有权限读取(Read)
-w 测试当前用户是否有权限写入(Write)
-x 测试当前用户是否有权限执行(excute)
基本用法
[root@localhost ~]# test -d yanzheng #-d表示是否为目录,可以看出yanzheng是目录
[root@localhost ~]# echo $?
0 #所以返回0表示条件成立
[root@localhost ~]# test -d lan.sh #lan.sh是个脚本文件,不是目录,返回1表示条件不成立
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -d yanzheng ] #这是第二种表达方式
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -f yanzheng ] #test条件表达式 文件或目录。[条件表达式 文件或目录]
[root@localhost ~]# echo $?
127
[root@localhost ~]# [ -f lan.sh ] && echo 'yes' #&&表示并且的意思,具有判断能力
yes #&&前面的条件满足输出,&&后面的命令,若不满足,则不输出
3、整数值比较
[整数1 操作数 整数2]
常用的测试操作符
-eq 等于(Equal)
-ne 不等于(Not Equal)
-lt 小于(Leser Than)
-gt 大于(Greater Than)
-le 小于或等于(Lesser or Equal)
-ge 大于或等于(Greater or Equal)
4、字符串比较
= 字符串内容相同
!= 字符串内容不同,!号表示相反的意思
-z 字符串内容为空
基本用法
[root@localhost ~]# echo $LANG #查看当前语言和字符集
zh_CN.UTF-8
[root@localhost ~]# [ $LANG = zh_CN.UTF-8 ] && echo 'yes' #如果=成立,则输出yes
yes
[root@localhost ~]# [ $LANG != zh_CN.UTF-8 ] && echo 'yes' #不成立则不输出
[root@localhost ~]# [ $LANG != zh_CN.UTF-8 ] && echo 'yes' || echo 'no'
no #||表示上一条执行失败后,才执行下一条命令!=没有成立,所以不输出yes,输出yes命令执行失败,执行输出no
5、逻辑测试
格式:[表达式1] 操作符 [表达式2]
格式2: 命令1 操作符 命令2
常用的测试操作符
-a或&& 表示逻辑与而且的意思
-o或 || 表示或,或者的意思
! 逻辑否
二、if语句的结构
1、单分支结构
if 条件测试操作 if已用磁盘>80%
then 命令序列 then报警
fi
创建新的目录的脚本步骤
2、双分支结构
判断目标主机是否存活,显示检验结果
if 条件测试操作 // 80端口是否在监听
then
命令序列 1 // 网站服务已在运行
else
命令序列 2 启动服务
fi
3、多分支结构
if 条件测试操作
then
命令序列 1
elif
条件测试操作 2
then
命令序列 2
else
命令序列 3
fi
基本用法
[root@localhost ~]# vim lan.sh //打开一个lan.sh进行脚本编辑
#!/bin/bash //声明解释器
read -p "分数成绩:" fen
if [ $fen -ge 85 ]; then //运用多分支结构 进行将成绩分数分类
echo "成绩优秀"
elif [ $fen -ge 70 -a $fen -le 84 ];then
echo "成绩良好"
elif [ $fen -ge 60 -a $fen -le 69 ];then
echo "成绩合格"
elif [ $fen -lt 60 ];then
echo "成绩不合格"
fi
[root@localhost ~]# bash lan.sh //通过bash来将lan.sh进行运行
分数成绩:20
成绩不合格
[root@localhost ~]# bash lan.sh
分数成绩:90 //查看的分数在哪个阶段下面
成绩优秀
三、case语句的结构
case多分支结构
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
模式三)
命令序列
;;
......
*)
默认命令序列
esac
case语句注意事项
①case行首必须以单词“in”,每一模式必须以单个右括号“)”结束
②双分号“;;”表示命令序列的结束
③模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以使用管道符表示或,比如a|b
④最后的*)表示默认模式,其中的*相当于通配符
基本用法
[root@localhost ~]# vim week.sh
#!/bin/bash //声明解释器
read -p "请输入月份:" month //将输入月份来判断是哪个季度
case $month in
[1-3]) //1-3 表示的是第一个季度
echo "这是第一个季度";;
[4-6])
echo "这是第二个季度";;
[7-9])
echo "这是第三个季度";;
1[0-2])
echo "这是第四个季度";;
*)
echo "输入错误";;
esac
[root@localhost ~]# bash week.sh //执行该文件
请输入月份:1 //输入1 表示查看1月份是在哪个季度上面
这是第一个季度
[root@localhost ~]# bash week.sh
请输入月份:4
这是第二个季度
[root@localhost ~]# bash week.sh
请输入月份:7
这是第三个季度
[root@localhost ~]# bash week.sh
请输入月份:10
这是第四个季度