2015-01-06 52 views
1

我有一個bash腳本,我正在寫這不是按預期連接字符串。我有(在腳本中)單個字符串中的文件夾路徑的預設列表,由單個空格分隔。這很好,稍後在腳本中,我可以像預期的那樣遍歷每個文件夾路徑。SH腳本字符串連接不起作用

我想讓用戶輸入一個可選的其他文件夾列表,並添加到路徑列表來檢查。下面是我的代碼,命令的輸出:

#!/bin/sh 
MOUNTPOINTS="/ /var /var/moodledata2" #Set the mount points to check for 

while getopts ":dh" opt; do 
     case $opt in 
       d) 
         DEBUG=true 
         ;; 
       h) 
         echo USAGE: diskspace \[-d\] \[\/path1 ...\] 
         exit 0 
         ;; 
       \?) 
         echo Incorrect syntax 
         ;; 
     esac 
     shift $((OPTIND - 1)) 
done 

if [ "$#" -gt 0 ]; then 
     for var in [email protected]; do 
       NEWMOUNTPOINTS .= $var 
       echo "${MOUNTPOINTS} ${var}" 
       echo "${NEWMOUNTPOINTS}" 
     done 
fi 

當運行命令

$ ./dt /home 
./dt: 22: ./dt: NEWMOUNTPOINTS: not found 
//var /var/moodledata2 /home 

我本來試圖與MOUNTPOINTS .= ${var}MOUNTPOINTS .= "${var}",但他們仍然產生相同的錯誤。我想我可以創建一個新的變量,但這也不起作用(如上所示)。腳本的其餘部分仍在繼續,但只有頂部的原始MOUNTPOINTS;它永遠不會改變,即使我使用MOUNTPOINTS .= $var,以上。

我能做些什麼來獲得使用提供的命令行參數創建的動態字符串?

+0

我不確定在** while循環實際上是否按照您期望的方式工作。我認爲你想在循環結束後這樣做。 –

回答

1
NEWMOUNTPOINTS="${NEWMOUNTPOINTS} ${var} " 

這應該連接變量。

1

來連接字符串,這樣做:

  NEWMOUNTPOINTS+=" ${var}" 

它目前執行名爲NEWMOUNTPOINTS命令/函數,並傳遞.= $var參數吧。

+0

./dt:26:./dt:NEWMOUNTPOINTS + =/home:找不到 –

+0

錯誤是否來自您發佈的代碼?在你的代碼中,第26行是'fi',但錯誤表明你正在執行某些操作。 –

+0

對不起,我從腳本中刪除了一些冗餘點 - 它停止的那一行是執行「NEWMOUNTPOINTS」的行。 –