我是 bash 脚本新手。我有一个脚本来 ping 多台“我”编写的机器:
for var in "$@"
do
ping -c 1 -W 2 "$var" > /dev/null
echo $var = $?
done
我想做的是允许一个 glob 作为输入来 ping 多台具有相似名称的机器。
例如:pingall machine[:01-06:]
但我不知道如何实现这一点。
答案1
通配是另一个名字文件名生成或者路径名扩展。
这就是将 shell 通配符转换为与其匹配的文件列表的过程。它只能用于现存的文件。
在这里,您可以使用大括号扩展来代替:
pingall machine{01..06}
shell 扩展为machine01
, machine02
...machine06
单独的参数,无论当前目录中是否存在该名称的文件(不是通配)。
该语法来自 和的最新版本,zsh
并且也受其支持。bash
yash -o braceexpand
使用ksh93
,您可以使用:
pingall machine{1..6%02d}
尽管在这种特殊情况下,您也可以使用:
pingall machine0{1..6}
使用 GNUseq
命令,您还可以执行以下操作(假设默认值为$IFS
):
pingall $(seq -f machine%02.0f 6)
答案2
仅当匹配文件名时模式才会扩展。也许你可以使用大括号扩展来代替?运行脚本
pingall machine0{1..6}
这将扩展到
pingall machine01 machine02 machine03 machine04 machine05 machine06