命令行 IF 未按预期工作

命令行 IF 未按预期工作

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

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

我希望它输出为

1
2
3
4
4
5
5

但该命令的实际输出是

1
1
2
2
3
3
4
4
5
5

有人能帮我指出错误吗?

谢谢!

答案1

[括号是命令的别名,常规测试命令中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

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

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

您也可以使用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

答案2

将您的命令编辑为如下内容应该可行:

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

作为额外的改进,如果此命令仅在 bash 中运行,则值得使用它[[而不是[。它的作用大致相同,但有一些好处附加功能

相关内容