我正在编写一个脚本,它会不断地向端口 30000 广播一些数据,因此 python udp 侦听器可以获取数据并将其插入到表中,我可以从中提取该信息并显示在网页上。
所以,我想执行
echo -n -e "\x00\x00\x0A\x00 1 012601234512345\x00" | nc -w1 -u localhost 3000
在 bash 脚本中的 while 循环中。
这是我到目前为止的 bash 脚本:
#!/bin/bash
echo 'Running Script'
a=0
x=1
while [ $a -le 1 ]
do
echo 'echo -n -e "\x00\x00\x0A\x00 1 012601234'$x'12345\x00" | nc -w1 -u localhost 30000'
sleep 5
let x=$(($x + 1))
done
Run Code Online (Sandbox Code Playgroud)
x 变量在整个循环中每次都在递增,因此数据每次都会发生变化。
目前我认为与其将其作为命令输出到终端,不如将其作为字符串输出。我对 bash 很陌生,任何帮助将不胜感激。
slh*_*hck 10
你多虑了。
只需将您要执行的命令放在那里,无需引用或执行echo它。用 替换变量${x}。变量将被替换为双引号字符串,并且{}是为了确保您的变量被解释为x而不是x12345。
#!/bin/bash
echo 'Running Script'
a=0
x=1
while [ $a -le 1 ]
do
echo -n -e "\x00\x00\x0A\x00 1 012601234${x}12345\x00" | nc -w1 -u localhost 30000
sleep 5
let x=$(($x + 1))
done
Run Code Online (Sandbox Code Playgroud)
您确实是在回显命令而不是执行它。
Bash 脚本作为命令逐行执行。所以这一行:
echo 'Running Script'
Run Code Online (Sandbox Code Playgroud)
完全等同echo 'Running Script'于在 shell中键入。自己尝试一下:它会输出Running Script. 结论:echo将其所有参数输出到终端。

话虽如此,这一行:
echo 'echo -n -e "\x00\x00\x0A\x00 1 012601234'$x'12345\x00" | nc -w1 -u localhost 30000'
Run Code Online (Sandbox Code Playgroud)
将输出echo -n -e "\x00\x00\x0A\x00 1 012601234'$x'12345\x00" | nc -w1 -u localhost 30000到终端整行被执行,它输出的参数。

它看起来仍然令人困惑,所以让我们稍微简化一下:让我们的命令是echo 'echo -n -e "blah"'.

你已经告诉它输出命令,所以它输出了命令。删除外部echo以执行它。正如slhck 建议的那样,您可以通过用花括号将其包裹来使用该变量:
echo -n -e "\x00\x00\x0A\x00 1 012601234${x}12345\x00" | nc -w1 -u localhost 30000
Run Code Online (Sandbox Code Playgroud)
它将执行命令,但不输出它。如果你想输出命令,试试这个:
cmd="echo -n -e \"\x00\x00\x0A\x00 1 012601234${x}12345\x00\" | nc -w1 -u localhost 30000"
echo $cmd
$cmd
Run Code Online (Sandbox Code Playgroud)
第一行将您的命令分配给一个cmd变量,第二行输出它,第三行执行它。一开始看起来很混乱,但其实很简单:bash 只会在执行命令之前替换变量,所以输入变量名会导致其内容被执行。
| 归档时间: |
|
| 查看次数: |
136991 次 |
| 最近记录: |