2015-05-08 78 views
0

我正在寫一個bash腳本,它假設在一個循環中自動重啓我的autofs。但是當我嘗試運行它時,我只是得到一個語法錯誤。bash腳本似乎無法執行linux命令

#./dd_nfs.sh 
./dd_nfs.sh: line 3: syntax error near unexpected token `/etc/init.d/autofs' 
./dd_nfs.sh: line 3: `/etc/init.d/autofs reload' 

# cat dd_nfs.sh 
    #!/bin/bash 
    for i in `seq 1 10` 
    /etc/init.d/autofs reload 
    sleep 5 
    echo "read test" 
    do time echo "read" 
    echo "read test done" 
    done 

我試過了dos2unix。我用'pwd'來替換第3行來打印我當前的目錄,我嘗試去掉/ r,但仍然得到相同的錯誤。所以我不確定這裏發生了什麼。

有沒有人見過這個? 謝謝

+1

bash的模式是「爲......做......完成」。你錯過了'do' –

+0

你需要在for循環定義之後有'do'行,在'autofs reload'行有 –

+0

這樣做之前,我只是將它和大部分代碼一起註釋掉了。 –

回答

2

您對for循環的語法錯誤。它需要do關鍵字。

更改此:

for i in `seq 1 10` 

這樣:

for i in `seq 1 10` ; do 

或者,如果你願意,你可以寫這樣的:

for in in `seq 1 10` 
do 
    # body of loop 
done 

(此外,縮進你的代碼會使讀起來更容易。)

既然你使用bash,該$(command)語法恕我直言,更容易比`command`閱讀:

for i in $(seq 1 10) ; do 

和bash提供了簡單的範圍內一種特殊的語法:

for i in {1..10} ; do 

針對您的最新編輯,你添加了這一行:

do time echo "read" 

在l的身體裏接力。 do關鍵字在該上下文中是語法錯誤。由於在循環頂部缺少do導致的以前的語法錯誤,shell可能不會報告它。

+0

啊不好意思,做的部分被我評論了。我會更新我的帖子以反映這一點。 –

+0

我現在工作了。我誤解了應該做的事情。我認爲它應該在for循環的內容前面,但它不會。謝謝 –

+1

@ D.Zou:它確實在'for'循環體的前面。你將它添加到'for'循環的中間。 –