一.条件结构
1.1test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
条件为真返回 0,条件为假返回 1.
语法1:
test expression #expression就是判断条件
语法2:
[ expression ] #省略test的简写形式,用[]替代,需要注意的是expression两边都需要有空格
1.2test判断的参数
因为test可以进行数值、字符和文件三个方面的判断,各方面详细参数如下:
1.字符串判断
参数 | 用法举例 | 判断含义 | 真(返回值) | 假(返回值) |
-n | test -n STRING | 字符串长度不为零 | 0 | 1 |
-z | test -z STRING | 字符串长度为0 | 0 | 1 |
= | [ STRING1 = STRING2 ] | 判断两个字符串是否一样 | 0 | 1 |
!= | [ STRING1 != STRING2 ] | 判断两个字符串是否不一样 | 0 | 1 |
2.数字判断
eq | 等于 |
ge | 大于等于 |
gt | 大于 |
ne | 不等于 |
le | 小于等于 |
lt | 小于 |
3.文件判断
参数 | 说明 |
---|---|
-e 文件名 | 如果文件存在则为真 |
-r 文件名 | 如果文件存在且可读则为真 |
-w 文件名 | 如果文件存在且可写则为真 |
-x 文件名 | 如果文件存在且可执行则为真 |
-s 文件名 | 如果文件存在且至少有一个字符则为真 |
-d 文件名 | 如果文件存在且为目录则为真 |
-f 文件名 | 如果文件存在且为普通文件则为真 |
-c 文件名 | 如果文件存在且为字符型特殊文件则为真 |
-b 文件名 | 如果文件存在且为块特殊文件则为真 |
二.if语句
2.1流控制
在一个shell脚本中的命令执行顺序称作脚本的流。大多数脚本会根据一个或多个条件来改变它们的流。 流控制命令:能让脚本的流根据条件而改变的命令称为条件流控制命令
exit语句:退出程序的执行,并返回一个返回码,返回码为0正常退出,非0为非正常退出,例如:
exit 0
条件判断
If代码返回0表示真,非0为假。
if语句语法如下:
if [ $1 -eq 1 ];
then
echo '等于1'
elif [ $1 -eq 2 ]
then
echo '等于二'
else
echo '既不等一,也不等于二'
fi
复杂逻辑
多个条件联合
逻辑与
if [ $condition1 ] && [ $condition2 ]
if [ $condition -a $condition2 ]
if [[ $condition1 && $condition2 ]]
逻辑或
if [ $condition1 ] || [ $condition2 ]
if [ $condition -o $condition2 ]
if [[ $condition1 || $condition2 ]]
# test 和 [] 中 我们可以使用 [ $condition1 ] && [ $condition2 ] 或者 [ $condition -a $condition2 ]
# 在 [[]] 这种情况,我们可以直接使用[[ $condition1 && $condition2 ]]
建议在if中直接使用[[]]这种方式,这种方式更加稳定。[[]] shell的一个命令。
-a && 逻辑与 and 两端的条件都可以成立
-o || 逻辑或 or 两端的条件有一段成立就行
2.2case语句
case
case 语句是 shell 中流控制的第二种方式,语法如下:
case $word in
pattern1)
list1
;;
pattern2)
list2
;;
patternN)
listN
;;
*)
list*
;;
esac
命令;;表明流应该跳转到case语句的最后,类似C语言中的break指令。
语法介绍:
case $var in
模式1)
执行1
;;
模式2)
执行2
;;
模式3)
执行3
;;
*)
执行4
esac
第一行: 声明case关键字调用case语法, 紧跟的“变量”一般为用户的输入值, in代表从下方的各个模式进行匹配
第2-4行: 匹配到“模式1”后进行命令的输出或执行, 模式1: 一般为字符或数值
第11-12行: 当用户输入的字符不存在匹配模式时, 直接执行或打印*)下的命令或语句