※ ChatGPTを利用し、要約された質問です(原文:ある特定のフォルダの中に、2つの圧縮ファイルが存在すれば、bbb.lo)
シェルスクリプトのエラーに対する解決方法
このQ&Aのポイント
質問者は特定のフォルダ内に2つの圧縮ファイルが存在する場合、bbb.log.1を削除し、存在しない場合はメッセージを表示するシェルスクリプトを作成しました。
しかし、実行すると「./test.sh: line 15: [: -e: binary operator expected」というエラーが表示されます。
正しく動作させるためには、if文の条件式を正しく記述する必要があります。
ある特定のフォルダの中に、2つの圧縮ファイルが存在すれば、bbb.lo
ある特定のフォルダの中に、2つの圧縮ファイルが存在すれば、bbb.log.1を削除し、存在しなければその旨をmessagesに記述するというシェルスクリプトを作成しました。
(OSはCentOS5.4で、cronで作成したシェルスクリプトを動作させております)
<シェルスクリプトの内容>
#!/bin/sh
DATE=`date +%Y%m%d --date '1 day ago'`
i=/var/log/aaa/bbb.log
j=/var/log/aaa/ccc.log
cat $i.1 | grep type=ccc > $j.$DATE
sed '/type=ccc/d' $i.1 > $i.100
/bin/mv $i.100 $i.$DATE
/bin/gzip $i.$DATE
/bin/gzip $j.$DATE
if [ test -e $i.$DATE.gz ]; then
if [ test -e $j.$DATE.gz ]; then
rm -f $i.1
else
logger -p user.info "not find ccc.log"
fi
else
logger -p user.info "not find bbb.log"
fi
これを実際に動作させますと、以下のエラーが表示されます。
./test.sh: line 15: [: -e: binary operator expected
どのように記述すれば正しく動作するのでしょうか。
お手数をおかけしますが、よろしくお願い致します。
お礼
とても分かりやすい回答、ありがとうございました。 tux_the_penguinさんからもご指摘を受けましたとおり、自分はこれを→[] testというコマンドの記述方法の一部だと勝手に解釈しておりました。 ありがとうございました。m(__)m