shell的test条件测试和case语句
文章目录
- Shell 编程——test、if和case语句
- 一:条件测试
- 1.1:文件测试与整数测试
- 1.1.1:文件测试
- 注意:
- 常用的测试操作符
- 1.1.2: 整数值比较
- 1.2:字符串测试与逻辑测试
- 1.2.1: 字符串的比较
- 1.2.2: 逻辑测试
- 二:if语句
- 2.1:if单分支语句
- 2.2:if 双分支语句
- 2.3:if 多分支语句
- 三:case 分支语句
- 3.1:case 分支语句
Shell 编程——test、if和case语句
一:条件测试
1.1:文件测试与整数测试
1.1.1:文件测试
- test 命令
测试表达式是否成立,若成立返回0,否则返回其他数值.
格式1: [test 条件表达式]
格式2: [ 条件表达式 ]
注意:
格式2中表达式与中括号之间要有空格,否则语法错误.
文件测试
[ 操作符 文件或目录 ]
常用的测试操作符
常见的测试操作符 解释
-d 测试是否为目录(directory)
-e 测试目录或文件是否存在(Exist)
-f 测试是否为文件(File)
-r 测试当前用户是否有权限读取(Read)
-w 测试当前用户是否有权限写入(Write)
-x 测试当前用户是否有权限执行(eXcute)
注意: 测试文件推荐用绝对路径
[root@shell ~]# touch abc.txt
[root@shell ~]# test -f abc.txt
[root@shell ~]# echo $?
0
[root@shell ~]# test -d abc.txt
[root@shell ~]# echo $?
1
[root@shell ~]# [-d abc.txt]
bash: [-d: 未找到命令...
'注意中括号要有空格,要不然报错'
[root@shell ~]# [ -d abc.txt ]
[root@shell ~]# echo $?
1
[root@shell ~]# [ -f abc.txt ]
[root@shell ~]# echo $?
0
[root@shell ~]# [ -d /dev/cdrom ]
[root@shell ~]# echo $?
1
[root@shell ~]# [ -f /dev/cdrom ]
[root@shell ~]# echo $?
1
[root@shell ~]# [ -e /dev/cdrom ]
[root@shell ~]# echo $?
0
[root@shell ~]# [ -e /dev/cdrom ]&& echo "yes"
yes
[root@shell ~]# [ -d /dev/cdrom ]&& echo "yes"
[root@shell ~]# [ -f /dev/cdrom ]&& echo "yes"
'注意&& 前面成立继续执行后面内容
'&&前面不成立不执行后面的内容'
1.1.2: 整数值比较
[ 整数1 操作符 整数2 ]
操作符 解释
-eq 等于(Equal)
-ne 不等于(Not Equal)
-gt 大于(Greater Than)
-lt 小于(Lesser Than)
-le 小于或等于(Lesser or Equal
-ge 大于或等于(Greater or Equal)[root@shell ~]# [ 55 -gt 80 ] && echo “yes”
[root@shell ~]# [ 80 = 80 ] && echo “yes”
yes
[root@shell ~]# [ 80 == 80 ] && echo “yes”
yes
[root@shell ~]#
[root@shell ~]# [ ‘zhangsan’ == ‘zhangsan’ ] && echo yes
yes
[root@shell ~]# [ ‘zhangsan’ -eq ‘zhangsan’ ] && echo yes
bash: [: zhangsan: 期待整数表达式
[root@shell ~]# [ ‘zhangsan’ == ‘zhang’ ] && echo yes
[root@shell ~]# [ ! ‘zhangsan’ == ‘zhang’ ] && echo ‘yes’[root@shell ~]# free -m
total used free shared buff/cache available
Mem: 3771 756 2219 57 794 2649
Swap: 8191 0 8191
[root@shell ~]# FreeCC=$(free -m |grep “Mem:”| awk ‘{print $6}’)
[root@shell ~]# echo $FreeCC
794
[root@shell ~]# [ $FreeCC -lt 1024 ] && echo ${FreeCC} MB
794 MB
‘注意这里不能用$( ),这表示括号里面是命令,不能是变量,${}里面可以是变量’
‘一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围,主要用来变量替换’
1.2:字符串测试与逻辑测试
1.2.1: 字符串的比较
常用的格式
格式一:[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]格式二:[ -z 字符串 ]
1.2.2: 逻辑测试
基本格式
格式一: [ 表达式1 ] 操作符 [ 表达式2 ] …
格式二: 命令1 操作符 命令2 …[root@shell ~]# [ -d /etc ] && [ -r /etc ] && echo “yes”
yes
[root@shell ~]# [ -d /etc ] -a [ -r /etc ] && echo “yes”
-bash: [: 参数太多 ‘-a不是可选项’
[root@shell ~]# [ 1 -eq 1 -a 2 -eq 2 ] && echo “yes”
yes
‘-a和-o也可使用在[]中,更加方便’
1.2.3: 一元运算符,二元运算符和三元运算符
二:if语句
2.1:if单分支语句
单分支结构(基本格式)
if 条件测试操作
then 命令序列
fi
- exit 1 异常退出
- exit 0 正常退出
‘单分支if语句’
[root@shell ~]# vim test03.sh
#!/bin/bash
read -p "请输入目录位置" file
if [ ! -d $file ];then
mkdir -p $file
echo "$file 已创建"
fi
[root@shell ~]# sh test03.sh
2.2:if 双分支语句
双分支结构(基本格式)
if 条件测试操作
then 命令序列1
else 命令序列2
fi
[root@shell ~]# vim test03.sh
#!/bin/bash
read -p "请输入目录位置:" file
if [ -d $file ];then
echo "目录已存在"
else
mkdir -p $file
echo "$file已创建"
fi
2.3:if 多分支语句
多分支结构(基本格式)
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi[root@shell ~]# vim chengji02.sh
!/bin/bash
read -p “请输入成绩:” score
if [ $score -lt 0 ] || [ $score -gt 100 ]
thenecho "输入有误"
exit 1;
elif [ $score -ge 85 ] && [ $score -le 100 ]
thenecho "成绩优秀"
elif [ $score -ge 70 ] && [ $score -le 84 ]
thenecho "成绩合格"
else
[root@shell ~]# sh chengji02.sh
请输入成绩:88
成绩优秀
[root@shell ~]# sh chengji02.sh
请输入成绩:82
成绩合格
[root@shell ~]#
[root@shell ~]# sh chengji02.sh
请输入成绩:111
输入有误
三:case 分支语句
3.1:case 分支语句
格式:
case 变量值 in
模式1)命令序列1
;;
模式2)
命令序列2
;;
....
*)
默认命令序列
esac
[root@shell ~]# vim hitkey.sh
1 #!/bin/bash
2 read -p “请输入一个字符,并按回车” key
3 case “$key” in
4 [a-z]|[A-Z])
5 echo “您输入的是字母”
6 ;;
7 [0-9])
8 echo “您输入的是数字”
9 ;;
10 *)
11 echo “您输入的是空格,功能键和其他控制字符串”
12 esac
还没有评论,来说两句吧...