[英]bash syntax error when using case statement
我在工作中經常使用bash腳本來自動化大型工作。 我今天進行了一些更改,但一切似乎都很好。 腳本本身大約有1700行。 腳本的第一部分非常好,並且可以很好地貫穿所有用戶輸入和邏輯。 然后,它進入腳本的核心,並在第875行處停止工作(使用bash -x
測試腳本以找到斷點)。 但是,它因以下錯誤而中斷:
script.sh: line 1341: syntax error near unexpected token `;;'
script.sh: line 1341: ` ;;'
第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
再次感謝。
問題可能在第875行(或更早一點)和第1341行之間。它可能是引號放錯了或不太細膩。 如果沒有這些行之間的所有原始材料,對於我們來說調試幾乎是不可能的。
建議1:使用“ bash -n -v”運行,看看是否可以使您對問題有任何了解。
建議2:將腳本分成更易於管理的較小部分,並且可以單獨調試。 我擁有的最大腳本(在bin目錄中的400個腳本中)來自autoconf套件-它們的權重接近1100行; 接下來最大的是我的,750行腳本太d..n大。 接下來的最大腳本是600到700行的Perl(包括Perl文檔)。
說了“缺少報價”后,我發現您靠近875行的片段具有:
echo -n "Creating file . . . "
echo "XXXXXXXXXXX
在第二個回顯中缺少缺少的雙引號。
您還提到了進行更改的方法,盡管還沒有接近腳本中斷的時間。 由於您的代碼受版本控制(您不會夢想沒有備份就玩1700行腳本,對嗎?),您應該再次查看實際的更改。
甚至可以備份到以前的工作版本,然后一次又一次地仔細地進行更改,直到您了解破壞某些內容的原因為止。
在本節中,等號周圍有空格:
case $VERSION in
STR2 )
VAR4 = "STR5"
VAR5 = "STR6"
VAR6 = "STR7"
VAR7 = "STR8"
把那些拿出來,你可能會沒事的(除非那是一個發布錯誤)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.