如何在 Bash 脚本中执行命令?

如何在 Bash 脚本中执行命令?

我正在编写一个脚本,它将连续向端口 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

x 变量在整个循环过程中每次都会递增,因此数据每次都会发生变化。

目前,我认为它不是作为命令输出到终端,而是作为字符串输出。我对 bash 还很陌生,任何帮助都将不胜感激。

答案1

你想太多了。

只需将要执行的命令放在此处,无需将其括起来或echoing。将变量替换为${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

答案2

您确实是在回显命令而不是执行命令。

Bash 脚本以命令的形式逐行执行。因此这一行:

echo 'Running Script'

与在 shell 中输入完全相同echo 'Running Script'。自己尝试一下:它将输出Running Script。结论:echo它将把所有参数输出到终端。

使用上述命令从 bash 中截取的屏幕截图

话虽如此,这一行:

echo 'echo -n -e "\x00\x00\x0A\x00        1      012601234'$x'12345\x00" | nc -w1 -u localhost 30000'

将输出echo -n -e "\x00\x00\x0A\x00 1 012601234'$x'12345\x00" | nc -w1 -u localhost 30000到终端整行执行完毕,并输出其参数。

bash 中执行的第二条命令

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

blah 命令在 bash 中运行

你告诉它输出命令,所以它输出了命令。删除外部命令echo来执行它。作为slhck 建议,您可以通过用花括号括起来来使用该变量:

echo -n -e "\x00\x00\x0A\x00        1      012601234${x}12345\x00" | nc -w1 -u localhost 30000

它将执行命令,但不会输出。如果您想输出命令,请尝试以下操作:

cmd="echo -n -e \"\x00\x00\x0A\x00        1      012601234${x}12345\x00\" | nc -w1 -u localhost 30000"
echo $cmd
$cmd

第一行将命令赋值给一个cmd变量,第二行输出该命令,第三行执行该命令。乍一看有点令人困惑,但其实很简单:bash 会在执行命令之前替换变量,因此输入变量名将导致其内容被执行。

相关内容