Mysql

在迴聲中組合參數參數

  • November 9, 2017

我使用以下腳本在我的環境中執行以下操作:

  1. 創建一個 Nginx 站點配置文件。
  2. 創建相應的 Let’sEncrypt SSL 證書。
  3. sites-default在我的目錄和我的站點 conf之間創建一個符號連結。
  4. 重新啟動伺服器。

我的程式碼:

#!/bin/sh
for domain; do
   > "/etc/nginx/sites-available/${domain}.conf" cat <<EOF
       server {
           root /var/www/html/${DOMAIN};
           server_name ${DOMAIN} www.${DOMAIN};

           location ~ /\.ht {
               deny all;
           }

           location / {
               index index.php index.html index.htm fastcgi_index;
               try_files $uri $uri =404 $uri/ /index.php?$args;
           }

           location ~*  \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff|pdf)$ {
               expires 365d;
           }

           location ~ \.php$ {
               fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               include fastcgi_params;
           }
       }
   EOF
   sudo ln -s /etc/nginx/sites-available/${domain} /etc/nginx/sites-enabled/
   #########################################################################
   certbot --nginx -d ${DOMAIN} -d www.${DOMAIN}
done
systemctl restart nginx.service # Create Webapp Substrate.

我如何以及為什麼要改進此程式碼:

在長排井號的地方,我要插入以下命令:

echo 'create database ${DOMAIN}; create user "${DOMAIN}"@"localhost" identified by "mypassword"; grant all privileges on ${DOMAIN}.* to ${DOMAIN};' | mysql -u root -p

添加此命令會將腳本更改為執行 5 個步驟而不是 4 個:

  1. 創建一個 Nginx 站點配置文件。
  2. 創建相應的 Let’sEncrypt SSL 證書。
  3. sites-default在我的目錄和我的站點 conf之間創建一個符號連結。
  4. 添加僅適用於 localhost 的所有特權且經過身份驗證的 DB 使用者,並具有相同名稱的 DB。
  5. 重新啟動伺服器。

我的問題:

如您所見,我${DOMAIN}echo. 我這樣做是因為我也必須在那里傳遞相同的參數,否則,數據庫使用者名及其關聯的數據庫都不適合我的站點配置,並且我的基於 Wordpress 的站點將無法啟動。

這個操作在 Bash 中是合乎邏輯的還是你會採取另一種方法?

為了澄清起見,我要求了解當參數位於echo.

你可以不這樣做echo

mysql -u root -ppass <<EOF
 create database ${DOMAIN};
 create user "${DOMAIN}"@"localhost" identified by "mypassword";
 grant all privileges on ${DOMAIN}.* to ${DOMAIN};
EOF

並查看主題為什麼 printf 比 echo 更好?

聽起來您要問的是Bash 參數替換。該echo命令在這裡不起作用。看起來您使用的是單引號而不是雙引號,這會抑製字元串中的參數替換。只需使用雙引號而不是單引號並使用反斜杠來轉義您希望包含在字元串中的任何雙引號,例如:

echo "create database ${DOMAIN}; create user \"${DOMAIN}\"@\"localhost\" identified by \"mypassword\"; grant all privileges on ${DOMAIN}.* to ${DOMAIN};"

引用自:https://unix.stackexchange.com/questions/402954