まず、私はここに初めて来たので、間違いがあった場合は申し訳ありません。これが私の最初の質問です。
Linuxベースの製品のログファイルをコピーするスクリプトを作成しています。コピー部分は完了しましたが、ログをコピーする前にスクリプトで/ varパーティションのサイズを確認するようにしたいと思います。
以下は、エラーを発生させるスクリプトの一部です。
/ varパーティションのサイズが80%未満の場合はログをコピーし、それ以外の場合は終了する必要があります。
size=`df -kh | grep var | awk '{print $5}'` #output is 1%, so it must execute other statements.
echo var partion $size utilized
if (( "$size" <= 79% ))
then
echo "/var partition is less than 80%"
else
exit
echo "/var partition is more than 79%"
fi
スクリプト出力
[root@manage home]# sh logcopy.sh
var partion 1% utilized
logcopy.sh: line 19: ((: 1% <= 79% : syntax error: operand expected (error token is "<= 79% ")
awkコマンドとdf -khの削除
[root@manage home]# df -kh | grep var | awk '{print $5}'
1%
[root@manage home]# df -kh
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 980M 642M 287M 70% /
/dev/sda1 95M 25M 65M 28% /boot
/dev/sda9 6.0G 1004K 5.7G 1% /home
/dev/sda7 4.6G 879M 3.5G 20% /usr/local
/dev/sda8 446G 2.7G 421G 1% /var
答え1
パーセント記号は、2番目のオペランドが必要なモジュロ演算子(例:8 % 5
is)です。以下を3
使用した(( size <= 79% ))
場合、エラーはsize
似ています。
入力からパーセント記号を削除してみましょう。
size=$(df -kh | awk '$6 == "/var" {print $5}')
size=${size%"%"}
if (( size < 80 )); then
echo "/var is less than 80 % full"
fi
ここに${size%"%"}
サフィックス除去拡張があります${var%word}
。最初のものは%
文法の一部であり、2番目のもの(引用されたもの)は%
私たちが取り除くことです。ここにある引用は、${var%%word}
類似性のために最短の代わりに最長の一致するサフィックスを削除します。使用することもできますが、${size%%%}
読書はより混乱しているでしょう。
答え2
df
df /var
すべてのディスクに対して実行するのではなく、ターゲット()を指定できます。
GNU/Linux の場合、出力形式を指定できます。最後に%
、、tr
...sed substitution
を省略できます。
df /var --output=pcent | tail -1 |tr -d '%'
55
awk
ただし、オーバー出力を使用したい場合は、withを使用して移植性を向上させることをお勧めしますdf
。df -P
ディスクパスが長すぎると、出力を1行で取得できないことがあります。たとえば、次のようになります。
df -kh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
3.9G 404M 3.3G 11% /
/dev/mapper/VolGroup00-LogVol05
3.9G 442M 3.3G 12% /home
/dev/mapper/VolGroup00-LogVol04
3.9G 261M 3.5G 7% /var
/dev/mapper/VolGroup00-LogVol03
3.9G 137M 3.6G 4% /tmp
/dev/mapper/VolGroup00-LogVol02
7.8G 3.6G 3.8G 49% /usr