【发布时间】:2013-11-11 21:25:29
【问题描述】:
我正在尝试理解 Linux Bash 脚本。该脚本的目的是仅限制某些 dyndns 用户(通过使用 ufw 规则)访问服务器服务。部分脚本:
ALLOWEDUSERS="client1.dyndns.org client2.dyndns.org"
for host in $ALLOWEDUSERS ; do
ip=`host $host | cut -d ' ' -f 4`
if [ $? -eq 0 ]; then
ufw allow proto tcp from $ip to any
fi
done
好的
for host in $ALLOWEDUSERS ; do
很清楚,它循环通过 ALLOWEDUSERS,
据我所知
if [ $? -eq 0 ]; then
检查之前执行的命令是否为真(如果是则添加ufw规则)
但是sn-p的其余部分如何
ip=`host $host | cut -d ' ' -f 4`
检查客户端 ip 是否来自允许的 dyndns 帐户?
非常感谢您的帮助,
托尼
【问题讨论】:
-
这个脚本写得不好,可能坏了。为什么要浪费时间呢?
-
嗨 Barmar “为什么要浪费时间呢?” - 用于学习目的。
-
程序员显然认为他正在检查
host命令的退出状态,如果主机名查找成功则为0。但它实际上是检查cut的退出状态,因为管道的状态是最后一个命令的状态。所以它不能按预期工作。 -
@tBook 那不是我写的。
-
@tBook 然后向其他编写更好的脚本学习。这东西是虫巢。在这种情况下,
cut将始终返回 true,因此ufw将始终运行。哦,亲爱的。