ユーザー入力の変数のファイルパス

ユーザー入力の変数のファイルパス

ユーザーが特定のファイルへのパスを提供し、スクリプトがファイルが存在することを確認し、いくつかのタスクを実行するスクリプトを作成しようとします。次のコードを書きました。

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" ]

おすすめ記事