echo 或 sed 从 ks 文件中生成 mysql_secure 脚本

echo 或 sed 从 ks 文件中生成 mysql_secure 脚本

我将创建一个 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

相关内容