第二章shell脚本(二)
Test文件测试的常见选项有
-d:测试是否为目录(directory)
-e:测试目录或文件是否存在(exist)
-f:测试是否为文件(file)
-r:测试当前用户是否有权限读取(read)
-w:测试当前用户是否有写入权限(write)
-x:测试是否设置有可执行权限(excute)
Test常用表达示有两种
test 表达示 [表达示]
常用的表达示为后者因为更加贴近编程习惯,如下
[[email protected] ~]# [ -d /media/Server/ ] ; echo $? #配合$?查看,返回值为非0说明没有这个目录
1
[[email protected] ~]# ld /media/Server/ #验证
ld: /media/Server/: No such file: No suchfile or directory
整数值比较包含的选项
-eq:等于(equal)
-ne:不等于(not equal)
-lt:小于(lesser than)
-gt:大于(greater than)
-le:小于等于(lesser or equal)
-ge:大于等于(greater or equal)
整数值比较在脚本中应用较多,如判断已登录用户数量。
[[email protected] shelltest]# stati=`who | wc-l`
[[email protected] shelltest]# [ $stati -le 5 ]&& echo "Active users less than 5 peopl"
Active users less than 5 peopl
字符串比较
=:第一个字符串与第2个字符串相同
!=:第1个字符串与第2个字符串不相同,“!”为取反的意思
-z:检查字符是否为空。
逻辑测试
&&:逻辑与,表示“而且”的意思,当两个条件都成立时才会返回值为0,使用test测试时“&&”可以改为“-a”
||:逻辑或,表示“或者”的意思,只要前后有一个条件成立,整个测试命令的返回值即为0,Test时可改为“-o”
!:逻辑否,表示“不”的意思,只有当指定条件不成立时,整个测试命令的返回值即为0。
用&&做例子:
[[email protected] ~]# [ 6 -ne 4 ] &&echo "yes"
Yes
If 语句
if语句的选择结构分为三种基本类型
- if单分支结构,格式如下
if 条件测试操作
then
命令序列
fi
单分支案例
[[email protected] ~]# vim test.sh
#!/bin/bash
#########if单分支案例############
who=`who |wc -l`
if [ $who -le 5 ];then
echo "Active users less than 5people"
fi
[[email protected] ~]# sh test.sh
Active users greater than 5 people
双分支If语句
双分支if语句要求针对“条件成立”和“条件不成立”两种情况执行两种不同的操作
[[email protected] ~]# vim test.sh
#!/bin/bash
#########if多分支案例############
who=`who |wc -l`
if [ $who -le 5 ];then
echo "Active users less than 5people"
else
echo "Active users greater than people"
fi
[[email protected]~]# sh test.sh
Activeusers greater than 5 people
多分支if语句
多分支if语句根据测试结果,执行不同的操作,所以能够嵌套使用,进行多次判断。格式如下:
- if单分支结构,格式如下
if 条件测试操作1
then
命令序列1
elif 条件测试操作2
then
命令序列2
Else
命令序列3
fi
多分支案例:
[[email protected] ~]# vim Scores_query.sh
#!/bin/bash
###########分数优、良、差查询脚本###########
read -p " 请输入您的分数(1-100):" score
if [ $score -ge 85 ] && [ $score -le100 ]
then
echo " 您的分数为$score分, 为优秀"
elif [ $score -ge 70 ] && [ $score -le84 ]
then
echo " 您的分数为$score,良"
elif [ $score -ge 60 ] && [ $score-le 69 ]
then
echo " 您的分数为$score分, 为及格"
elif [ $score -le 59 ]
then
echo " 您的分数为$score分, 为不及格"
else
echo " 请输入1-100之间的分数"
fi
[[email protected] ~]# sh Scores_query.sh
请输入您的分数(1-100):100
您的分数为100分, 为优秀
[[email protected] ~]# sh Scores_query.sh
请输入您的分数(1-100):80
您的分数为80分, 为良