我对终端编程还比较陌生。我正尝试在循环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 中运行,则值得使用它[[
而不是[
。它的作用大致相同,但有一些好处附加功能。