簡體   English   中英

在數組在 bash 腳本中循環之前從數組中的項設置變量

[英]Set variable from item in array before the array is looped in a bash script

我正在從命令的 output 創建一個數組,然后循環遍歷數組並運行使用數組中每個項目的命令。 在循環遍歷數組之前,我想創建一個使用數組中的值之一的變量。 當數組中的一項包含特定字符串時,我將使用此值。

我不確定如何選擇我需要從數組中設置變量的值,然后再循環遍歷數組。 我目前有這個對我不起作用。 我也嘗試循環獲取我的值,但該值沒有跟隨到下一個循環,我認為它沒有被設置,我無法保持循環打開,因為我在循環中循環。

readarray -t ARRAY < <( command that gets array of 5 hostnames )
if [[ $ARRAY[@]  == *"FT-01"* ]]; then
FTP="$ARRAY"
fi

for server in "${ARRAY[@]}"; do

echo "Server: ${srv}"
echo "-------------------"
if [[ $server == *"ER-01"* ]]; then
echo " FTP server is ${FTP} and this is ${server}"
fi
done

我很確定第一個 if 語句永遠不會起作用,但我不知道如何從數組中挑選出我需要的值。

有時難以表達一個想法表明您正在像 C 程序員而不是 shell 腳本員一樣思考。 Arrays 和 for 循環不是 shell 腳本中最自然的習慣用法。 考慮改為流式傳輸和管道。

假設獲取主機名的命令稱為list-of-hostnames 如果它每行打印一個主機名,您可以使用 grep 過濾結果。

FTP=$(list-of-hostnames | grep FT-01)

如果你真的想使用一個數組,你可以使用printf '%s\n'把它變成一個 grep-able stream。

FTP=$(printf '%s\n' "${ARRAY[@]}" | grep FT-01)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM