Bashエラー:欠落[:`]'がありません

Bashエラー:欠落[:`]'がありません

ルートファイルシステムでLinuxファイルシステムのディスク使用量を確認し、システムが6%を超えると警告メッセージを表示する単純なスクリプトをBashに書きました。

コマンドが端末で実行されていますが、ステートメントを試行すると、if16行目でこのエラーが発生します。 [: 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 -c1awk=切断(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)- 通常はシェル組み込みで、空の変数値を処理します。これはエラーメッセージなので、次に進む必要があります。標準エラー、いいえ標準出力。そしてあなたは使いたくないがprintfechoなぜなら印刷(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%"

関連情報