for 루프를 사용하지 않고 Bash 스크립트 변수에 매개변수를 전달하는 방법은 무엇입니까?

for 루프를 사용하지 않고 Bash 스크립트 변수에 매개변수를 전달하는 방법은 무엇입니까?

webapp conf 파일을 만들기 위한 다음 스크립트가 있습니다(아래 /etc/nginx/sites-available/).

스크립트는 다음과 같습니다.

#!/bin/sh

for domain; do
    cat <<-WEBAPPCONF > /etc/nginx/sites-available/${domain}.conf
        server {
            root var/www/html/${domain};
            server_name ${domain} www.${domain};
            location / {
                index index.php index.html index.htm fastcgi_index;
                try_files $uri $uri =404 $uri/ /index.php?$args;
            }
            location ~ \.php$ {
                fastcgi_pass unix:/var/run/php/php*-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
            }
        }
    WEBAPPCONF
    ln -s /etc/nginx/sites-available/${domain}.conf /etc/nginx/sites-enabled/
done

systemctl restart nginx.service

for변수 루프 가 있다는 점을 고려하면 domain도메인을 인수로 전달하여 여러 도메인에 대해 실행할 수 있습니다 domain.

bash ~/nwsm domain_1.tld domain_2.tld

내 질문

어떤 이유로 루프를 사용하는 것을 좋아하지 않고 for한 번에 하나의 도메인만 사용한다고 가정하십시오.

구문을 제거하면 도메인을 값으로 보유할 변수가 for domain; do ... done없기 때문에 도메인을 매개변수로 전달할 수 없을 것 같습니다 . 그래서 루프 domain없이 하나의 도메인 매개변수만 처리하도록 스크립트를 변경하는 올바른 방법이 무엇인지 묻고 있습니다 .for

domain스크립트 시작 부분에 추가하는 것이 올바른 방법인지 잘 모르겠습니다 .

부록

왜 누군가가 이것을 하고 싶어하는지에 대한 몇 가지 약한 주장( for loop솔직히 말하면 훌륭하게 작동하기 때문입니다):

1)미니멀리즘을 추구할 때는 줄 수를 줄이세요.

2)한 번에 한 영역씩 정신적으로 작업하도록 허용하면 추가 입력 및 철자 오류 가능성이 줄어들고 작성된 내용을 쉽게 확인할 수 있습니다.

삼)for루프 사용은 도메인 수가 희박한(<=5개 도메인) 일부 소규모 환경에서는 중복됩니다.

답변1

domain="$1"
test -z "$domain" && exit 2

출구

두 번째 줄은 질문에 대한 답변이 아닙니다. 위치 매개변수를 사용한 루프를 사용하는 경우 발생하지 않는 문제를 해결/줄입니다.

(실수로) 위치 인수 없이 스크립트를 호출하면 루프의 경우 아무 일도 일어나지 않습니다. 그러나 비루프 스크립트는 어떠한 경우에도 실행되며 명령이 원래와 다르기 때문에 잠재적으로 손상을 일으킬 수 있습니다.

따라서 최소한 매개변수가 존재하는지 확인해야 합니다(더 나은: 유효한 값인지 확인하는 것이 좋습니다). 매개변수에 잘못된 값이 있거나 비어 있는 경우(존재하지 않는 경우) 스크립트가 중단됩니다.

쉘 내장 명령은 exit현재 쉘을 종료합니다. 이는 대화형 쉘과 쉘 스크립트 모두에서 작동합니다. exit음수가 아닌 정수를 인수로 가질 수 있습니다(기본값은 0). 쉘을 종료하는 종료 코드입니다.

관련 정보