我将创建一个 KS 文件(用于自动化操作系统安装的 Kickstart)。我使用 ks 文件安装 mariadb。但执行mysql_secure脚本似乎有问题。
我的想法是在 ks 文件中生成一个脚本,该脚本将执行与 mysql_secure 脚本相同的步骤,然后创建一个 systemd.service 来启动该脚本。
但现在如果我像这样回显我的脚本,我会遇到很多单引号和双引号问题:
echo '#!/bin/bash
FILE=/root/mysqlsecure
if [ -f $FILE ];
then
echo "File $FILE exists, mysql is safe!"
else
echo "File $FILE does not exists, secure mysql"'> /root/mysqlsec_skript.sh
echo mysqladmin -u root password '"'secret'"' >> /root/mysqlsec_skript.sh
echo mysql -u root -p'"'secret'"' -e '"'UPDATE mysql.user SET Password=PASSWORD(\'secret\') WHERE User=\'root\''"' >> /root/mysqlsec_skript.sh
echo mysql -u root -p'"'secret'"' -e '"'DELETE FROM mysql.user WHERE User=\'root\' AND Host NOT IN (\'localhost\', \'127.0.0.1\', \'::1\')'"' >> /root/mysqlsec_skript.sh
echo mysql -u root -p'"'secret'"' -e '"'DELETE FROM mysql.user WHERE User=\'\''"' >> /root/mysqlsec_skript.sh
echo mysql -u root -p'"'secret'"' -e '"'DELETE FROM mysql.db WHERE Db=\'test\' OR Db=\'test\_%\''"' >> /root/mysqlsec_skript.sh
echo mysql -u root -p'"'secret'"' -e '"'FLUSH PRIVILEGES'"'>> /root/mysqlsec_skript.sh
echo touch /root/mysqlsecure >> /root/mysqlsec_skript.sh
echo fi >> /root/mysqlsec_skript.sh
chmod +x /root/mysqlsec_skript.sh
它只会回显第一行" echo mysqladmin -u root password '"'secret'"' >> /root/mysqlsec_skript.sh" 其他行不会附加到 mysqlsec_skript.sh
有人可以帮助我纠正转义或使用脚本可以正确创建的其他工具(例如“sed”)吗?
请原谅我糟糕的英语并感谢您的帮助!
答案1
我不确定我是否理解了您所有的回声,但这可能是您想要的。将您想要的内容准确地放入 mysqlsec_skript.sh 文件中这里的字符串,即一个多行字符串,从“<<'endofileindicator'”之后的行开始,并在仅包含所选 endoffileindicator 的行之前结束。我使用了单个字符“!”作为结束文件指示符。因此该cat
命令会读取所有内容,直到只有“!”的行为止。 (不允许有空格),并将其复制到您的目的地。
cat <<'!' > /root/mysqlsec_skript.sh
#!/bin/bash
FILE=/root/mysqlsecure
if [ -f $FILE ]
then
echo "File $FILE exists, mysql is safe!"
else
echo "File $FILE does not exists, secure mysql"
mysqladmin -u root password 'secret'
mysql -u root -p'secret' -e "UPDATE mysql.user SET Password=PASSWORD('secret') WHERE User='root'"
mysql -u root -p'secret' -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
mysql -u root -p'secret' -e "DELETE FROM mysql.user WHERE User=''"
mysql -u root -p'secret' -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'"
mysql -u root -p'secret' -e "FLUSH PRIVILEGES"
touch /root/mysqlsecure
fi
!
chmod +x /root/mysqlsec_skript.sh