我有一个转储 MySQL 数据库并压缩文件的脚本。我想要做的是有另一个(编辑)文件可以更改用户名、密码和数据库名称。然后以某种方式将该文件连接到该脚本。
在另一个文件中,我想要一些内容,例如。
username = "username"
password = "password"
database = c2duo_db
然后在脚本名称中mysql备份.sh有些从文件导入用户名密码和数据库。
#!/bin/sh
mysqldump -u"username" -p"password" --opt c2duo_db > /home/sh/c2duo_db-`date +%d%m%Y`.sql
cd /home/sh
tar -zcvf c2duo_db-`date +%d%m%Y`.tar.gz *.sql
答案1
您可以使用以下source
命令轻松完成此操作,将另一个文件的内容导入到当前 shell 环境(在您的情况下是您的脚本)并在那里运行它。
在db.conf
:
username="username"
password="password"
database="database"
在你的脚本中:
#!/bin/sh
source /path/to/db.conf
cd /home/sh
dumpfile_name=$database-$(date +%d%m%Y).sql
mysqldump -u"$username" -p"$password" --opt "$database" > $dumpfile_name
gzip $dumpfile_name
笔记:
=
分配 shell 变量时,切勿在赋值运算符后面添加空格!- 我做了一些事情来清理你的代码。我没有像您那样将新转储添加到单个 tar 文件中。我确实展示了如何压缩单个文件。如果您想将其打包,以便将它们全部放在一个存档中,您也可以这样做,但我发现单独的压缩转储文件非常有用。
- 我将
cd
操作移到命令之前,mysqldump
这样您就不必指定输出文件的路径,因为那是当前目录。只是保存重复的代码。
编辑:即使完成了这一步,对我来说这似乎也是一个不成熟的解决方案。您可能对如何使用参数传递值感兴趣。例如,您可以从上面的脚本中取出配置文件的硬编码路径,并将其替换为:
#!/bin/sh
source "$1"
cd /home/sh
[...] # rest of script as above
然后你可以像这样执行它./mysqlbackup.sh /path/to/db.conf
。您甚至可以更进一步,将其全部编写在一个脚本中,并提供所有三个值作为参数:
#!/bin/sh
username="$1"
password="$2"
database="$3"
cd /home/sh
[...] # rest of script as above
...并称其为./mysqlbackup.sh username password database
.
答案2
您可以将第一个文件更改为:
s/username/joe/
s/password/secret/
s/database/c2duo_db/g
将其存储为 db.sed,并使用
sed -f db.sed mysqlbackup.sh > joeSqlbackup.sh
对于不同的用户/密码和数据库,您将生成不同的 sed 脚本。