[![ここに画像説明を入力][1]][1]
このスクリプトでは、grepコマンドはどのように機能しますか?ファイルシステムが多すぎて(図を参照)、ファイルシステムベースの警告条件に従って動作するようにスクリプトを実行したいです。] [1]] [1]
これは私のスクリプトです。
ALERT=5
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 , $1 }' > sample.txt
while read line; do
var1=$(echo $line | awk '{ print $1}' | cut -d '%' -f1 )
echo $var1
var2=$(echo $line | awk '{ print $2 }' )
echo $var2
if [ "$var1" > $ALERT ]; then
echo "Alert: Almost out of disk space"
fi
done < sample.txt
ディスク使用量が5%以上のファイルシステムを表示したいのですが、スクリプトを実行すると、ファイルシステムディスク使用量は4%で表示されます。
Filesystem Size Used Avail Use% Mounted
on overlay 880G 28G 808G 4% /
tmpfs 126G 0 126G 0% /dev
tmpfs 126G 0 126G 0% /sys/fs/cgroup
/dev/sdb1 880G 28G 808G 4% /etc/hosts
shm 64M 996K 64M 2% /dev/shm
/dev/sda3 215G 21G 183G 10% /home/cg/root
tmpfs 126G 0 126G 0% /proc/scsi
tmpfs 126G 0 126G 0% /sys/firmware
4 overlay
Alert: Almost out of disk space 4 /dev/sdb1 Alert: Almost out of disk space 2 shm
Alert: Almost out of disk space 10 /dev/sda3 Alert: Almost out of disk space
答え1
- ローカルファイルシステムのみを測定したいようです。この場合は、以下を
-l
使用してください。df
- dfヘッダーをスキップするには、単純なヘッダーで
sed 1d
十分です。 - 出力形式化にawkでprintfを使用する
- awkは文字列から数値への変換自体を処理できます。 5番目の列がパーセント記号付きの数字であるとし、
$5+0
それを数字に変換します。
これにより、きれいなスクリプトは次のようになります。
df -lh | sed 1d | awk '{ if( $5+0 >5) printf "ALERT FOR %s at %d%%\n",$1, $5}'