Linux之结构化命令

mark

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
Researcher

I am a PhD student of Crop Genetics and Breeding at the Zhejiang University Crop Science Lab. My research interests covers a range of issues:Population Genetics Evolution and Ecotype Divergence Analysis of Oilseed Rape, Genome-wide Association Study (GWAS) of Agronomic Traits.

comments powered by Disqus