Bash单行嵌套的for循环将比较变量作为命令

时间:2018-09-02 18:01:10

标签: bash

我相信我的错误出在do if ($i -gt 100)区域,但是我无法弄清楚。

我的输入是:

for i in `ps | cut -d ' ' -f1`; do if ($i -gt 100); then echo $i; fi; done

我的输出是将进程ID用作命令的地方。

bash: 13968: command not found
bash: 21732: command not found
bash: 21733: command not found
bash: 21734: command not found

如何解决此问题,应该阅读哪些相关的手册页?谢谢。

3 个答案:

答案 0 :(得分:2)

if ($i -gt 100)

应更改为

if [ $i -gt 100 ]

请注意,[]前后必须有一个空格,否则,您会收到语法错误(因为[是{{1中指向test的链接}}。

由于/usr/binman test,因此相关的管理费用为[

此外,但这与问题无关,我建议从

切换到
test

`command`

以bash播放。

答案 1 :(得分:1)

尚不清楚您的脚本正在尝试执行什么操作(发布的答案在我的系统上不产生任何输出),但是如果您要打印所有大于100的PID,请按以下步骤操作:

$ ps | awk '$1 > 100{print $1}'
PID
314024
217880
230804
217084
263048
260788
218016
313464
201556
200732

答案 2 :(得分:0)

只需在方括号和表达式

之前和之后添加空格
for i in `ps | cut -d ' ' -f1`; do if [ $i -gt 100 ]; then echo $i; fi; done