Explication des scripts du fichier profile

script
Tags: #<Tag:0x00007f0944e5cd48>

#1

Bonjour,

ayant récemment installer Debian pour avoir un meilleur environnement d’hébergement pour mon serveur, je bute sur un script dans le fichier etc/profile.

Voici le script:

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

Pourriez-vous me dire à quoi correspond les paramètres `id -u` ?

Pourquoi des symboles comme ceux-ci -> ` ?

Est ce que c’est une référence qui permet de récupérer le résultat d’exécution d’un script nommé id en mode -u ?

Seconde question, j’ai vu que les $0 ou 1 ou 2 étaient réservé pour afficher des variables d’instance du shell, comme son pid par exemple

Mais par exemple, dans l’expression “${PS1-}”, si je fait echo “${PS1-}”, je tombe sur une ribambelle de chemin.

Que signifie les brackets {} autour de l’expression ? Et que signifie le - à la fin ?

Je sais que cela fait beaucoup de question, j’essaye de démystifier tout ça.

Merci à vous


#2

Bonjour,

alors:

  • id -u retourne l’identifiant utilisateur (UID). S’il est égal à 0, c’est l’utilisateur root. L’utilisateur principal se voit attribuer l’UID 1000, et les utilisateurs suivants un UID > 1000. Donc le if vérifie si l’utilisateur est root, si c’est le cas il charge les répertoires contenant les binaires “administrateurs” (les trucs en sbin) dans la variable $PATH (qui contient les répertoires des commandes que tu peux appeler).
  • les backticks ` entourent une commande dans un script, par exemple pour récupérer le résultat d’une commande (comme id -u) dans une variable on peut faire: variable=`id -u`. La syntaxe conseillée est plutôt variable=$(id -u) mais bon.
  • $0 est la “base” de la commande que tu appelles, $1 son premier argument, $2 le 2e, etc. Par exemple dans un script shell qui contient une indication sur l’utilisation du script, on peut écrire “Utilisation: $0 [options]”. $# est le nombre d’arguments, et $? le code retour. Par exemple dans un script il est courant de vérifier le nombre d’arguments donnés dans la commande en faisant un if sur la valeur de $# et et si c’est pas bon on affiche le fameux “Utilisation: $0 [options] paramètres attendus, etc.”
  • les variables $PS1, $PS2 etc sont les variables qui définissent l’apparence de ton prompt shell (le truc du style “sputnik@debian:~$”)
  • les accolades permettent “d’entourer” une variable, par exemple si j’ai une variable qui s’appelle $TOTO et que je veux afficher son contenu + une chaîne de caractères, je vais faire: echo ${TOTO}chaine parce que si j’écris echo $TOTOchaine, bash ne va pas comprendre car je n’ai aucune variable qui s’appelle $TOTOchaine. Mais surtout, avec les accolades on peut faire de l’expansion de paramètres: http://wiki.bash-hackers.org/syntax/pe

Par contre le - à la fin je ne sais pas…


#3

Merci pour cette réponse très complète :slight_smile:


#4

Je suis allé regarder sur StackOverflow, en fait ${VAR-} c’est la même chose que ${VAR:-}, ça sert à affecter une valeur par défaut (en l’occurrence: rien) si la variable n’est pas déclarée (en plus ils le disent dans le lien cité ci-dessus). La différence est que sans le : il y aura affectation d’une valeur par défaut seulement si la variable n’est pas déclarée (et pas si elle est vide, ce qui revient au même dans ce cas).

sputnik@debian:~$ echo ${TOTO-} # $TOTO n'est pas déclarée

sputnik@debian:~$ echo ${TOTO-bonjour}
bonjour
sputnik@debian:~$ TOTO=""
sputnik@debian:~$ echo ${TOTO-bonjour} # $TOTO est déclarée à la ligne au-dessus

sputnik@debian:~$ echo ${TOTO:-bonjour}
bonjour
sputnik@debian:~$ 


#5

id = 0, c’est l’administrateur, le propriétaire “root”

Il peut lancer directement des commandes de /usr/sbin, contrairement aux autres utilisateurs.

C’est le sens de cette condition: if [ “id -u” -eq 0 ]


#6

Je me suis permis de déplacer le sujet à la bonne place dans programmation :wink:


#7

Pour avancer:
guide Avancé des Scripts Bash

et pour connaître la version de son interpréteur : bash --version