test命令与if条件判断

Last Updated: 2023-07-07 08:12:14 Friday

-- TOC --

test命令是bash的builtin,用来执行条件判断,但很多时候我们用[]来代替test命令。test命令的存在是必要的,因为如果在configure.ac中写shell脚本,就不能使用[]。(参考:学习autoconf

test命令

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

文件判断

字符串判断

'>''<'必须用单引号括起来或反斜杠转义,\<\>,否则会被bash解释成重定向。

整数判断

正则表达式判断

[[ string =~ regex ]]

使用=~符号。

逻辑运算

算术判断

((...))可以直接做算术运算。

$ 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 --