質問: シェルスクリプト bashのtestコマンドが動きません こんにちは、ど素人なのにシェルスクリプト仕事で書かされ苦しんでます。 sun-solaris8で動作したシェルをlinuxe3.0へ移動させたら testコマンドでエラーになりました。 sun-solaris8ではbsh linuxe3.0ではbashです。 test -s file名は両方で認識するようですが、 test -s ../directory名/file名で指定して 実行するとsunでは動作したのですが linuxではわけの分からないメッセージが出て終了。 linuxで % sh と打つと/bin/bash % test と打つと /xxx/usr/binだったかな?パス忘れました。 % man bashでマニュアル見るとtestは[]で囲め? 英語だから良く分からなかった。 疲れたので今日は諦めました。 testコマンドで良い解決法ご教示願います。 情報が不足なら指摘いただいた物を追加いたします。
回答: sunであろうがlinuxであろうが、test -s の後に書けるファイル名は1つだけです。sunで、test -s *.log が動いていたのはたまたまマッチするファイルが0または1つだけだったのでしょう。 >if test -s xxxx.log || yyyy.log これは、間違いです。これは、 xxxx.logが存在してファイルサイズが0でなければ、この後のthen部分を実行する。xxxが存在しないか、ファイルサイズが0なら、「 yyyy.log というコマンド」を実行するその結果が真ならその後のthen部分を実行する。 という意味不明の記述です。 何をしたいのか説明文(?)から読み取れないのですが、*.log というファイルが1つ以上あり、それらすべてサイズが0でないということを調べたいのでしょうか? flag=true for i in *.log do if test -s $i; then :; else flag=false; fi done if $flag then echo "すべての *.log ファイルのサイズが非ゼロ" else echo "*.logが存在しないか、少なくとも一つの *.log ファイルのサイズがゼロ" fi