コマンドに変数名を入力すると、wgetは失敗します。

コマンドに変数名を入力すると、wgetは失敗します。

私のWebサーバーからファイルをダウンロードするための小さなbashスクリプトがあります。コマンドラインを介して$ File変数を渡し、次のようにwgetコマンドに挿入しました。

File=${1}

wget -a /home/wgetlog.txt -nH -nd --accept=txt "http://192.168.1.21/files/$File/$File.txt"

./download.sh media コマンドを実行すると、ログファイルに以下が表示されます。

--2014-04-07 17:44:36--  http://192.168.1.21/files//.txt
HTTP request sent, awaiting response... 404 Not Found

変数を並べて渡すからですか?構文は正しいですか?それとももっと良い方法がありますか:)

答え1

コマンドライン引数を使用するスクリプトを作成するときは、指定された引数を実際に確認する必要があります。

たとえば、

File=${1}
if [[ -z $File ]]
then
  echo "ERROR: file name required"
  exit
fi

echo wget -a /home/wgetlog.txt -nH -nd --accept=txt "http://192.168.1.21/files/$File/$File.txt"

推測するために、スクリプト名が "doit.sh"であり、それを呼び出す場合:

doit.sh $File

$ Fileがコマンドラインシェルで定義されていないと、スクリプトに引数を渡さないため、説明した方法でスクリプトが失敗します。

実際のファイル名で呼び出す必要があります。例えば

doit.sh fred

関連情報