Last Updated: 2023-07-07 08:12:14 Friday
-- TOC --
test命令是bash的builtin,用来执行条件判断,但很多时候我们用[]
来代替test命令。test命令的存在是必要的,因为如果在configure.ac中写shell脚本,就不能使用[]
。(参考:学习autoconf)
if test $USER = "foo"; then
echo "Hello foo."
这段脚本等价于:
if [ $USER == "foo" ]; then # == is recommended
echo "Hello foo."
条件判断有3种形式:
# 写法一
test expression
# 写法二
[ expression ]
# 写法三
[[ expression ]]
上面3种形式是等价的,但是第3种形式支持正则表达式判断,前两种不支持!
expression是一个表达式。这个表达式为真,test命令执行成功(返回值为0)。表达式为假,test命令执行失败(返回值为1)。注意,第2种和第2种写法,[
和]
与内部的表达式之间,必须有空格。
$ test -f /etc/hosts # if /etc/hosts exists and it's a regular file?
$ echo $?
0
$ [ -f /etc/hosts ]
$ echo $?
0
[ string ]
:如果string不为空(长度大于0),则判断为真。[ -n string ]
:如果字符串string的长度大于零,则判断为真。[ -z string ]
:如果字符串string的长度为零,则判断为真。
[ string1 = string2 ]:如果string1和string2相同,则判断为真。
'>'
和'<'
必须用单引号括起来或反斜杠转义,\<
和\>
,否则会被bash解释成重定向。
[[ string =~ regex ]]
使用=~
符号。
&&
,也可使用参数-a
。||
,也可使用参数-o
。!
。((...))
可以直接做算术运算。
$ if ((1)); then echo "It is true."; fi
It is true.
$ if ((0)); then echo "It is true."; else echo "it is false."; fi
It is false.
这里1是true,0是false,与其它编程语言就保持一致了。而true命令和false命令的exit code于此正好相反!
下面是C语言风格:
$ if (( foo = 5 )); then echo "foo is $foo"; fi
foo is 5
(( foo = 5 ))
完成了两件事情:
本文链接:https://cs.pynote.net/sf/linux/shell/202201191/
-- EOF --
-- MORE --