Linux

如何根據需要從 shell 腳本(bash)創建盡可能多的變數?

  • May 23, 2013

我正在使用 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"

bashv4 有一個新命令,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]=$LINErutaServ+=("$LINE")

引用自:https://unix.stackexchange.com/questions/75612