【发布时间】:2021-10-09 23:49:12
【问题描述】:
我正在学习 Linux 课程,在脚本课程中,讲师使用 ping-sweeping 功能作为示例。它旨在遍历网络上从 1 到 255 的潜在 IP,并返回回复的 IP。代码如下
#!/bin/bash
for ip in 'seq 1 254'; do
ping -c 1 $1.$ip | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" &
done
这是在一个名为 ipsweep.sh 的文件中,然后我们调用它
./ipsweep.sh [first three tuples of IP]
当我运行脚本时,我得到了结果
ping: [myIP].seq: Name or service not known
所以我假设它不是将 seq 作为函数读取,而是简单地点击它并尝试将其按原样放入我的脚本中。显然,像 192.168.1.seq 这样的 IP 不存在,所以我们遇到了这个问题。
我不完全理解序列函数的语法,因为我是 Linux 和一般脚本的新手,但我尝试过使用
for ip in (seq 1 254); do
而是脚本无法识别括号。基本上我只需要知道如何让'seq 1 254'函数工作。非常感谢任何帮助!
【问题讨论】:
-
seq不是 bash 本身的一部分,也不是 POSIX 标准化的,以提供可靠的保证,即它存在或具有任何特定行为,以便操作系统或发行版能够自称为 POSIX -合规。考虑改用 shell 的内置语法:for ((ip=1; ip<=254; ip++)); do -
但更重要的是,
“(您的代码使用的字符)不是"(ASCII 双引号字符,它是唯一一种 shell 语法可识别的字符)。投票接近错误。 -
@CharlesDuffy 听起来智能引号是一些奇怪的复制和粘贴错误,而不是在实际脚本中。