echo에서 인수 인수 결합

echo에서 인수 인수 결합

내 환경에서 다음 스크립트를 사용하여 다음을 수행합니다.

  1. Nginx 사이트 구성을 만듭니다.
  2. 해당 Let'sEncrypt SSL 인증서를 생성합니다.
  3. sites-default내 디렉터리와 사이트 구성 사이에 심볼릭 링크를 만듭니다.
  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

이 명령을 추가하면 스크립트가 4단계 대신 5단계를 수행하도록 변경됩니다.

  1. Nginx 사이트 구성을 만듭니다.
  2. 해당 Let'sEncrypt SSL 인증서를 생성합니다.
  3. sites-default내 디렉터리와 사이트 구성 사이에 심볼릭 링크를 만듭니다.
  4. localhost에서만 작동하고 동일한 이름의 데이터베이스를 갖는 모든 권한이 있고 인증된 데이터베이스 사용자를 추가합니다.
  5. 서버를 다시 시작하십시오.

내 질문:

보시다시피 ${DOMAIN}저는 echo.~ 해야 하다여기에도 동일한 매개변수를 전달합니다. 그렇지 않으면 데이터베이스 사용자 이름이나 관련 데이터베이스가 내 사이트 구성에 맞지 않고 내 WordPress 기반 사이트가 시작되지 않습니다.

Bash에서 이 작업이 논리적인가요? 아니면 다른 접근 방식을 취하시겠습니까?

이를 명확히 하기 위해 매개변수가 echo.

답변1

이를 위해 다음을 수행할 필요는 없습니다 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보다 나은가요?

답변2

질문하신 내용은 다음과 같습니다.Bash 매개변수 대체. 이 echo명령은 여기서는 효과가 없습니다. 사용하고 계시는 것 같네요아포스트로피바꾸다큰따옴표, 문자열에서 매개변수 대체를 억제합니다. 작은따옴표 대신 큰따옴표를 사용하고 문자열에 포함하려는 큰따옴표를 이스케이프하려면 백슬래시를 사용하세요. 예를 들면 다음과 같습니다.

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

관련 정보