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

14

我正在编写一个bash脚本,希望将输出重定向到一个生成动态名称的文件中,该名称基于脚本给定的第一个参数,并在前面添加某个字符串。脚本的名称为./buildcsvs。

以下是当前代码的样子,没有动态文件名。

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

这是我希望它呈现的方式

./buildcsvs roxbury
应输出:
roxburyteam.csv

脚本的第一个参数是"$1",其中文件名由类似"something like"的东西定义。

"%steam" % $1

你有什么想法吗?谢谢

2个回答

22

只需将$1与 "team.csv" 进行连接即可。

#!/bin/bash
mdb-export 2011ROXBURY.mdb TEAM > "${1}team.csv"
如果他们没有向脚本传递参数,它将写入 "team.csv"。

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

在bash中,使用(( ))进行数字比较通常更好。(( $# < 1 || $# > 1 )) && ... - jordanm
1
(( $# != 1 )) && ... 更简单。 - Dennis Williamson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接