Linux
將命令的輸出分配給數組
當我執行這個命令時:
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
使用“這裡的字元串”、“參數擴展”和
case
…esac
構造怎麼樣?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