49 votes

Comment écrire un Shell Shell pour installer une liste d'applications ?

Quelqu'un sait-il comment écrire un Shell Shell pour installer une liste d'applications ? C'est pénible de devoir installer chaque application à la main à chaque fois que j'installe un nouveau système.

Edita: Il me demande encore Do you want to continue [Y/n]? . Existe-t-il un moyen de faire en sorte que l'entrée script soit y ou pour qu'il ne demande pas d'entrée ?

47voto

Dennis G. Points 355

Je suppose que le script ressemblerait à quelque chose comme ceci :

#!/bin/sh
apt-get update  # To get the latest package lists
apt-get install <package name> -y
#etc.

Il suffit de l'enregistrer sous un nom tel que install_my_apps.sh, de modifier les propriétés du fichier pour le rendre exécutable et de l'exécuter à partir de la ligne de commande en tant que super-utilisateur.

( Edita: Les -y raconte apt-get de ne pas vous inviter et de procéder à l'installation)

24voto

cbp Points 229

D'après votre question, le script le plus simple serait le suivant :

#!/bin/sh
LIST_OF_APPS="a b c d e"

aptitude update
aptitude install -y $LIST_OF_APPS

Toutefois, vous pouvez également saisir aptitude update && aptitude install -y a b c d e . Il se peut donc que votre question passe à côté de l'essentiel. S'il y a d'autres exigences, il serait bon de les expliquer.

16voto

Marc Hughes Points 3794

Il suffit de créer une liste d'applications dans un fichier, example.list, et d'exécuter

cat example.list | xargs sudo apt-get -y install

3voto

NlightNFotis Points 2432

J'opterais pour le script suivant : vim install

#!/bin/bash
apt-get update  # To get the latest package lists
apt-get install $1 -y

Je devrais alors rendre exécutable le script ci-dessus. chmod +x install . Ensuite, pour l'utiliser, je pourrais taper : ./install <package_name> . Exemple : ./install clang

3voto

Yordan Georgiev Points 171
#!/bin/bash

set -eu -o pipefail # fail on error and report it, debug all lines

sudo -n true
test $? -eq 0 || exit 1 "you should have sudo privilege to run this script"

echo installing the must-have pre-requisites
while read -r p ; do sudo apt-get install -y $p ; done < <(cat << "EOF"
    perl
    zip unzip
    exuberant-ctags
    mutt
    libxml-atom-perl
    postgresql-9.6
    libdbd-pgsql
    curl
    wget
    libwww-curl-perl
EOF
)

echo installing the nice-to-have pre-requisites
echo you have 5 seconds to proceed ...
echo or
echo hit Ctrl+C to quit
echo -e "\n"
sleep 6

sudo apt-get install -y tig

Explication :

  • set -eu -o pipefail commande :

    Éléments de commandement

    Explication

    set

    Modifier le fonctionnement de l'environnement Shell.

    -u

    Si une variable n'existe pas, l'erreur est signalée et l'opération s'arrête (par exemple, variable non liée).

    -e

    Terminer chaque fois qu'une erreur se produit (par exemple, commande non trouvée)

    -o pipefail

    Si une sous-commande échoue, l'ensemble de la commande du pipeline échoue, mettant fin au script (par exemple, commande introuvable).

    Si ce script rencontre des erreurs, il échoue et se termine.

    Réf : https://www.tutorialdocs.com/article/set-command-in-bash.html

  • sudo -n true commande :

    Éléments de commandement

    Explication

    sudo

    Exécuter en tant que superutilisateur

    -n

    Non-interactif. Empêche sudo de ne pas demander de mot de passe. Si un mot de passe est requis, sudo affiche un message d'erreur et quitte

    true

    Commande intégrée qui renvoie un état de sortie réussi (zéro)

    Exécuter en tant que superutilisateur et ne pas demander de mot de passe. Quitter l'état en cas de succès.

    Réf : https://linux.die.net/man/8/sudo , https://linux.die.net/abs-guide/internal.html

  • test $? -eq 0 || exit 1 "you should have sudo privilege to run this script" commande :

    Éléments de commandement

    Explication

    test

    Prend une expression comme argument, l'évalue comme '0' ( true ) ou "1" ( false ), et renvoie le résultat dans la variable bash $?

    $?

    Une variable utilisée pour trouver la valeur de retour en tant que statut de sortie de la dernière commande exécutée.

    -eq

    équivaut

    0

    Le résultat de la valeur est vrai

    ||

    L'opérateur logique "OR" est un opérateur booléen. Il peut exécuter des commandes ou des fonctions Shell en fonction de l'état de sortie d'une autre commande.

    exit

    Quitte le Shell avec un statut N. Si N n'est pas spécifié, il utilise le code de sortie de la dernière commande exécutée.

    1

    Le résultat de la valeur est faux et est utilisé ici comme argument de la commande exit à utiliser comme code de sortie.

    "you should have sudo privilege to run this script"

    Si le code de sortie est faux, le message suivant est imprimé sur le terminal

    Testez le code de sortie de la dernière variable et vérifiez s'il est égal à "0". Si ce n'est pas le cas, le programme sort avec une erreur et imprime un message donné sur le terminal.

    Réf : https://linuxhint.com/bash-test-command/ , http://tldp.org/LDP/abs/html/exit-status.html#EXSREF , https://bash.cyberciti.biz/guide/Logical_OR , https://linuxize.com/post/bash-exit/

  • echo installing the must-have pre-requisites commande :

    Éléments de commandement

    Explication

    echo

    Commande intégrée utilisée pour imprimer des informations ou des messages sur le terminal

    installing the must-have pre-requisites

    Message à imprimer sur le terminal

    Indiquer à l'utilisateur qu'il va installer certains paquets prérequis avant d'installer le programme proprement dit.

    Réf : https://linuxhint.com/bash_echo/

  • while read -r p ; commande :

    Éléments de commandement

    Explication

    while

    Créer une boucle "while", c'est-à-dire exécuter un ensemble donné de commandes à l'infini tant que la condition donnée est évaluée comme étant vraie.

    read

    Lire une ligne de l'entrée standard et la stocker dans une variable

    -r

    Option transmise à read qui évite que les barres obliques inverses soient interprétées

    p

    Variable arbitraire pour read pour mémoriser l'entrée capturée. Ici, il représente chaque paquet à installer

    ;

    Opérateur de contrôle ET. Passe à la commande suivante et l'exécute quel que soit le statut de sortie de la commande précédente (exécute même si la commande précédente échoue).

    Lire un fichier donné ligne par ligne pour toujours ou jusqu'à ce qu'il reçoive la valeur "false", puis passer à la commande suivante.

    Réf : https://linuxize.com/post/bash-while-loop/ , http://linuxcommand.org/lc3_man_pages/readh.html , https://linuxhint.com/while_read_line_bash/ , https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_09

  • do sudo apt-get install -y $p ; commande :

    Éléments de commandement

    Explication

    do

    Mot réservé utilisé pour délimiter la séquence de commandes qui suit. par exemple, start

    apt-get

    Outil utilisé par le gestionnaire de paquets APT (Advanced Package Tool) de Debian

    install

    Une commande utilisée pour installer des paquets

    -y

    Le formulaire long est --yes . répondre "oui" à toutes les demandes de renseignements

    $p

    Utilisé pour appeler la variable arbitraire p de read et l'utiliser comme entrée standard

    Installer la liste des paquets en tant que superutilisateur sans demander la confirmation de l'installation.

    Réf : https://itsfoss.com/apt-get-linux-guide/

  • done < <(cat << "EOF" <list of packages> EOF) commande :

    Éléments de commandement

    Explication

    done

    Mot réservé utilisé pour délimiter la séquence des commandes qui précèdent. par exemple, stop

    <

    Redirection vers l'entrée standard

    cat

    Concaténer. permet de visualiser, de créer et d'ajouter des fichiers.

    <<

    Redirection qui lit l'entrée à partir de la source actuelle jusqu'à ce qu'elle rencontre un délimiteur et qui utilise ensuite ces lignes comme entrée standard pour une commande.

    EOF

    Délimiteur de fin de fichier

    cat << EOF-EOF

    Cela permet de lire, puis d'imprimer tout ce qui est compris dans le champ EOF bloc

    <(list)

    Obtenir la sortie de la liste ; les parenthèses indiquent que la liste sera exécutée dans un environnement subshell.

    Lire la liste des paquets et les rassembler en entrée standard. Redirigez-la vers le fichier read qui le capture en tant que p et l'envoie ensuite à la variable $p ce qui lui permet d'être exécutée par la variable install et lorsqu'il atteint la commande EOF redirige la sortie vers done mettant ainsi un terme à la while read boucle.

    Réf : https://linuxhint.com/cat-command-bash/ , https://linuxhint.com/what-is-cat-eof-bash-script/

Les quatre catégories suivantes echo sont explicites :

  • echo installing the nice-to-have pre-requisites
  • echo you have 5 seconds to proceed ...
  • echo or
  • echo hit Ctrl+C to quit

Cependant, le suivant ne l'est pas.

  • echo -e "\n" commande :

    Éléments de commandement

    Explication

    -e

    Activer la fonction des caractères backslash

    \n

    Séquence d'échappement de l'antislash pour la nouvelle ligne

    Cette commande crée une nouvelle ligne.

  • sleep 6 commande :

    Éléments de commandement

    Explication

    sleep

    Retarde l'exécution d'un script bash script, typiquement pour N secondes, à moins d'utiliser une option pour indiquer des durées plus longues.

    Retarder l'exécution de la commande suivante pendant 6 secondes.

    Réf : https://linuxhandbook.com/bash-sleep/

  • sudo apt-get install -y tig commande :

    Installer le tig avec le paquet Debian apt-get en exécutant l'installation en tant que superutilisateur, et ne pas demander de confirmation.

Références générales :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X