私の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