我有以下用于制作 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)让自己同时在精神上同时使用一个域将减少额外输入和拼写错误的机会,并将简化对已编写内容的验证。
3)for
当您使用稀疏数量的域(<=5 个域)时,在某些小型环境中使用循环是多余的。
出口
第二行不是问题的答案。如果使用位置参数的循环,它将解决/减少不会存在的问题。
如果(错误地)在没有位置参数的情况下调用脚本,那么在循环的情况下不会发生任何事情。但是在任何情况下都会运行非循环脚本,这可能会造成伤害,因为命令与它们应该看起来的不同。
因此,至少应该检查参数是否存在(更好:检查它是否是有效值)。如果参数具有非法值或为空(不存在),则脚本应中止。
内置的 shell
exit
中止当前的 shell。这在交互式 shell 和 shell 脚本中都有效。exit
可以有一个非负整数作为参数(默认为零)。这是中止 shell 的退出代码。