2012-09-19 38 views
0

我有这个脚本转储数据库:传递串入bash脚本

cat /usr/bin/dbbkup 
#!/bin/bash 
mysqldump -uroot -proot db > db_$(date +%d%H%M%S).sql 

其中我执行,像这样:

但我怎么能传递一个参数到这个脚本,将前缀数据库转储?例如。

dbbkup -arg "changed name of field" && ls -atlr 

然后更改脚本是这样的:

#!/bin/bash 
mysqldump -uroot -proot db > db_$(arg)_$(date +%d%H%M%S).sql 

感谢=)

+0

我试过我以上的东西。我不是Bash的专家,因此我为什么要从专业人士那里寻求帮助。 – Nadine

回答

0

Bash脚本,以便参考参数,例如:

dbbkup "changed name of field" 

成为你的脚本变量$1

所以继续你的例子,来创建基于日期,并具有一定的前缀自定义文件名的数据库转储,你的命令是:

./dbbkup.sh prefix 

和脚本的内容将是:

#!/bin/bash 
mysqldump -uroot -proot db > db_$1_$(date +%Y%m%d%H%M%S).sql 

这将产生一个名为db_prefix_20120919104317.sql的文件。我更改了日期格式,因为您有更多信息,并且在目录列表中,您现在可以按名称进行排序,并按时间排序。

另外,我假设你想要这个作为如何使用bash参数的例子,因为你传递的参数对创建的输出没有影响,只是文件名,在这种情况下为什么不硬编码名称的文件?我没有看到具有相同(尽管是更新)数据的具有多个名称的文件的用例。

+0

完美!干杯! :) – Nadine

+0

如果脚本需要能够处理参数中的空格(比如“更改字段名称”),则需要在其所有用途中使用双引号:'mysqldump -uroot -proot db>“db_ $ 1 _ $(日期+%Y%m%d%H%M%S).sql“' –

+0

是的,这是一个公平点。我不喜欢文件名中的空格,因此在实际示例中删除了它们,但我可以看到初始参数如何混淆其他人。感谢您指出。 – Clarkey

0

交给bash脚本为$ 1第一个参数。

#!/bin/bash 
mysqldump -uroot -proot db > $1db_$(date +%d%H%M%S).sql 

调用它像这样:

dbbkup prefix