シェルスクリプトエラーの処理

シェルスクリプトエラーの処理

私は特定のフォルダ内のファイル(この場合はそのフォルダ内のすべての.csvファイル)を削除する非常に単純なシェルを作成しています。

コードは次のとおりです。

#!/bin/bash
# Used to clean folder

MinVal=0
Files=$(ls -1 *.csv | wc -l)


if [ $Files -gt $MinVal ];then
        rm *.csv
        echo -e "\e[31;43m***** DONE *****\e[0m"    

 else       
        echo -e "\e[31;43mThere is no valid file to delete, please check\e[0m"      


fi

シェルスクリプトは期待どおりに機能しますが、シェルを実行してフォルダに.csvファイルがない場合、端末に次のように表示されます。

ls: cannot access *.csv: No such file or directory

もちろん、次のelseメッセージも表示されます。

There is no valid file to delete, please check

これを回避し、エラー処理をls: cannot access *.csv: No such file or directory直接実行する方法はありますか?else

挨拶。

ベストアンサー1

これは、シェルが*.csvデフォルトのPOSIX動作のままに渡されるために発生します。lsこれを回避するには、nullglob入力の軸文字列を返すのではなく、何も返さないglobを使用する必要があります。しかし、ここには問題があります。lsファイルが提供されない場合は動作が異なるためです。

ファイル名に改行文字が含まれている場合は、エラーを回避する利点がある次の方法を試してください。

shopt -s nullglob
filenames=( *.csv )  # put all files in an array
files="${#filenames[@]}"  # get number of files

おすすめ記事