======BASH:lecture expliquée des scripts du système====== * Objet : comprendre l'organisation par défaut de son sytème ; approfondir man bash * Niveau requis : {{tag>avisé}} * Commentaires : //Contexte d'utilisation du sujet du tuto. // FIXME * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) =====Les scripts de ~/.bashrc===== # If not running interactively, don't do anything case $- in *i*) ;; # shell interactif si l'option est présente *) return;; # shell non interactif dans tous autres cas esac > Script qui teste la présence de l'option -i ====Explication==== ===Rappel sur la structure "case/esac"=== * Syntaxe : case mot in [ modèle [ | modèle ] ... ) suite_de_commandes ;; ] ... esac -> Le shell évalue la valeur de //**mot**// puis compare séquentiellement cette valeur à chaque modèle.\\ -> Dès qu'un //**modèle**// correspond à la valeur de //**mot**//, la //**suite_de_commandes**// associée est exécutée, terminant l'exécution de la commande interne composée case.\\ -> //**suite_de_commandes**// doit se terminer par deux caractères point-virgule collés, de manière à ce qu’il n’y ait pas d’ambiguïté avec l’enchaînement séquentiel de commandes cmd1 ; cmd2\\ -> Les mots //**case**// et //**esac**// sont des mots réservés (( ! case do done elif else esac fi for function if in select then until while { } time [[ ]])). ===Le mot "$-" et la condition "*i*" === * **$-** : options fournies au shell par set * **option -i** : Si l'option -i est présente, l'interpréteur est **interactif**.\\ Un shell est interactif si son entrée standard et sa sortie standard sont toutes deux connectées à un terminal (déterminé par la fonction isatty(3)), ou__ s'il est invoqué avec l'option -i__.\\ Le paramètre PS1 est positionné, et le paramètre $- contient la lettre i si bash est interactif, ce qui permet à un script ou à un fichier de démarrage de vérifier l'état du shell.\\ Un shell interactif lit les commandes à partir de l'entrée utilisateur sur un terminal tty. Entre autres choses, un tel script lit les fichiers de démarrage lors de l'activation, affiche une invite et active un contrôle de job par défaut. L'utilisateur peut interagir avec le shell.\\ Ainsi il ne s'agit pas d'un script qui n'est jamais interactif. Un shell est dit **//de login//** si le premier caractère de son argument numéro zéro est un ''-'', ou s'il est invoqué avec l'option ''-login''. Un shell est **interactif** si __son entrée standard et sa sortie standard sont toutes deux connectées à un terminal__ (déterminé par la fonction [[http://jp.barralis.com/linux-man/man3/isatty.3.php|isatty]](3)),\\ ou s'il est **invoqué avec l'option -i**.\\ Le paramètre **''PS1''** est positionné, et le paramètre ''$-'' contient la lettre i si bash est **interactif**, ce qui permet à un script ou à un fichier de démarrage de vérifier l'état du shell.~/.bashrc((PS1 : La valeur de ce paramètre est développée puis utilisée comme symbole d'accueil principal (voir le paragraphe SYMBOLE D'ACCUEIL ci-dessous). La valeur par défaut est ''\s-\v\$ ''.)) Quand un shell interactif démarre **sans être un shell de login**, bash lit et exécute les commandes se trouvant dans **~/.bashrc** s'il existe.\\ Quand un shell interactif démarre sans être un shell de login, bash lit et exécute les commandes se trouvant dans ~/.bashrc s'il existe * **'' * ''** : Tous les mots sauf le zéro-ième.\\ C'est un synonyme pour `1-$' (c'est-à-dire du premier au dernière argument inclu).\\ Même s'il n'y a qu'un mot, **'' * ''** ne déclenche pas d'erreur, simplement la chaîne vide est renvoyée. * **''x*''** : Abréviation de **''x-$''** (c'est-à-dire de l'argument x jusqu'au dernier inclus). * **''return [n]''** : La fonction shell en cours d'exécution se termine en renvoyant la valeur ''n''.\\ Si ''n'' est omis, la valeur renvoyée est celle de la dernière commande exécutée dans le corps de la fonction.\\ Si cette commande est exécutée en dehors d'une fonction, mais durant l'exécution d'un script avec la commande **''.''** (source) ce script s'arrête, et la valeur renvoyée est n ou celle de la dernière commande exécutée.\\ __Si elle est utilisée en dehors d'une fonction ou d'un script exécuté par **''.''**, le code retour est Faux.__ ===Le fichier ~/bashrc n'est pas un script=== ls -la /home/hypathie/.bashrc -rw-r--r-- 1 hypathie hypathie 3557 oct. 23 15:59 /home/hypathie/.bashrc > Il n'y a pas les droits d'exécution. ===== Installation ===== ===== Utilisation =====