Bash - como executar um comando após o término anterior? [duplicado]

70

Atualmente, tenho um arquivo script.sh com o seguinte conteúdo:

#!/bin/bash
wget -q http://exemple.com/page1.php;
wget -q http://exemple.com/page2.php;
wget -q http://exemple.com/page3.php;

Eu quero executar os comandos um por um, quando o anterior terminar. Estou fazendo do jeito certo? Eu nunca trabalhei com o Linux antes e tentei procurá-lo, mas não encontrei soluções.

    
por drogy 12.02.2015 / 17:48

2 respostas

105

Sim, você está fazendo do jeito certo. Scripts shell executarão cada comando sequencialmente, aguardando que o primeiro termine antes do próximo ser iniciado. Você pode unir comandos com ; ou tê-los em linhas separadas:

command1; command2

ou

command1
command2

Não há necessidade de ; se os comandos estiverem em linhas separadas. Você também pode optar por executar o segundo comando apenas se o primeiro sair com êxito. Para fazer isso, junte-se a eles com && :

command1 && command2

ou

command1 &&
command2

Para obter mais informações sobre os vários operadores de controle disponíveis, consulte aqui .

    
por 12.02.2015 / 17:52
11

Em um caso repetitivo como este, eu recomendei usar um loop .

for P in {1..3} ; do wget -q http://exemple.com/page${P}.php ; done

Esta é uma versão de uma linha adequada para a linha de comando, mas também pode ser usada em um script. As chaves em torno do nome da variável são necessárias ao incorporar uma variável em uma string sem espaço em branco.

O loop não apenas envia as solicitações em ordem, mas é mais fácil de ajustar e reutilizar quando necessário, sem tantas preocupações quanto a erros de digitação.

    
por 12.02.2015 / 21:38

Tags