2012-04-09 15 views
2

我不是一個bash scriptor,所以這無疑是一個非常簡單的問題。Bash - 對於我在貓?

我有一個bash腳本拋出一個錯誤。它看起來像這樣:

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

錯誤在第二行,與大括號有關。所以看起來大括號不應該在這裏......在這種情況下,第2行應該是什麼樣子?

的腳本應該讀每一行出/root/list.txt,然後用這個DoSomething的(我刪除了實際的命令,在這個例子中)。

謝謝!

回答

7

大概

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

很可能或肯定?因爲如果我錯誤地運行這個腳本,它可能會搞砸了很多工作。 – Alasdair 2012-04-09 04:30:51

+4

在這種情況下,你應該通過在循環體中做一些有益的事情來測試它(例如echo'i')。 – 2012-04-09 04:32:04

+0

如上所述;儘管這是最有可能的代碼,但我很難猜出細節,但任何時候某些事情都可能產生嚴重的影響,最初運行它是一個非常好的主意(帶領先的'echo'等)並驗證它的行爲。對於一個固定的腳本,你可能想要實現一個'--dry-run'選項來做到這一點。另請注意其他答案;其中一個不確定因素是'for'會分詞,而不是分行,而且我無法知道您的應用程序中哪個是正確的。 – geekosaur 2012-04-09 04:35:45

10

你不應該使用for循環讀取線。 Use a while read loop instead.

#!/bin/bash 
while read -r i; do 
    doSomething 
done < /root/list.txt 
+1

這是唯一正確的答案。 – jordanm 2012-04-09 13:42:10

+0

完全同意! – val0x00ff 2017-10-30 14:16:16

-1

您可以調試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 

注:行是可變的

0

嘗試

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