Linux之结构化命令
test
语句
test
命令提供了在if-then
语句中测试不同条件的途径。如果test
命令中列出的条件成立,test
命令就会推出并返回退出状态码0。如果条件不成立,test
命令就会推出并返回非零的退出状态码,这使得if-then
语句不会被执行。test
命令格式非常简单:
test condition
在if-then
语句中
if test condition
then
commands
fi
bash shell提供了另一种条件测试方法,无需在if-then
语句中声明test
命令
if [ condition ]
then
commands
fi
方括号定义了测试条件,需要注意的是,第一个方括号之后和第二个方括号之前必须加上一个空格,否则会报错。
test
命令可以判断三类条件
- 数值比较(bash shell只能处理整数)
- 字符串比较
- 文件比较
在比较测试中,大写字母被认为是小于小写字母的,但是
sort
命令恰好相反。比较测试中使用的是标准的ASCⅡ,根据每个字符的ASCⅡ数值来决定排序结果。sort
命令使用的是系统的本地化语言设置中定义的排序顺序,对于英语,本地化设置指定了在排序顺序中小写字母出现在大写字母之前。test
命令和测试表达式使用标准的数字比较符号来表示字符串比较,而用文本代码来表示数值比较。
if-then
高级特性
bash shell提供了两项可在if-then
语句中使用的高级特性:
- 用于数学表达式的双括号(无需转义)
- 用于高级字符串处理功能的双方括号(支持模式匹配)
使用双括号
双括号提供了使用高级数学表达式的功能,双括号命令格式如下:
(( expression ))
使用双方括号
双方括号命令提供了针对字符串比较的高级特性,其命令格式如下:
[[ expression ]]
case
命令
case
命令会将指定的变量与不同模式进行比较,如果变量和模式模式匹配,那么shell
会执行为该模式指定的命令。可以通过竖线操作符来分隔出多个模式,星号会捕获所有与已知模式不匹配的值。格式具体如下:
case variable in
pattern1 | pattern2) command1;;
pattern3) command2;;
*) default commands;;
esac
举个例子
$ cat test26.sh
#!/bin/bash
# using the case command
#
case $USER in
rich | barbara)
echo "Welcome, $USER"
echo "Please enjoy your visit";;
testing)
echo "Special testing account";;
jessica)
echo "Do not forget to log off when you're done";;
*)
echo "Sorry, you are not allowed here";;
esac
$
$ ./test26.sh
Welcome, rich
Please enjoy your visit