web-dev-qa-db-ja.com

bash出力を動的ファイル名にリダイレクトします

スクリプトに与えられた最初の引数に基づいて、名前が動的に生成され、文字列の前に付けられたファイルに(うまくいけば)リダイレクトするbashスクリプトを書いています。スクリプトの名前は./buildcsvsです。

動的ファイル名を使用しない場合のコードは次のようになります。

#!/bin/bash
mdb-export 2011ROXBURY.mdb TEAM > team.csv

これが私がそれを出したい方法です

./buildcsvs roxbury

出力する必要があります

roxburyteam.csv

スクリプトの最初の引数として「$ 1」を使用します。ファイル名は次のようなもので定義されます。

"%Steam" % $1

あなたはなにか考えはありますか?ありがとうございました

11
mythander889

$ 1を「team.csv」と連結するだけです。

#!/bin/bash
mdb-export 2011ROXBURY.mdb TEAM > "${1}team.csv"

スクリプトに引数を渡さない場合は、「team.csv」に書き込みます。

18
jordanm

$1または同様のものを介して、シェルスクリプトの位置引数を参照できます。それがどのように行われるかを示すために、次の小さなテストスクリプトを作成しました。

$ cat buildcsv 
#!/bin/bash
echo foo > $1.csv
$ ./buildcsv roxbury
$ ./buildcsv sarnold
$ ls -l roxbury.csv sarnold.csv 
-rw-rw-r-- 1 sarnold sarnold 4 May 12 17:32 roxbury.csv
-rw-rw-r-- 1 sarnold sarnold 4 May 12 17:32 sarnold.csv

team.csv$1.csvに置き換えてみてください。

引数なしでスクリプトを実行すると、.csvという名前のファイルが作成されることに注意してください。それを処理したい場合は、$#を使用して引数の数を数える必要があります。私も一緒にハッキングしました:

$ cat buildcsv 
#!/bin/bash
(( $# != 1 )) && echo Need an argument && exit 1
echo foo > $1.csv
2
sarnold