Como executar um comando dentro de um script bash?

Como executar um comando dentro de um script bash?

Estou escrevendo um script que transmitirá continuamente alguns dados para a porta 30000, para que um ouvinte python udp possa obter os dados e inseri-los em uma tabela, da qual posso extrair essas informações e exibi-las em uma página da web.

Então, eu quero executar

echo -n -e "\x00\x00\x0A\x00 1 012601234512345\x00" | nc -w1 -u localhost 3000

no script bash em um loop while.

Este é o script bash que tenho até agora:

#!/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

A variável x aumenta a cada vez ao longo do loop, de modo que os dados mudam a cada vez.

No momento estou pensando que, em vez de enviar isso como um comando para o terminal, está apenas saindo como uma string. Sou muito novo no bash e qualquer ajuda seria muito apreciada.

Responder1

Você está pensando demais.

Basta colocar ali o comando que deseja executar, sem citá-lo ou echoindicá-lo. Substitua a variável por ${x}. As variáveis ​​​​serão substituídas por strings entre aspas duplas e isso {}existe para garantir que sua variável seja interpretada como xe não 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

Responder2

Na verdade, você está repetindo o comando em vez de executá-lo.

Os scripts Bash são executados linha por linha como comandos. Então esta linha:

echo 'Running Script'

é um equivalente exato de digitar echo 'Running Script'no shell. Experimente você mesmo: a saída será Running Script. Conclusão: echoirá enviar todos os seus argumentos para o terminal.

Captura de tela do bash com o comando acima executado

Dito isto, esta linha:

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

será enviado echo -n -e "\x00\x00\x0A\x00 1 012601234'$x'12345\x00" | nc -w1 -u localhost 30000para o terminal. A linha inteira é executada, o argumento é gerado.

Segundo comando executado no bash

Ainda parece confuso, então vamos simplificar um pouco: deixe nosso comando ser echo 'echo -n -e "blah"'.

comando blá executado no bash

Você disse para ele gerar o comando, então ele gerou o comando. Solte o exterior echopara executá-lo. Comoslhck sugerido, você pode usar a variável envolvendo-a entre chaves:

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

Ele executará o comando, mas não o produzirá. Se você deseja gerar o comando, tente isto:

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

A primeira linha atribui seu comando a uma cmdvariável, a segunda linha o gera e a terceira o executa. Parece confuso no começo, mas é bem simples: o bash apenas substituirá as variáveis ​​antes de executar um comando, então digitar o nome da variável fará com que seu conteúdo seja executado.

informação relacionada