ルートファイルシステムでLinuxファイルシステムのディスク使用量を確認し、システムが6%を超えると警告メッセージを表示する単純なスクリプトをBashに書きました。
コマンドが端末で実行されていますが、ステートメントを試行すると、if
16行目でこのエラーが発生します。
[: missing
] ''
1 #!/bin/bash
2
3
4
5 clear
6 #checking for usage on the system and saving in a file usage1
7 df -h / >usage1
8
9 #display current use to the screen
10 clear
11 echo
12 awk '$5>6' usage1
13
14 #Creating variable to use in the awk if statemant
15 usage2= "awk '{print $5}'/home/peters/usage1 | tail -n1 |cut -c1"
16 #Building statemant
17 if ($usage2>6)
18 print "Warning file system greater than 6% !!"
19
20 exit 0
答え1
17行目は次のようになります。
if [ $usage2 -gt 6 ]
[
前後にスペースを追加する必要があります]
。また、数値を比較するときは、おなじみの記号の代わりに、、、、、およびを使用する-eq
必要があります。-ne
-gt
-lt
-ge
-le
答え2
あなたが望む(周りにスペースなし=
)
usage2=$(awk '{print $5}' /home/peters/usage1 | tail -n1 |cut -c1)
...コマンドの出力をusage2
変数に入れます。中括弧コマンドと入力ファイル名の間にはスペースが必要です(ただし、周囲にスペースは含まれてはいけません)。ところで、あなたは単に使用することができますawk
|cut -c1
awk
=
切断(1)cut -f5
(...代わりにawk '{print $5}'
)として5番目のフィールドを取得します。
しかし、あなたは何も必要ありませんusage1
。おそらくエンコードするだけです。
usage2=$(df | cut -f5| tail -n1 | cut -c2)
しかし、私はこれをテストしませんでした。
それからあなたは使うべきです
if [ "$usage2" -gt 6 ] ; then
echo "Warning file system greater than 6% !!" > /dev/stderr
fi
到着テスト(1)- 通常はシェル組み込みで、空の変数値を処理します。これはエラーメッセージなので、次に進む必要があります。標準エラー、いいえ標準出力。そしてあなたは使いたくないがprintf
(echo
なぜなら印刷(1)特別扱い%
)。おそらくあなたは欲しいでしょうロガー(1)...
しかし、あなたの方法は(ここで尋ねてください、たぶん二重)脆弱です(2回尋ねることは失礼です!)。シェルについてもっと知る必要があります。読む高度なbashスクリプトガイド、時間を無駄にしません。また、シェルスクリプトを作成するには、良いエディタを使用してください。一部のエディタ(emacs
)にはかなり良いシェルモードがあります。構文カラー表示が役立ちます! ...
#!/bin/bash -vx
ちなみに、デバッグフェーズ中にスクリプトを一時的に起動すると便利です。コマンドを削除するclear
必要はありません...
最後に、使用を検討してみましたか?ディスククォータ?
答え3
次のようなifステートメントを作成してみてください。
if [ condition ]; then
Stuff here
fi
答え4
[[ -n $(df -h / | awk 'int($5)>6{print $5}') ]] && echo "Warning file system greater than 6%"