Linux 为我在猫?

Linux 为我在猫?,linux,bash,Linux,Bash,我不是bash的编剧,所以这无疑是一个非常简单的问题 我有一个bash脚本抛出了一个错误。看起来是这样的: #!/bin/bash for i in (cat /root/list.txt) do doSomething done 错误在第二行,与花括号有关。所以看起来花括号不应该在这里。。。在这种情况下,第2行应该是什么样子 脚本应该读取/root/list.txt中的每一行,然后使用它进行处理(我删除了本例中的实际命令) 谢谢 可能 for i in $(cat /root

我不是bash的编剧,所以这无疑是一个非常简单的问题

我有一个bash脚本抛出了一个错误。看起来是这样的:

#!/bin/bash
for i in (cat /root/list.txt)
do
        doSomething
done
错误在第二行,与花括号有关。所以看起来花括号不应该在这里。。。在这种情况下,第2行应该是什么样子

脚本应该读取/root/list.txt中的每一行,然后使用它进行处理(我删除了本例中的实际命令)

谢谢

可能

for i in $(cat /root/list.txt)

您不应该使用for循环来读取行

#/bin/bash
而read-ri;做
剂量
完成
您可以使用以下工具调试bash脚本:

set -x
使用以下命令:

for line in $(cat /etc/fstab)
do 
   echo $line ; sleep 1
done
或者这个:

while read line
do
    echo $line ; sleep 1
done < /etc/fstab
读取行时
做
回声线;睡眠1
完成
注意:行是可变的

#!/bin/bash
for i in `cat /root/list.txt`
do
    doSomething
done

可能,或者肯定?因为如果我不正确地运行这个脚本,它可能会扰乱很多工作。在这种情况下,您肯定应该通过在循环体中执行一些良性操作(例如
echo
ing
I
)来测试它;我很难猜测细节,尽管这是最有可能的预期代码,但任何时候都可能产生重大影响,最好先运行它(使用前导
echo
s等)并验证其行为。对于固定脚本,您可能需要实现一个
--dry run
选项来执行此操作。还要注意另一个答案;其中一个不确定因素是
for
将进行单词分割,而不是行分割,我无法知道在您的应用程序中哪个是正确的。单词分割会很好。下面是实际的命令:
sshpass-p'PasswordRemoved'scp*-install.sh-l root-o UserKnownHostsFile=/dev/null-o strichhostkeycheck${i}:
list.txt是一个要将文件复制到的IP地址列表。我添加的
$
命令shell运行
cat
,word将其拆分为
for
的列表;如果没有这一点,该命令将毫无意义(假设实际意图不是文字参数
cat/root/list.txt
,这似乎不太可能)。鉴于此,据我所知,这应该是正确的。(对于要复制的文件和目的地,我会更加迂腐,但那只是我自己。)完全同意!
#!/bin/bash
for i in `cat /root/list.txt`
do
    doSomething
done