我需要制作一個 bash 腳本來比較 redhat 服務器上 vg 的空間。到目前為止我所擁有的是:
#!/bin/bash
##VARS
CMD=$(vgs | grep vgSoft | awk -F" " '{print $7}' | awk -F"<" '{print $2}'| awk -F"g" '{print $1}')
SPACE="10.00"
if [[ "$CMD" < "$SPACE" ]]; then
echo "It's not enough space, you must extend the VG"
echo "Space is equal to: $CMD GB"
elif [[ "$CMD" == "$SPACE" ]]; then
echo "It's enough space but consider extend the VG"
elif [[ "$CMD" > "$SPACE" ]]; then
echo "It's enough space"
echo "Space is equal to: $CMD GB"
fi
我用這個命令做的是獲取卷組的輸出并決議資料以獲得所需的值vgs | grep vgSoft | awk -F" " '{print $7}' | awk -F"<" '{print $2}'| awk -F"g" '{print $1}'并將其保存到 CMD 變數中。vgs命令的輸出是:
[root@server~]# vgs
VG #PV #LV #SN Attr VSize VFree
vgSoft 2 13 0 wz--n- 71.99g <26.14g
vgSys 1 12 0 wz--n- <63.51g <36.52g
所以在這種情況下,我的 CMD 變數的結果是26.14 而我正在與值 10.00(分配給 SPACE 變數)進行比較。
但是我在比較字串時遇到了問題,因為vgs命令的輸出是例如 9.46 腳本告訴我“空間足夠”,而輸出應該是“空間不夠,你必須擴展 VG”。據我所知,我無法使用運算子“eq”“gt”“ne”,因為我比較的是字串而不是整數值。
uj5u.com熱心網友回復:
使用您顯示的示例,請嘗試以下awk代碼。我們可以在 single 中完成所有這些awk。
我們有一個awk名為的變數space,我10根據 OP 所示的嘗試定義了值,可以根據需要更改它。
vgs | awk -v space="10" '
FNR==1 || !/vgSoft/{ next }
{
value=substr($7,2,length($7)-1) 0
}
value<space {
print "It\047s not enough space, you must extend the VG"
next
}
value==space{
print "It\047s enough space but consider extend the VG"
next
}
value>space {
print "It\047s enough space"
}
'
或者,如果您在行中的第 7 個欄位可能或不能<以其值開始,因此要處理此類情況,請嘗試以下awk代碼。
vgs | awk -v space="10" '
FNR==1 || !/vgSoft/{ next }
{
sub(/^</,"",$7)
value=$7 0
}
value<space {
print "It\047s not enough space, you must extend the VG"
next
}
value==space{
print "It\047s enough space but consider extend the VG"
next
}
value>space {
print "It\047s enough space"
}
'
說明:vgs首先運行命令并將其標準輸出作為標準輸入發送給awk程式。在awk程式space中,按照顯示的嘗試創建值為 10 的變數。然后在主程式中,如果第一行或行不包含vgSoft字串,則檢查條件,然后簡單地跳到下一行。如果一行包含vgSoft字串,則創建一個名為的變數value,該變數將具有來自當前行的第 7 個欄位的值(沒有<和g來自第 7 個欄位),然后使用 3 個條件來檢查(值是??否等于 OR 小于 OR 大于空格)然后相應地列印報表。
公平警告我沒有 vgs 命令,所以我測驗了這段代碼,將你的vgs命令示例輸出放入 Input_file 并針對awk程式運行它,它對我來說很好。
uj5u.com熱心網友回復:
您可以將 echo 命令與 bc 結合使用進行比較,如下所示
$ SPACE=10.00
$ CMD=9.46
$ echo "${CMD}>${SPACE}" | bc
0
$ CMD=10.46
$ echo "${CMD}>${SPACE}" | bc
1
uj5u.com熱心網友回復:
只需這樣做awk:
vgs | awk -v space=10.00 '/vgSoft/ {
free = substr($7, 2, length($7) - 2) 0 # Assumes the < and g will always be there
if (free < space) {
print "It'"'"'s not enough space, you must extend the VG"
print "Space is equal to: " space " GB"
} else if (free == space) {
print "It'"'"'s enough space but consider extend the VG"
} else {
print "It'"'"'s enough space"
print "Space is equal to: " space " GB"
}
exit
}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395573.html
