ディスク使用量を確認するための次のスクリプトがあります
#!/bin/bash
# set alert level 90% is default
ALERT=10
OIFS=$IFS
IFS=','
storage=$(df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }')
for output in $storage ;
do
echo "---------------@@@@@@@@@ output started @@@@@@@@@@@@@@@@-----------"
echo $output
echo "---------------@@@@@@@@@ output end @@@@@@@@@@@@@@@@-----------"
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
echo "---------------###### useo started ######-----------"
echo $usep
echo "---------------###### usep end ######-----------"
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)"
fi
done
しかし、このコードを実行すると、if条件文で整数式の予測エラーが発生し、これがこのスクリプトの出力です。
97% /dev/sda1
1% udev
0% none
2% none
---------------@@@@@@@@@ output end @@@@@@@@@@@@@@@@-----------
---------------###### useo started ######-----------
97
1
0
2
---------------###### usep end ######-----------
./fordiskfor.sh: line 24: [: 97
1
0
2: integer expression expected
答え1
問題はそこにあります:
if [ $usep -ge $ALERT ]; then
...
fi
$usep
複数行の数字が含まれています。すべての項目を繰り返すには、その部分の代わりに次のものを使用します。
for $space in $usep;
do
if [ $space -ge $ALERT ]; then
echo "Running out of space..."
fi
done
答え2
変数に格納された値は$storage
複数行で構成されます。だから$output
行も複数あるでしょう$usep
。
$usep
for
で説明されているように、異なるループを使用して、保存されているすべての値を1つずつ抽出して比較できます。これ答え。または、while
次の文を使用できます。
echo $storage | while read output
do
...
...
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)"
fi
done