Ejecutar un .sh para ejecutar múltiples comandos

9

Tenía curiosidad por saber cómo ejecutar múltiples comandos a través de script de shell.

Por ejemplo, solo para probarlo, me gustaría poder conectar un .desktop a un .sh que ejecute todos los códigos de actualización para no tener que escribirlo. Sé cómo ejecutar un solo comando a través de un .sh, no múltiples.

¿De todas formas?

Brendon
fuente

Respuestas:

10

Realmente simple: necesita separar los comandos. Por ejemplo esto:

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

actualizará las listas de paquetes y luego los paquetes. Otra posibilidad es esta (probablemente mejor, ya que && solo permitirá que el upgradecomando se ejecute si la updatesalida se realiza correctamente) :

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

Esto debería ejecutar los comandos para actualizar la lista de paquetes y luego el paquete en sí. Esto debería guardarse en un archivo de texto (por ejemplo, updatescripten el directorio de inicio). Luego puede hacerlo ejecutable ejecutando:

 chmod +x ./updatescript

o haciendo clic derecho en el archivo y haciéndolo ejecutable en sus propiedades:

y ejecutarlo con esto en la terminal:

 ./updatescript

Nota (s):

Hay una opción ( -y) disponible que se puede usar con el upgradecomando para que no aparezca antes de actualizar los paquetes. Es una buena idea verificar lo que apt-getestá haciendo antes de actualizar los paquetes, ya que puede / hará algo estúpido o algo que usted no quiere que haga. Puede encontrar más información sobre opciones como esta ejecutando man apt-get.

Esto también significa que es más ideal usar el terminal para ejecutar el script, ya que puede verificar qué está actualizando y luego ejecutarlo. Si desea una forma de GUI para ejecutar las actualizaciones, use el centro de software, ya que es para eso.

Wilf
fuente
5

Solo para agregar algunos puntos a la excelente respuesta de @Wilf,

puede ejecutar comandos en paralelo si lo desea por cualquier motivo, por ejemplo, un autostartscript para OpenBox podría verse así:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Esto establecerá una imagen de fondo usando nitrogen, inicie el panel tint2e inicie la consola desplegable de estilo Quake3 tilda, todo al mismo tiempo. Esto es útil si no necesita un programa para finalizar antes de iniciar el siguiente. ¡No es el caso para apt-get updatey apt-get upgradeaunque!

Observe el &letrero al final de cada línea. Esto hará que el shell bifurque ese proceso en segundo plano y continúe la ejecución. Observe cómo es diferente &&, que es básicamente una andseñal, command_1 && command_2se ejecutará command_1y si sale con éxito, solo entonces se ejecutará command_2, mientras command_1 & command_2que comenzará el segundo justo después del primero.


Además, podría apilar comandos para que se ejecuten en serie, de esta manera:

#!/bin/bash

apt-get update
apt-get upgrade

Esto se ejecutará apt-get upgradedespués de que apt-get updatehaya terminado , pero independientemente del resultado. Entonces, incluso si, por ejemplo, la actualización se cierra con un error de red, la actualización aún se ejecutará.

También puede hacer esto en una sola línea, utilizando el ;signo: apt-get update ; apt-get upgrade. Nuevamente, esta solución no es óptima para estos comandos particulares, pero puede ser útil en otras situaciones.


Un punto final rápido, también puede dividir líneas que contengan &&como tales:

command_1 &&
command_2

Esto será lo mismo que command_1 && command_2.

kraxor
fuente