![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ある特定のフォルダの中に、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
どのように記述すれば正しく動作するのでしょうか。
お手数をおかけしますが、よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
if 文(やwhile文等)では、その後にくる「コマンド」の実行後のステータスで分岐します。
if grep 'a' foo.txt ; # foo.txtのaという文字が含まれているならば
この使い方で、便利なコマンドとしてtestがあります。testは数値比較や文字列の比較、and/or等の論理演算を行って、その真偽をステータスとして返します。
このtestコマンドの「別名」が [ です。 [と]でくくることで、多言語のif文で条件を () でくくったような見た目になります。
そこで、エラー箇所を見ると
> if [ test -e $i.$DATE.gz ]; then
と、 [ と testの両方が指定されています。これでは、 [ コマンドの引数として test が指定してあることになります。
-e は単項演算子なので、 'test' -e ~ という式がおかしい( 「値」のあとには二項演算子が必要なのに単項演算子がきている )というエラーになっているのです。
if [ -e $i.$DATE.gz ]; then # [ を使う
か
if test -e $i.$DATE.gz ; then #testを使う
としましょう。
あと、これをcronで実行させる、とのことですが、cronは環境変数の設定を行いません。
よって、PATHは設定されません。
そのため、 grep,sed,date等のコマンドは見付けることができず実行できません。
スクリプト中でPATHを指定するか、コマンドをフルパスで書くか、してください。
とても分かりやすい回答、ありがとうございました。
tux_the_penguinさんからもご指摘を受けましたとおり、自分はこれを→[] testというコマンドの記述方法の一部だと勝手に解釈しておりました。
ありがとうございました。m(__)m
No.2
- 回答日時:
#1の方もおっしゃっていますが
[ ← この文字は見やすくするための記号ではなく
test と言うコマンドの別表記なんですよ
ご回答ありがとうございます。
ご指摘のとおりで、自分は[]はtestコマンドの一部と勝手に解釈しておりました。
とても勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- UNIX・Linux Linuxのシェル関数を作成して要件を満たす方法 1 2022/11/19 20:33
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- Access(アクセス) ExcelのVBAコードについて教えてください。 4 2023/01/20 09:44
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OpenLDAPでのユーザ一覧表示
-
mac ターミナル
-
Linux●前の行に戻れません...
-
誰かにサーバにあるデータを消...
-
エクセルVBA 実行時エラー 5029...
-
CSHが使えない REDHAT
-
バッチスクリプト処理でエラー...
-
バッチファイル内置換
-
大塚商会で新しくシステム、ス...
-
illustratorを日本語仕様にする...
-
Rのパッケージインストールにつ...
-
バッチファイルで多重起動を防ぐ
-
CPUとOS の違いは?
-
batファイル 行った履歴をテキ...
-
Macの手書き漢字入力ツールにつ...
-
aptでインストールしたプログラ...
-
OS インストール場所確認
-
お勧めのLinuxが使えるノートパ...
-
VBでExcelが起動されているか知...
-
gitのクローンができない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
誰かにサーバにあるデータを消...
-
OpenLDAPでのユーザ一覧表示
-
バッチで削除したフォルダをイ...
-
scriptコマンドで出力したログ...
-
シャットダウンしたユーザを知...
-
expectの使い方について
-
Linux●前の行に戻れません...
-
ある特定のフォルダの中に、2つ...
-
出力のリダイレクトコマンド「>...
-
centOS7サーバーに配置したHTML...
-
lprコマンド(印刷)を実行する...
-
telnet後のログのとり方
-
patchコマンドってどのrpmに入...
-
tcsh(v6-11)で文字化けする問題
-
/home 以下へのuseradd
-
リモートでバッチを実行(Windo...
-
ログに特定の文字が含まれてい...
-
ユーザ版のsudoってありますか
-
Windows フォトビューアが重い
-
ubuntuについて質問です。ター...
おすすめ情報