シンプルなことだけど,気になったのでまとめておく.やっぱり sh は苦労するw
単一のファイルもしくはディレクトリの存在確認をする
test コマンドの -e
オプションで,ファイルもしくはディレクトリの存在確認ができる.以下の例では file_a
にしてるけど,ここをディレクトリ名に変えれば良い.
#!/bin/sh if [ -e /hoge/file_a ]; then echo 'FOUND' else echo 'FOUND' fi
複数のファイルもしくはディレクトリの存在確認をする
ここで上と同じような構文でアスタリスク表記を使おうとすると,こんなエラーが出る.
接尾辞をアスタリスク表記にした場合
#!/bin/sh if [ -e /hoge/file_* ]; then echo 'FOUND' else echo 'NOT FOUND' fi
binary operator expected
ディレクトリ配下をアスタリスク表記にした場合
#!/bin/sh if [ -e /hoge/* ]; then echo 'FOUND' else echo 'NOT FOUND' fi
too many arguments
-e
は使わず ls
で代用する.
こうすると期待通りに動作する.まぁ書き方は他にもいろいろあると思うけども.
#!/bin/sh if [ "$(ls /hoge/file_*)" != '' ]; then echo 'FOUND' else echo 'NOT FOUND' fi
#!/bin/sh if [ "$(ls /hoge/*)" != '' ]; then echo 'FOUND' else echo 'NOT FOUND' fi