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
一度に1つのドメインしか使用しないとします。
構文を削除すると、ドメインを値として保持する変数がfor domain; do ... done
ないため、ドメインをパラメータとして渡すことはできないようです。そのため、ループなしdomain
で1つのドメインパラメータのみを処理するようにスクリプトを変更する正しい方法が何であるかを尋ねています。for
domain
スクリプトの先頭に追加するのが正しい方法かどうかはわかりません。
付録
なぜ誰かがこれをしたいのかについてのいくつかの弱い主張(for loop
正直に言うと、うまく機能するからです):
1)ミニマリズムを追求するときは、行数を減らしてください。
2)一度に 1 つの領域で精神的に作業できるようにすることで、追加の入力やスペルエラーの可能性が減り、作成された内容を簡単に確認できます。
三)for
ループの使用は、ドメイン数が少ない(<= 5ドメイン)一部の小規模環境では重複します。
ベストアンサー1
domain="$1"
test -z "$domain" && exit 2
出口
2行目は質問に対する答えではありません。位置パラメータを使用したループを使用している場合に発生しない問題を解決/減らします。
(誤って)位置引数なしでスクリプトを呼び出すと、ループの場合は何も起こりません。ただし、非ループスクリプトはいかなる場合でも実行され、コマンドが元のものと異なるため、潜在的に破損する可能性があります。
したがって、少なくともパラメータが存在することを確認する必要があります(より良い:有効な値であることを確認することをお勧めします)。パラメータに無効な値があるか空の場合(存在しない場合)、スクリプトは中断されます。
シェル組み込みコマンドはexit
現在のシェルを終了します。これは対話型シェルとシェルスクリプトの両方で機能します。exit
非負の整数を引数として持つことができます(デフォルトは0)。シェルを終了する終了コードです。