1 votes

Progression du script de Bash

Je formule une nouvelle question basée sur une question précédente que j'ai postée. aquí en ce qui concerne un BASH script que j'écris. Ce n'est qu'une fonction du script mais j'ai commencé ici parce que je me suis dit que j'aurais plus de succès en complétant cette fonction que les autres.

Le code que j'ai jusqu'à présent est le suivant :

#!/bin/bash
clear;
welcome="- Sudo Bypass Package Installer -";
echo $welcome;
pkgFetch() {
    echo -n "Name of package you would like to install: "; read pkg
    chkPkg=$(dpkg -s $pkg|grep installed); echo "The Package [$pkg] is already installed."
if [ "" == "$chkPkg" ]; then
    echo  "The Package [$pkg] is installing..."
    sudo apt-get install $pkg -qq
    echo  "The package [$pkg] was successfully installed."
fi
echo  -n "Press ENTER to return to command-line."
};
pkgFetch;
read;
clear;

La première partie, qui vérifie si le paquet est installé (s'il l'est, le script renvoie le message indiquant qu'il est déjà installé) semble fonctionner correctement. Cependant, je rencontre ici quelques éléments auxquels je ne parviens pas à donner un sens... principalement parce que je suis un novice.

  • Si [$pkg] n'est pas installé, le script affiche quand même le message disant qu'il l'est, suivi du message qui devrait être affiché s'il n'est pas installé, à savoir qu'il est en cours d'installation.
  • Le script n'installe pas silencieusement le paquet. Il montre qu'il est base de données de lecture , déballage $pkg , les déclencheurs de traitement et mise en place $pkg . Ensuite, le script affiche le message correct que "Le paquet [$pkg] a été installé avec succès".

Quelqu'un veut-il tenter sa chance ici et m'instruire sur mes erreurs ?

Merci d'avance : - )

2voto

Paul Hänsch Points 3057

Le message indiquant que le paquet est déjà installé est totalement inconditionnel, il est affiché que le grep renvoie un résultat positif ou non.

Vous pourriez le faire précéder de [ -n "$chkPkg" ] && pour le rendre conditionnel (sur une variable chkPkg non vide), ou même mieux, le mettre dans le bloc if comme ça :

if \[ "" == "$chkPkg" \]; then
  echo  "The Package \[$pkg\] is installing..."
  # ...
else
  echo "The Package \[$pkg\] is already installed."
fi

BTW. Vous devez faire correspondre les variables dans les scripts shell avec un simple =, et non avec ==. Ce dernier n'est pas conforme à posix et ne fonctionnera pas dans certains shells unix autres que bash. De telles choses sont appelées "bashismes", évitez-les si cela ne vous dérange pas trop.

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