Bash中的简单For循环
我不明白为什么这段代码没有向netcat发送正确的信息 不知道该试什么Bash中的简单For循环,bash,Bash,我不明白为什么这段代码没有向netcat发送正确的信息 不知道该试什么 #!/bin/bash for i in {0000..9999} do echo UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i | nc localhost 30002 done 目标是通过netcat将散列密码和4位pin发送到本地主机上的端口30002。Netcat将在收到正确的密码/pin组合后返回目标密码。您的shebang提示您使用的外壳不支持支架扩展。使用#/bin/bash(
#!/bin/bash
for i in {0000..9999}
do
echo UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i | nc localhost 30002
done
目标是通过netcat将散列密码和4位pin发送到本地主机上的端口30002。Netcat将在收到正确的密码/pin组合后返回目标密码。您的shebang提示您使用的外壳不支持支架扩展。使用
#/bin/bash
(或任何正确的路径),如果您打算使用特定于bash的功能。根据您的更新,听起来您使用的是较旧版本的bash
,它不会对大括号扩展的结果进行零填充
大括号扩展通常用于交互式使用,以减少关键点笔划。在脚本中,使用
for ((i=0; i< 10000; i++)); do
printf 'UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ %04d\n' | nc localhost 30002
done
主机/端口的可能副本似乎顺序错误。您的shell是
/bin/sh
,而{0000..9999}
是bash理解的。也许你想要#/bin/bash
@karakfa已编辑。它在bash文件中是正确的,但是,我将它发布到了错误的站点。@wiregh0st您使用的是哪个版本的bash
?直到Bash4,才添加零填充的大括号扩展。如果您使用的是早期版本(如macOS附带的版本),则类似于{00..10}
的内容将扩展为0123445678910
,而不是001020304050607080910
。
i=0
while [ "$i" -lt 10000 ]; do
printf 'UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ %04d\n' | nc localhost 30002
i=$((i+1))
done