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 所述,$() 通常是扩展命令的首选方式。但也可以使用重音符(或有时称为“反引号”)。您的代码 运行 存在的问题是它使用了错误的重音类型 - 锐音符 (´) 而不是重音符 (`)