条件测试——test 或[

命令“test”或“[”可以测试一个条件是否成立,如果测试结果为真,则该命令的退出码为0,如果测试结果为假,则命令的退出码为1。

shell脚本学习整理(二)

shell脚本学习整理(二)

常见测试命令举例:

shell脚本学习整理(二)

note:左方括号[是一个命令的名字,传给命令的各参数之间应该用空格隔开,比如,$VAR、-gt、3、]是[命令的四个参数,它们之间必须用空格隔开。命令test或[的参数 形式是相同的,只不过test命令不需要]参数。

与、或、非的测试命令 

[ ! EXPR ]  : EXPR可以是上述中的任意一种测试条件,!表示逻辑反  

[ EXPR1 -a EXPR2 ] : EXPR1和EXPR2可以是上述中的任意一种测试条件,-a表示逻辑与  

[ EXPR1 -o EXPR2 ] :EXPR1和EXPR2可以是上述中的任意一种测试条件,-o表示逻辑或  

shell脚本学习整理(二)

note:如果上例中的$string变量事先没有定义,则被Shell展开为空字符串,会造成测试条件的语 法错误(展开为[ -d Desktop -a = 'abc' ]),作为一种好的Shell编程习惯,应该总是把变量取值放在双引号之中(展开为[ -d Desktop -a "" = 'abc' ])。

 if/then/elif/else/fi

和C语言类似,在Shell中用if、then、elif、else、这几条命令实现分支控制。

shell脚本学习整理(二)

note:如果两条命令写在同行则需要用;号隔开,一行只写、一条命令就不需要写;号了,另外,then后面有换行, 但这条命令没写完,Shell会自动续行,把下一行接在then后面当作一条命令处理。

          :是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真。

也可以用&&和||来进行上述操作。&&相当于“if...then...”,而||相当于“if not...then...”。

shell脚本学习整理(二)

shell脚本学习整理(二)

case/esac

case命令可类比C语言的switch/case语句,esac表示case语句块的结束。C语言的case只能匹配 整型或字符型常量表达式,而Shell脚本的case可以匹配字符串和Wildcard,每个匹配分支可以有若干条命令,末尾必须以;;结束,执行时找到第一个匹配的分支并执行相应的命令,然后直接跳到esac之后,不需要像C语言一样用break跳出。  

shell脚本学习整理(二)

for/do/done  

Shell脚本的for循环结构和C语言很不一样,它类似于某些编程语言的foreach循环。

shell脚本学习整理(二)

类C方式书写

shell脚本学习整理(二)

 while/do/done   

shell脚本学习整理(二)