将bash输出重定向到动态文件名

时间:2012-05-13 00:29:22

标签: bash dynamic filenames

我正在编写一个bash脚本,它将(希望)重定向到一个文件,该文件的名称是动态生成的,基于给脚本的第一个参数,前面加上一些字符串。脚本的名称是./buildcsvs。

以下是代码现在的样子,没有动态文件名

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

以下是我希望它出来的方式

./buildcsvs roxbury

应输出

roxburyteam.csv

以“$ 1”作为脚本的第一个arg,其中文件名由类似

之类的东西定义
"%steam" % $1

你有什么想法吗?谢谢

2 个答案:

答案 0 :(得分:17)

只需将$ 1与“team.csv”连接即可。

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

如果他们没有将参数传递给脚本,它将写入“team.csv”

答案 1 :(得分:2)

您可以通过$1或类似的东西来引用shell脚本的位置参数。我写了下面的小测试脚本来演示它是如何完成的:

$ 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