Executando um .sh para executar vários comandos

9

Fiquei curioso para saber como executar vários comandos via shell script.

Por exemplo, apenas para experimentá-lo, eu gostaria de poder conectar um .desktop a um .sh que executará todos os códigos de atualização, para que eu não precise digitá-lo. Eu sei como executar um único comando via um .sh, não múltiplo.

De qualquer forma?

Brendon
fonte

Respostas:

10

Simples realmente - você precisa separar os comandos. Por exemplo, isto:

#!/bin/bash
sudo apt-get update
sudo apt-get upgrade

atualizará as listas de pacotes e, em seguida, os pacotes. Outra possibilidade é essa (provavelmente melhor, pois o && permitirá apenas que o upgradecomando seja executado se a updatesaída for bem-sucedida) :

#!/bin/bash
sudo apt-get update && sudo apt-get upgrade

Isso deve executar os comandos para atualizar a lista de pacotes e depois o próprio pacote. Isso precisaria ser salvo em um arquivo de texto (por exemplo, updatescriptno diretório inicial). Você pode torná-lo executável executando:

 chmod +x ./updatescript

ou clicando com o botão direito do mouse no arquivo e tornando-o executável em suas propriedades:

e execute-o com isso no terminal:

 ./updatescript

Notas):

Há uma opção ( -y) disponível que pode ser usada com o upgradecomando para que não seja solicitado antes da atualização dos pacotes. É uma boa idéia verificar o que apt-getestá fazendo antes de atualizar os pacotes, pois isso pode / fará algo estúpido ou algo que você não deseja. Mais informações sobre opções como essa podem ser encontradas executando man apt-get.

Isso também significa que é mais ideal usar o terminal para executar o script, pois você pode verificar o que está sendo atualizado e, em seguida, executá-lo. Se você deseja uma maneira da GUI de executar as atualizações, use o centro de software, pois é para isso que serve.

Wilf
fonte
5

Apenas para adicionar alguns pontos à excelente resposta de @Wilf,

você pode executar comandos em paralelo, se desejar, por qualquer motivo, por exemplo, um autostartscript para o OpenBox pode ter a seguinte aparência:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Isso definirá uma imagem de plano de fundo usando nitrogen, inicie o painel tint2e inicie o console suspenso no estilo Quake3 tilda, tudo ao mesmo tempo. Isso é útil se você não precisar de um programa para concluir antes de iniciar o próximo. Não é o caso apt-get updatee apt-get upgradeembora!

Observe o &sinal no final de cada linha. Isso fará com que o shell bifurque esse processo em segundo plano e continue a execução. Observe como é diferente de &&, que é basicamente um andsinal, command_1 && command_2será executado command_1e, se sair com sucesso, somente será executado command_2, enquanto command_1 & command_2iniciará o segundo logo após o primeiro.


Além disso, você pode simplesmente empilhar comandos para executá-los em série, da seguinte maneira:

#!/bin/bash

apt-get update
apt-get upgrade

Este será executado apt-get upgradeapós apt-get updateestá terminado , mas independentemente do resultado. Portanto, mesmo que, por exemplo, a atualização saia com um erro de rede, a atualização ainda será executada.

Você também pode fazer isso em uma linha, usando o ;sinal: apt-get update ; apt-get upgrade. Novamente, esta solução não é ideal para esses comandos específicos, mas pode ser útil em outras situações.


Um ponto final rápido, você também pode quebrar linhas contendo &&assim:

command_1 &&
command_2

Será o mesmo que command_1 && command_2.

kraxor
fonte