Linux
如何根據需要從 shell 腳本(bash)創建盡可能多的變數?
我正在使用 Upstart 製作一個用於監視某些使用者程序的腳本,但是,由於它是針對我工作的公司的,所以他們要求我做通用的……怎麼樣?好吧,被監控的程序數量可能會有所不同,就像名稱一樣,所以我需要創建它,以便使用者可以輸入“n”個程序並為 shell 提供其路徑名,這樣我就可以將它們儲存在變數中並傳遞 Upstart一個帶有它們的腳本,所以我的問題是:如何根據需要創建盡可能多的變數?
到目前為止,這是我的腳本……
./script input
#!/bin/bash FILENAME=$1 i=1 while read LINE do [rutaServ$i]=$LINE echo "ruta -> [rutaServ$i]" i=`expr $i + 1` done < $FILENAME
如您所見,我暫時從純文字文件中獲取路徑名,其中僅包含
/home/user
行但是,當我執行此腳本時,出現以下錯誤[rutaServ1]=/home/user: The file or directory doesn't exists
這樣做的正確方法是什麼?
看起來你的數組語法有點不對勁。此外,不需要索引變數;您可以使用
+=
運算符附加到數組。#!/bin/bash FILENAME=$1 rutaServ=() while read LINE do rutaserv+=($LINE) echo "ruta -> $LINE" done < "$FILENAME"
bash
v4 有一個新命令,mapfile
(或readarray
)一次將文件的內容讀入數組:mapfile rutaServ < "$FILENAME"
要訪問數組中的值:
for x in "${rutaserv[@]}"; do echo "$x" done
可以像這樣呼叫腳本
script.sh process1 process2
嗎?然後你可以參考參數$@
:# set process1 process2 # set arguments for testing for x in "$@"; do echo "ruta -> $x" done
[rutaServ$i]=$LINE
應該是rutaServ[$i]=$LINE
或rutaServ+=("$LINE")
。