Shell脚本提供了多种流程控制结构,用于根据条件执行不同的命令或控制脚本的执行流程。其中包括if-else语句、test命令和条件判定符[[ … ]]等
- if-else 判断:
if [$#-ne 2]; then
echo "缺少参数"
else
echo "有2个参数"
fi
- test命令:
test命令用于测试条件是否为真,并返回相应的退出状态码。它可以进行各种条件判断,如比较数字、字符串、文件属性等。
if test -x /path/to/file
echo "文件存在"
else
echo "文件不存在"
3.[[ … ]]条件判定符:
[[ … ]]是Bash Shell中的条件判定符,与test命令类似,但提供了更多的功能和灵活性。它支持字符串模式匹配、正则表达式匹配和逻辑运算等
if [[$#-ne 2]]; then
echo "缺少参数"
else
echo "有2个参数"
fi
- for 循环:
for i in 1 2 3 4 5; do
echo $i
done
- while 循环:
i=1
while [$i -le 5]; do
echo $i
i++
done
- until 循环:
i=1
while [$i -le 5]; do
echo $i
i++
done
- until-else 循环:
i=1
while [$i -le 5]; do
echo $i
i++
else
echo "已经达到5个数字"
fi
8.case语句用于根据某个变量的值执行不同的操作。其基本语法为:
case 变量 in
模式1)
命令1
;;
模式2)
命令2
;;
*)
默认命令
;;
esac
其中,变量是需要进行判断的变量,模式是用来匹配变量的模式,命令是在匹配成功时需要执行的命令,而“;;”表示一个模式的结束。默认命令是在所有模式都不匹配时执行的命令。
下面是一个例子,用于判断输入的数字是1、2、3还是其他数字:
echo "请输入一个数字:"
read num
case $num in
1)
echo "你输入的是1"
;;
2)
echo "你输入的是2"
;;
3)
echo "你输入的是3"
;;
*)
echo "你输入的不是1、2、3"
;;
esac
在这个例子中,首先通过read
命令获取用户输入的数字,然后使用case语句进行判断。如果用户输入的是1、2或3,则分别输出相应的提示信息;如果用户输入的不是1、2、3,则输出默认的提示信息。
需要注意的是,case语句中的模式可以使用通配符来匹配多个值。例如,模式可以使用*
来匹配任意字符,[...]
来匹配指定的字符范围,?(pattern)
来匹配0个或1个字符,*(pattern)
来匹配0个或多个字符,+(pattern)
来匹配1个或多个字符,@(pattern)
来匹配指定的模式。