2011-04-11 62 views
16

執行for循環時出現問題。我執行我的腳本時出現此錯誤在linux shell腳本中for循環的語法

test1.sh: 2: Syntax error: Bad for loop variable

我不明白這個錯誤。

這是我的腳本

#!/bin/bash 
for ((c=1; c<=5; c++)) 
do 
echo "Welcome $c times..." 
done 

任何一個可以告訴我語法在SH環路(在Ubuntu它鏈接到衝殼)殼在Ubuntu?

+1

我沒有得到同樣的錯誤,你的 - 我得到意外的文件結束。無論如何,你有一個缺少分號。 – 2011-04-11 20:33:16

+1

這對我很有用。您可能在文本中隱藏了一個奇怪的字符。 – karlphillip 2011-04-11 20:35:14

+0

對於bash來說語法看起來很好。你可以嘗試確保你運行的是正確的shell嗎? 'ls -l/bin/bash',也許? – 2011-04-11 20:37:36

回答

31

您可能運行它與sh而不是bash。如果它是可執行的,請嘗試bash test1.sh./test1.sh,但不要sh test1.sh

+0

在bash中可以正常工作 – 2011-04-11 20:42:09

+0

Krelin:你說得對。我使用sh而不是bash或「./」來運行它。它現在運作良好。謝謝 – mkab 2011-04-11 20:57:23

+0

在bash中工作正常。讓sh指向bash(符號鏈接)! – abc 2011-04-12 00:48:36

0

你的shell腳本(如圖所示)在Korn shell和Bash中運行。一些想法:

  • 你可能需要在shebang(#!/ bin/bash而不是#!/ bin/bash)之後有個空格。然而,Dennis Ritchie最初指定的空間是可選。此外,它並不是您使用Bourne shell獲得的錯誤(您可以改爲使用syntax error: '(' unexpected)。
  • 您是否正在使用Windows系統?只是在黑暗中刺傷。這看起來不像Windows錯誤。
  • 這是Solaris還是HP/UX系統?他們可能不是運行真正的Bash版本,或者可能是舊版本。然而,即使是最古老的Bash也認識到for ((x;y;z))構造。

試試這個:執行時爲它們

#! /bin/bash 
set -vx 
echo "Random = $RANDOM" #Test for bash/Kornshell. Will be blank in other shells 
echo \$BASH_VERSINFO[0] = ${BASH_VERSINFO[0]} #Should only work in BASH 
echo \$BASH_VERSINFO[1] = ${BASH_VERSINFO[1]} 
echo \$BASH_VERSINFO[2] = ${BASH_VERSINFO[2]} 
echo \$BASH_VERSINFO[3] = ${BASH_VERSINFO[3]} 
echo \$BASH_VERSINFO[4] = ${BASH_VERSINFO[4]} 
echo \$BASH_VERSINFO[5] = ${BASH_VERSINFO[5]} 
for ((c=0, c<=5, c++)) 
do 
    echo "Welcome $c times" 
done 
  • set -xv將顯示所有行。
  • $RANDOM應該顯示一個值,如果這是BASH或Kornshell(您的for循環可以在任何一箇中工作)。
  • {$BASH_VERINFO[x]}只應該設置,如果這是真正的BASH。即使您在BASH後運行Korn shell,也不會設置這些值(不像$ SHELL,它仍然包含bash)。

如果for循環仍然給你帶來麻煩,就把它刪除吧。在這個腳本的某個地方,我們會發現你是否真的在執行一個bash shell。

5

標準Posix殼只接受語法for varname in list

類C的for循環語法for ((expr1; expr2; expr3))是bashism的。

可以使用for c in $(seq 1 5)

0

是什麼

ls -l /bin/sh 

給你的機器上得到標準的POSIX外殼類似的行爲?

sh的符號鏈接bash,然後你可以做sh ./test1.sh