Linux 序列函数在 bash 脚本中无法正常工作
Linux sequence function isn't working properly in a bash script
我正在学习 Linux 课程,在脚本课程中,讲师使用 ping-sweeping 功能作为示例。它旨在遍历网络上从 1 到 255 的潜在 IP 和 return 回复的 IP。代码如下
#!/bin/bash
for ip in 'seq 1 254'; do
ping -c 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' 函数工作。非常感谢任何帮助!!
要运行一个命令和return它的输出,使用$()
:
for ip in $(seq 1 254); do
# Note ASCII double quotes
ping -c 1 ".$ip" | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" &
done
wait # Wait for all the background processes started in the loop to exit.
或者假设您正在使用 bash,
使用 brace expansion 而不是 运行 外部程序:
for ip in {1..254}; do
# ...
done
如 Shawn 所述,$() 通常是扩展命令的首选方式。但也可以使用重音符(或有时称为“反引号”)。您的代码 运行 存在的问题是它使用了错误的重音类型 - 锐音符 (´) 而不是重音符 (`)
我正在学习 Linux 课程,在脚本课程中,讲师使用 ping-sweeping 功能作为示例。它旨在遍历网络上从 1 到 255 的潜在 IP 和 return 回复的 IP。代码如下
#!/bin/bash
for ip in 'seq 1 254'; do
ping -c 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' 函数工作。非常感谢任何帮助!!
要运行一个命令和return它的输出,使用$()
:
for ip in $(seq 1 254); do
# Note ASCII double quotes
ping -c 1 ".$ip" | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" &
done
wait # Wait for all the background processes started in the loop to exit.
或者假设您正在使用 bash,
使用 brace expansion 而不是 运行 外部程序:
for ip in {1..254}; do
# ...
done
如 Shawn 所述,$() 通常是扩展命令的首选方式。但也可以使用重音符(或有时称为“反引号”)。您的代码 运行 存在的问题是它使用了错误的重音类型 - 锐音符 (´) 而不是重音符 (`)