Executando um .sh para executar vários comandos

6

Eu estava curioso sobre como eu iria executar vários comandos via shell script.

Por exemplo, apenas para testar, 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 através de um .sh, não múltiplo.

De alguma forma?

    
por Brendon 20.07.2014 / 01:50

2 respostas

7

Simples, na verdade - 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 é isso (provavelmente melhor, pois o & amp; & amp; só permitirá que o comando upgrade seja executado se o update sair com êxito) :

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

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

 chmod +x ./updatescript

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

e execute-o com este terminal:

 ./updatescript

Nota (s):

Existe uma opção ( -y ) disponível que pode ser usada com o comando upgrade para que ele não avise antes de atualizar os pacotes. É uma boa idéia verificar o que o apt-get está fazendo antes de atualizar os pacotes, já que ele pode / vai fazer algo estúpido ou algo que você não quer que ele faça. 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á atualizando e, em seguida, executá-lo. Se você quiser uma maneira GUI para executar as atualizações, use o centro de software como é para isso.

    
por Wilf 20.07.2014 / 03:14
4

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

você pode executar comandos paralelamente se quiser por qualquer motivo, por exemplo, um script autostart para o OpenBox pode ter esta aparência:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Isso definirá uma imagem de plano de fundo usando nitrogen , iniciará o painel tint2 e iniciará o console suspenso no estilo Quake3 tilda , todos ao mesmo tempo. Isso é útil se você não precisa de um programa para concluir antes de iniciar o próximo. Não é o caso de apt-get update e apt-get upgrade !

Observe o sinal & no final de cada linha. Isso fará com que o shell bifurque esse processo no plano de fundo e continue a execução. Observe como ele é diferente de && , que é basicamente um sinal and , command_1 && command_2 executará command_1 e, se for bem-sucedido, só executará command_2 , enquanto command_1 & command_2 iniciará o segundo logo após o primeiro.

Além disso, você poderia apenas empilhar comandos para executá-los em série, assim:

#!/bin/bash

apt-get update
apt-get upgrade

Isso executará apt-get upgrade após apt-get update ser terminado , mas independentemente do resultado. Portanto, mesmo que, por exemplo, a atualização seja encerrada 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, essa solução não é ótima para esses comandos específicos, mas pode ser útil em outras situações.

Um último ponto rápido, você também pode quebrar linhas contendo && como tal:

command_1 &&
command_2

Isso será o mesmo que command_1 && command_2 .

    
por kraxor 20.07.2014 / 04:15