Echo または sed は ks ファイルから mysql_secure スクリプトを生成します。

Echo または sed は ks ファイルから mysql_secure スクリプトを生成します。

KSファイル(自動オペレーティングシステムをインストールするためのKickstart)を作成します。 ksファイルを使用してmariadbをインストールしました。ところで、mysql_secureスクリプトの実行に問題があるようです。

私の考えは、mysql_secureスクリプトと同じ手順を実行するスクリプトをksファイルに生成し、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 パスワード '"'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

おすすめ記事