如何在 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

你想太多了。

只需將要執行的命令放在那裡,無需引用或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

答案2

您確實是在回顯命令而不是執行它。

Bash 腳本作為命令逐行執行。所以這一行:

echo 'Running Script'

echo 'Running Script'與在 shell 中輸入完全相同。自己嘗試:它會輸出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來執行它。作為斯爾克建議,您可以用大括號括起來來使用該變數:

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 只會在執行命令之前替換變量,因此輸入變數名稱將導致其內容被執行。

相關內容