
ユーザーが特定のファイルへのパスを提供し、スクリプトがファイルが存在することを確認し、いくつかのタスクを実行するスクリプトを作成しようとします。次のコードを書きました。
read -p "Enter path: " $path
#check if path is not empty string
if [ -z $path ]
then
echo "path is empty string"
exit
fi
#check if file exist
if [ ! -f $path ]
then
echo "file doesnt exists"
fi
私の問題は2番目の条件です。一部の文字列を変更すると、すべてがうまく$path
機能しますが、変数を介してパスを入力すると、常に「ファイルが存在しません」というメッセージが表示されます。
if [ ! -f `$path` ]
ただし、ファイルに実行権限がない場合、結果も失敗します。誰かが上記のコードを修正するのに役立ちますか? :)
編集する申し訳ありません。二重条件付きという意味ではありません-z
でした。-f
-z
答え1
ここで問題はバックティックです。
`command`
コマンドを実行し、対応する出力ストリーム(標準とエラー)を結果に置き換えるために使用されます。したがって、実行権限なしでファイルを提供すると、テストは失敗します。
この問題を解決する方法
使用
if [ -f "$path" ]
二重引用符は、単語の区切り(スペースが含まれている場合)とワイルドカード(パスにまたは*
他のワイルドカードが含まれている場合?
)を防ぐためのものです。
より良いことは、パスがディレクトリである可能性があるため、次のようにパスが存在することを確認するのに役立ちます-e
。
if [ -e "$path" ]