我在工作中經常使用bash腳本來自動執行大型作業。我今天正在做一些改變,但一切似乎都很好。劇本本身長約1700行。腳本的第一部分都很好,並貫穿所有的用戶輸入和邏輯。然後進入腳本的核心並停止工作,直到875行(使用bash -x
測試腳本以找到斷點)。然而,它打破了以下錯誤:1341使用case語句時出現bash語法錯誤
script.sh: line 1341: syntax error near unexpected token `;;'
script.sh: line 1341: ` ;;'
線處於case
語句的中間。下面的代碼是代碼塊的地方是打破開頭:
if [[ $VAR1 = "TRUE" && $VAR2 = "VAL2" ]]; then
VERSION=`XXXXXXXXXXXXXXXX`
## Set variables based on location $VAR3
case $VAR3 in
STR1)
case $VERSION in
STR2)
VAR4 = "STR5"
VAR5 = "STR6"
VAR6 = "STR7"
VAR7 = "STR8"
Line 1341 ---> ;;
STR3)
VAR4="STR9"
VAR5="STR10"
VAR6="STR11"
VAR7="STR12"
;;
STR4)
VAR4="STR13"
VAR5="STR14"
VAR6="STR15"
VAR7="STR16"
;;
esac
VAR8="STR17"
VAR9="STR18"
VAR10=1
VAR11="STR19"
;;
因爲我做什麼敏感性質的,我明明不得不刪除相當多的信息。我知道這可能會讓事情變得更難以幫助我。然而,所有的VAR ## =「STR ##」都是帶有字符串值的標準變量聲明,沒有什麼特別的(沒有變量替換等)。所有變量稍後將在腳本中使用。 VERSION的代碼返回一個字符串值,用於嵌套的case
。
腳本工作正常,直到今天我的變化,但我真的沒有觸及此部分,除了調整一些STR值。我嘗試在引號「」中設置$VAR3
和$VERSION
變量,以及用作案例的STR值。我試圖完全取出這個塊,只是讓它在下一個塊上失敗(STR1有一個不同的值,因此改變了變量聲明)。我把它輸出到控制檯它在做什麼以及在大多數函數之後檢查錯誤。在控制檯上沒有什麼不尋常的東西,錯誤日誌中沒有任何東西。
任何幫助將不勝感激,我知道我問了很多。
順便說一句,這裏是腳本停止運行的第875行的代碼(沒有根據代碼生成錯誤)。再次,bash -x
我可以看到VAR2變量被設置,但腳本在下一個for
循環開始之前中斷。
## Create file ##
echo 'Creating files . . . '
j=0
p=1111
if [ $VAR1 = "TRUE" ]
then
VAR2=1
else
VAR2=2
fi
for i in `seq 1 $HOWMANY`; do <----Line 875
echo -n "Creating file . . . "
echo "XXXXXXXXXXX
再次感謝。
謝謝。我會嘗試建議1並回復。我也明白我在問什麼。我檢查了我編輯過的失敗行之間的部分。我確實有計劃將此分解出來,但在那之前,這是一個野獸。幸運的是,我花了一個小時的長時間艱苦的任務下降到約5分鐘:) – desertwebdesigns 2010-09-29 04:57:30
發現它!它在895線上。你說得對。我永遠不會抓住它。出於某種原因,我遺失了一部分代碼,但是我記得鍵入它。我試圖用'var = $(($ var + 1)'''在循環中增加一個變量,我錯過了'+ 1 ))'部分。再次感謝您的建議。我喜歡'bash -n',這絕對讓測試變得更容易。不知道那個。 – desertwebdesigns 2010-09-29 05:10:35