Linux

將命令的輸出分配給數組

  • October 27, 2018

當我執行這個命令時:

cat output | grep -i state | sort | uniq | awk '{print $ 3}')

輸出是:

00x1
00x5
0080

要將它們分配給數組,我這樣做了:

STATUS_ARRAY=($(cat output | grep -i state | sort | uniq | awk '{print $ 3}')) 

但它沒有用。對於每個系統,該命令的輸出都是不同的,我想檢查其中的每一個。

例如——有21種狀態!–這段程式碼:

for STATUS in "${STATUS_ARRAY=[@]}"
do
 if [ "$STATUS" == '00x1' ] && [ "$STATUS" == '00x5' ];
 then
   echo " everything is normal"
 else [ "$STATUS" == '0080' ];
   echo " check your system "
 fi 
done  

但是當數組不起作用時,它不會返回任何東西。這有什麼問題?

的內容output是:

State                                = 00x1
State                                = 00x5
State                                = 0080

這是解決此問題的一種方法:

創建數組

mapfile -t array < <(awk '{printf("%s\n", $NF)}' output)

然後,遍歷索引並根據索引做任何你想做的事情。例如:

for status in "${array[@]}"
do 
 if [[ $status == @(00x1|00x5) ]]
  then echo "All ok"
 else echo "All NOT ok"
 fi 
done

使用“這裡的字元串”、“參數擴展”和caseesac構造怎麼樣?

readarray -t TMP <<< $(grep -i "state" output | sort -u)
for STATUS in "${TMP[@]##* }"
 do    case $STATUS in
               00x[15]) echo "everything normal";;
               0080)    echo "check system";;
               *)       echo "error: status unknown";;
       esac
 done
check system
everything normal
everything normal

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