Bash中的简单For循环

时间:2019-07-15 18:31:50

标签: bash

我不明白为什么这段代码没有向netcat发送正确的信息。

不确定如何尝试

#!/bin/bash

for i in {0000..9999}

do
 echo UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i | nc localhost 30002
done

目标是通过netcat向本地主机上的端口30002发送一个哈希密码和一个4位数的密码。收到正确的密码/密码组合后,Netcat将返回目标密码。

1 个答案:

答案 0 :(得分:1)

您的shebang建议您使用的外壳不支持括号扩展。如果您打算使用特定于#!/bin/bash的功能,请使用bash(或任何正确的路径)。每次更新时,听起来好像您使用的是bash的较旧版本,不会将括号扩展的结果归零。

括号扩展通常用于交互使用,以减少按键。在脚本中,可以使用

for ((i=0; i< 10000; i++)); do
  printf 'UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ %04d\n' | nc localhost 30002
done

或与POSIX兼容的while循环。

i=0
while [ "$i" -lt 10000 ]; do
  printf 'UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ %04d\n' | nc localhost 30002
  i=$((i+1))
done