我正在尝试将我学到的有关 shell 脚本的知识应用到 ping 工具中,但似乎无法弄清楚我做错了什么。
我希望我的 ping 工具包含一个提示,为目标站点和数据包计数创建一个变量,以便它可以重复使用,并且不会默认向目标 URL 发送连续数据包。
我当前的脚本如下:
#!/bin/bash
echo "The....."
figlet -f banner "Pinger"
echo " "
read -p "[*] Enter the target host: " $TGT
read -p "[*] Enter number of packets to send: " $PKT
ping -c$PKT $TGT
exit0
该脚本不会拾取 nmap -c 标志的整数。
我尝试通过以下方式调试该问题:
ping $TGT
它本身就能完美地运行。
ping -c{$PKT}
不执行。
ping -c $PKT
而且ping -c {$PKT}
也无法正确执行。
显示的错误是:
ping: option requires an arguement -- 'c'
有人能告诉我解决办法是什么以便我能理解基本变量的使用上下文吗?
答案1
首先,我忽略了脚本的第 2-4 行,因为它们不相关。
使用时read
需要给它一个变量姓名(TGT
)。使用美元符号($TGT
)表示变量的价值。在这种情况下,值为空,因此read
默认为变量REPLY
。
还有:
- 按照惯例,大写变量名保留用于环境变量(例如
PATH
)和其他特殊变量(例如RANDOM
)。 - 最好使用描述性变量名,
target
例如n_packets
- 始终引用变量。
exit0
是无效的,而且exit 0
会屏蔽脚本末尾发生的任何错误,而且exit
是隐含的,所以甚至不必费心写它。- 在这种情况下,NBD,但使用
read -r
是一个好习惯。
所以最后:
#!/bin/bash
read -rp "[*] Enter the target host: " target
read -rp "[*] Enter number of packets to send: " n_packets
ping -c "$n_packets" "$target"
最后,壳牌检测对以后调试 shell 脚本非常方便。我运行了你的脚本,得到了上述大部分要点。
关于您尝试的语法,{$PKT}
我认为您对此感到困惑${PKT}
。