web-dev-qa-db-fra.com

A quoi sert "vrai" dans bash "si Sudo est vrai; alors"

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
20
Matt Parkins

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;
38
JShorthouse

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.

21
user541686

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.