Shell-Script
字元串操作 Shell 腳本
我正在使用 NUT 伺服器進行 UPS 監控項目。我的目標是製作一個發送一個命令並作為響應從 UPS 接收狀態和其他參數的 shell 腳本。
例如
#!/bin/bash status='upsc myups' # command to get the status of UPS sleep 1 exit 0
這對我來說很好,但是如果我將“狀態”聲明為數組,則來自 ups 的響應將儲存為單個元素
IE
#!/bin/bash declare -a status #declare status as array # command status=$(upsc myups) or status=`upsc myups` #number of array elements echo ${status[@]} exit 0
狀態數組中的元素數:
1
終端輸出/陣列輸出
echo ${#status[1]}
如果我回顯數組,輸出如下所示:
Init SSL without certificate database battery.capacity: 9.00 battery.charge: 90 battery.charge.low: 20 battery.charge.restart: 0 battery.energysave: no battery.protection: yes ups.shutdown: enabled ups.start.auto: yes ups.start.battery: yes ups.start.reboot: yes ups.status: OL CHRG ups.test.interval: 604800 ups.test.result: Done and passed ups.timer.shutdown: -1 ups.timer.start: -1 ups.type: offline / line interactive ups.vendorid: 0463
因為這整個輸出保存在“狀態”數組的單個元素中。我在為日誌目的單獨使用所有參數時遇到了麻煩。
期望的輸出:
battery.capacity: 9.00 battery.charge: 90 battery.charge.low: 20 battery.charge.restart: 0 battery.energysave: no battery.protection: yes
如何將每個參數分成數組或變數的單個元素?
請幫忙
謝謝
您從中獲取的數據
upsc
的格式為keyword: value
,每行一個。您可以通過它sed
來獲取表單[keyword]="value"
,然後使用它來初始化關聯數組:declare -A status="($(upsc myups | sed 's/\(.*\): \(.*\)/ [\1]="\2"/'))"
現在您可以獲得任何關鍵字的值,例如
echo "${status[device.model]}"
. 您可以遍歷所有鍵和值並執行您想要的操作:for key in "${!status[@]}" do echo "$key: ${status[$key]}" done
請注意,如果您引用您的價值觀,
status="$(upsc myups)" echo "${status[@]}"
你仍然會得到一個值,但每個值都將在一個新行上,就像你想要的輸出一樣。