J'ai piraté ensemble ce script bash qui teste si l'utilisateur a des privilèges de superutilisateur et s'il ne les demande pas. En fin de compte, j'essaie d'inverser la deuxième instruction "si" afin de pouvoir supprimer les deux lignes suivantes (l'écho "mot de passe ok" et le reste sur la ligne suivante)
# Root user only
if [[ "$EUID" != 0 ]]; then
Sudo -k # make sure to ask for password on next Sudo
if Sudo true; then
echo "Password ok"
else
echo "Aborting script"
exit 1
fi
fi
echo "do my ops"
Le but de "vrai" sur la quatrième ligne est-il simplement une déclaration nulle?
Je dois inverser le test sur la quatrième ligne, comment faire? Voici ce que j'ai essayé:
if Sudo false; then
if Sudo true == false; then
if [!(Sudo true)]; then
true
en bash n'est pas un mot-clé, c'est un programme qui se ferme instantanément avec un code de sortie réussi. De même, false
est un programme qui se termine avec un code de sortie infructueux.
Vous pouvez essayer cela en exécutant les deux programmes à partir de votre terminal, puis en lisant la variable $?
, Qui contient le code de sortie du dernier programme;
true
echo $? # 0
false
echo $? #1
if Sudo true
N'est pas équivalent à if Sudo == true
. if Sudo true
Exécute le programme true
en utilisant Sudo
et vérifie le code de sortie.
Donc:
if Sudo false; then
Exécute le programme false
en tant que Sudo. Le retour sera toujours faux.
if Sudo true == false
Exécutera le programme true
avec les arguments ==
Et false
en utilisant Sudo
. Ce n'est évidemment pas ce que vous vouliez.
if [!(Sudo true)]
n'est pas une syntaxe valide.
Ce que vous cherchez probablement
if ! Sudo true;
J'ai l'impression que la réponse acceptée n'a pas réellement répondu à votre question?
Le but de faire ceci est de vérifier que vous pouvez réellement Sudo
.
Comment cette vérification est effectuée via le programme true
comme expliqué dans la réponse acceptée.
Comme je le vois dans ce script. Il s'agit juste de vérifier si Sudo est activé, c'est tout.
true renvoie juste true.
Donc, dans ce cas, s'ils doivent exécuter une commande avec Sudo, il vérifie d'abord au démarrage, en ne demandant le mot de passe qu'une seule fois.
La condition fonctionne comme ceci: si Sudo exécute correctement la vraie commande, elle retournera vrai pour la condition if, alors Sudo est activé et l'utilisateur a tapé le mot de passe correctement, sinon vous avez mal tapé le mot de passe ou Sudo n'est pas activé, le script ne doit pas continuer.
Les autres commandes n'ont pas besoin de demander le mot de passe Sudo, car vos authentifications sont réussies la première fois (mais cela dépend de la configuration Sudo, donc ces scripts dépendent beaucoup de la configuration de l'environnement)
Le "mot de passe d'écho ok" le démontre également. le script Shell ne demandera plus le mot de passe.