Shell编程基础---逻辑判断、if/case语法
2019独角兽企业重金招聘Python工程师标准>>>
文章图片
本文索引:
- shell脚本中的逻辑判断
- 文件目录属性判断
- if特殊用法
- case判断
if条件语句的三种格式
- 格式1
# if 语句;
then 语句;
fi
if 条件
then
语句
fi
# if [ 3 -gt 2 ];
then echo "ok";
fi
# []内需要保持空格
- 格式2
if 条件
then
语句
else
语句
fi
# if [ 3 -gt 2 ];
then echo ok;
else echo "not ok";
fi
- 格式3
if 条件
then
语句
elif
语句
else
语句
fi
使用sh -x 脚本,可以查看执行到哪一步shell中逻辑判断表达式
# shell中的判断表达式需要使用-gt等代替>等
>-->-gt
<-->-lt
>=-->-ge
<=-->-le
==-->-eq
!=-->-ne
多条件
- 与 &&
if [ $a -gt 4 ] && [ $a -lt 10 ]
then
echo True
else
echo False
fi
- 或 ||
if [ $a -gt 10 ] && [ $a -lt 5 ]
then
echo True
else
echo False
fi
文件目录属性判断
【Shell编程基础---逻辑判断、if/case语法】在shell中,常常需要对文件、目录的权限、是否存在做出判断。
- 是否是普通文件,且存在 [ -f file ]
- 是否是目录,且存在 [ -d dir ]
- 文件或目录是否存在 [ -e file/dir ]
- 是否可读 [ -r file/dir ]
- 是否可写 [ -w file/dir ]
- 是否可执行 [ -x file/dir ]
在上面的-d等前面加上!表示取反,如[ ! -f file ]表示匹配文件不存在配合&&和||实现代码精简
- && 在前一个语句执行正确后才会执行后面的操作
[ -f file ] && touch file
- || 在前一个语句执行失败后才会执行后面的操作
[ -d dir ] || mkdir dir
if特殊用法
- 判断变量的值是否为空 [ -z "$var" ]
[root@castiel-Lu shell]# var=
[root@castiel-Lu shell]# [ -z $var ] && echo empty
empty
- 判断变量的值是否非空 [ -n "$var" ]
[root@castiel-Lu shell]# [ -n $var ] && echo not empty
not empty[root@castiel-Lu shell]# if [ -n file1 ];
then echo "file1 is not empty.";
fi
file1 is not empty.
-z参数无法作用在文件上,只能作用于变量。如果要判断文件是否为空,可以对文件进行行数计算并赋值给新变量:n=`wc -l file`,再对n进行判断即可。
- 将命令作为判断条件
# grep -q选项可以将过滤结果不进行输出
[root@castiel-Lu shell]# if grep -wq 'root' /etc/passwd;
then echo "User root exist.";
fi
User root exist.# 配合!取反实现另外条件的判断
- (()) 等同于 []
# shell中可以在(())中进行关系判断,与[]不同的是,(())中使用>等正常表达式,[]中使用不能使用>等,只能使用-gt等替代。
[root@castiel-Lu shell]# if (( 3 > 2 ));
then echo True;
fi
True
[root@castiel-Lu shell]# if [ 3 -gt 2 ];
then echo True;
fi
True
case判断
- 格式
case 变量名 in
value1)
command
;
;
value2|value3|value4)//可以多个值执行一种命令
command
;
;
*)
command
;
;
esac
- case实例
# 用户输入一个分数,判断分数是否及格/优秀
#!/bin/bash
read -p "Please input a number: " n// 获取用户输入
if [ -z "$n" ]// 判断是否为空
then
echo "Please input a number."
exit 1// 退出脚本,退出码为1
fin1=`echo $n|sed 's/[0-9]//g'`// 判断是否输入的为全数字
if [ -n "$n1" ]
then
echo "Please input a number."
exit 1
fi// 判断分数位于什么段位
if [ $n -lt 60 ] && [ $n -ge 0 ] // 分数需要大于等于0
then
tag=1//tag变量用于后续的case判断
elif [ $n -ge 60 ] && [ $n -lt 80 ]
then
tag=2
elif [ $n -ge 80 ]&& [ $n -lt 90 ]
then
tag=3
elif [ $n -ge 90 ] && [ $n -le 100 ] //分数需要小于等于100
then
tag=4
else
tag=0
fi# 通过对分数进行判断进行输出
case $tag in
1)
echo "not good"// 分数在60分以下,打印not good勉励下
;
;
2)
echo "it's ok" // 分数及格了,打印还不错
;
;
3)
echo "good" // 优秀
;
;
4)
echo "great" // 十分优秀
;
;
*)
echo "The number range is 0-100."// 超出分数范围
;
;
esac
执行echo $?可以返回上一步执行的退出状态码;使用sh -x命令显示代码运行过程,便于shell的改进。转载于:https://my.oschina.net/LuCastiel/blog/1619345
推荐阅读
- Shell-Bash变量与运算符
- Python基础|Python基础 - 练习1
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Java|Java基础——数组
- Java基础-高级特性-枚举实现状态机
- 营养基础学20180331(课间随笔)??
- iOS面试题--基础
- HTML基础--基本概念--跟着李南江学编程
- typeScript入门基础介绍
- 我的软件测试开发工程师书单