She*_*009 2 shell scripting parameter
我有一个转储 MySQL 数据库并压缩文件的脚本。我想要做的是有另一个(编辑)文件,它可以更改用户名、密码和数据库名称。然后以某种方式将该文件连接到该脚本。
在另一个文件中,我想要一些内容,例如。
username = "username"
password = "password"
database = c2duo_db
Run Code Online (Sandbox Code Playgroud)
然后在脚本名称mysqlbackup.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
Run Code Online (Sandbox Code Playgroud)
您可以使用该source
命令轻松地将另一个文件的内容导入当前的 shell 环境(在您的情况下是您的脚本)并在那里运行它。
在db.conf
:
username="username"
password="password"
database="database"
Run Code Online (Sandbox Code Playgroud)
在你的脚本中:
#!/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
Run Code Online (Sandbox Code Playgroud)
笔记:
=
分配 shell 变量时,永远不要在赋值运算符后放置空格!cd
操作移到mysqldump
命令之前,这样您就不必指定输出文件的路径,因为这是当前目录。只是保存重复的代码。编辑:即使完成了这一步,对我来说这似乎也是一个半生不熟的解决方案。您可能对如何使用参数传递值感兴趣。例如,您可以从上面的脚本中取出配置文件的硬编码路径并将其替换为:
#!/bin/sh
source "$1"
cd /home/sh
[...] # rest of script as above
Run Code Online (Sandbox Code Playgroud)
然后你可以像./mysqlbackup.sh /path/to/db.conf
. 您甚至可以更进一步,将其全部编写在一个脚本中,并提供所有三个值作为参数:
#!/bin/sh
username="$1"
password="$2"
database="$3"
cd /home/sh
[...] # rest of script as above
Run Code Online (Sandbox Code Playgroud)
...并称之为./mysqlbackup.sh username password database
.