命令行 IF 未按预期工作

aye*_*aye 2 command-line bash scripts

我对终端编程比较陌生。我正在尝试IFFOR循环中运行一个条件。(该命令将由 cronjob 运行)

for i in {1..5}; do echo $i; if [ $i>3 ]; then echo $i; fi; done

我希望它输出为

1
2
3
4
4
5
5
Run Code Online (Sandbox Code Playgroud)

但该命令的真正输出是

1
1
2
2
3
3
4
4
5
5
Run Code Online (Sandbox Code Playgroud)

谁能帮我指出错误?

谢谢!

Ser*_*nyy 7

[括号是test命令的别名,>常规测试命令中没有符号。用[ $i -gt 3 ]

$ for i in {1..5}; do echo $i; if  [ $i -gt 3 ] ; then echo $i; fi; done
1
2
3
4
4
5
5
Run Code Online (Sandbox Code Playgroud)

你可以使用bash的算术扩展(()) ,以及

$ for i in {1..5}; do echo $i; if  (( $i>3 )) ; then echo $i; fi; done
1
2
3
4
4
5
5
Run Code Online (Sandbox Code Playgroud)

你也可以使用expr,但我保证 100% 你会一直忘记\转义<>唱歌,以及将输出重定向到/dev/null

$> if expr 3 \> 2 > /dev/null ; then echo YES; else echo NO ; fi                           
YES
$> if expr 3 \< 2 > /dev/null ; then echo YES; else echo NO ; fi                           
NO
Run Code Online (Sandbox Code Playgroud)