Eu tenho o seguinte script que uso para criar arquivos conf webapp (em /etc/nginx/sites-available/
).
Este é o roteiro:
#!/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
Dado que tem um for
loop para uma domain
variável, posso executá-lo para vários domínios passando esses domínios como argumentos para domain
:
bash ~/nwsm domain_1.tld domain_2.tld
Minha pergunta
Assuma que, por qualquer motivo, prefiro não usar um for
loop e trabalhar apenas com um domínio de cada vez:
Se eu remover a for domain; do ... done
sintaxe, presumo que não seria capaz de passar um domínio como argumento porque não há uma domain
variável para mantê-lo como um valor. Por isso pergunto qual é a maneira correta de alterar o script para que ele processe apenas um argumento de domínio, sem for
loop?
Não tenho certeza se apenas adicionar domain
no início do script é a maneira correta de fazer isso.
Apêndice
Alguns argumentos fracos de por que alguém iria querer fazer isso (porque for loop
funciona muito bem para ser honesto):
1) Reduzir a quantidade de linhas ao aspirar ao minimalismo.
2) Definir-se mentalmente para trabalhar com um domínio de cada vez reduzirá a chance de digitação extra e erros de digitação e facilitará a validação do que já está escrito.
3) Usar um for
loop é redundante em alguns ambientes pequenos quando você trabalha com um número esparso de domínios (<=5 domínios).
saída
A segunda linha não é uma resposta à pergunta. Deve resolver/reduzir um problema que não existiria se fosse usado um loop sobre os parâmetros posicionais.
Se um script for (por engano) chamado sem parâmetros posicionais, nada acontecerá no caso de um loop. Mas um script sem loop é executado em qualquer caso, podendo causar danos porque os comandos diferem do que deveriam ser.
Portanto, deve-se pelo menos verificar se o argumento existe (melhor: verificar se é um valor válido). Se o argumento tiver um valor ilegal ou estiver vazio (não existente), o script deverá ser abortado.
O shell interno
exit
aborta o shell atual. Isso funciona tanto em um shell interativo quanto em scripts de shell.exit
pode ter um inteiro não negativo como argumento (o padrão é zero). Este é o código de saída do shell abortado.