====== Bash : Détail et caractères ====== * Objet : suite de la série de wiki visant à maîtriser bash via les différents caractères spéciaux. * Niveau requis : {{tag>débutant avisé}} * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) * Suivi : * Création par [[user>Hypathie]] le 08/04/2014 * Testé par [[user>Hypathie]] en Avril 2014 * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=140682#p140682| Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) * [[doc:programmation:shells:bash-les-differents-caracteres-speciaux|Vision d'ensemble]] * ;-) * [[doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs lexicographiques]] * [[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique|Opérateurs de comparaison numérique]] * [[doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques|Symboles dans les calculs]] * [[doc:programmation:shells:page-man-bash-v-les-tableaux|Les tableaux]] * [[doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres|Caractères de transformation de paramètres]] * [[doc:programmation:shells:bash-vii-globs-etendus-regex|Bash : Variables, globs étendus, ERb, ERe]] ===== Les caractères spéciaux ===== ==== Les caractères symboliques==== === Rappels === Certains caractères représentent des fichiers (à partir de la ligne de commande ) : ^ caractères ^ significations ^ | '' ~ '' |Le tilde placé en première position représente le répertoire personnel de l'utilisateur courant. | |'' $ '' |Le dollard placé à la fin de l'invite de commande indique le mode user. | |'' # '' |Le dièse placé à la fin de l'invite de commande indique le mode root. | |'' / '' |Le slash sépare les composants d'un seul nom de fichier.| |'' /. '' |Début du nom de fichier caché. | |'' . '' |Représente le répertoire actuel | |''./. '' |Début du nom de fichier caché du répertoire actuel. | |'' .. '' |Représente le répertoire parent au répertoire actuel | | '' ! '' |À partir de la ligne de commande, ''!'' appelle le mécanisme d'historique de Bash, ce mécanisme est désactivé dans les scripts.((Sur les commandes d'historique de bash voir : http://abs.traduc.org/abs-5.0-fr/apj.html)) | === Exemples d'utilisation === Voir : * [[doc:programmation:shell:repertoires#chemin-relatif]] * [[doc:programmation:shell:repertoires]] * [[doc:programmation:shell:illustration-navigation-shell]] * [[doc:systeme:superutilisateur]] * [[doc:programmation:bash:history]] ==== Caractères spéciaux d'échappement (le terminal et dans les scripts)==== Ils permettent que soient interprétés littéralement les métacaractères et les autres caractères spéciaux. ^ caractères ^ significations ^ |'' \ '' |L'antislash échappe les caractères spéciaux et les caractères d'échappement. | |'' " " '' |Les doubles guillemets empêchent l'interprétation de la plupart des caractères spéciaux présents dans une chaîne. | |'' ' ' '' |Les guillemets simples empêchent l'interprétation de tous les caractères spéciaux présents dans la chaîne. Ces guillemets sont plus puissants que "((sur les guillemets simples et doubles voir : http://abs.traduc.org/abs-5.0-fr/ch05.html)) | |'' # '' |Le dièse permet dans un script de faire des commentaires; tout ce qui est après '' # '' ne sera pas exécuté. | |'' " " '', '' ' ' '', '' \ '' |Les doubles guillemets, simples guillemets et antislash échappent le dièse '' # ''. | |'' \ '' |L'antislash échappe le double guillemets '' " ''. | |'' " " '' |Les doubles guillemets n'échappent pas le caractère '' $ ''. | ==== Caractères des variables de substitution prédéfinies ==== === Rappels :=== Voir : [[doc:programmation:shell:variables#utiliser-les-variables-dans-un-script]] ^ caractères ^ significations ^ |'' $# '' | Nombre de paramètres | |''$1 '', '' $2 '', etc | Paramètre 1, du paramètre 2, etc. | |'' $0 '' | Nom du programme | |'' $* '' | Tous les paramètres de position, vus comme un seul mot( doit être entre guillemets). | |'' $@ '' | Chacun de __tous__ les paramètres de position (eq à $1 $2 etc). | |'' $? '' | Fourni le code de retour. | |'' $_ '' | Le dernier argument de la commande dernière commande. Donc $_ retour de la sortie standard (attention avec echo) | | '' $- '' |'' $- '' affiche les options passées au script via ''set'' | |'' $$ '' | PID du processus | |'' $PPID ''| PID du processus parent | |'' $! '' | PID de la dernière commande lancée en arrière plan | >Tout programme (commande, suite de commande, etc,) possède des attributs (nom, paramètres, etc). >Ces attributs sont enregistrés pour chaque programme (commande) dans des variables. >On peut donc afficher chacun de ces attributs en se servant des paramètres spéciaux. === Dans le terminal :=== echo ls -la ~/Documents echo $0 /bin/bash >On a là le nom (= le chemin) du programme qui a exécuté la commande : le shell. ls -la ~/Documents echo $# 0 >Nombre de paramètres ls -la ~/Documents echo $? 0 >état de sortie ls echo $_ ls Remarquez et comparez avec set du paragraphe ci-dessous : touch toto echo $1 >le retour de $1 n'est pas "toto" mais un saut de ligne === Dans des scripts=== Voir : [[doc:programmation:shells:script-bash-variables-arguments-parametres?&#quand-les-valeurs-sont-des-parametres|script bash : variables, arguments, paramètres: Quand les valeurs sont des paramètres]] =====Détails sur le caractère $ ===== * Définitions sur les variables, c'est ici : [[doc:programmation:shell:variables]] * Utilisation dans les scripts, c'est ici : [[doc:programmation:shells:script-bash-variables-arguments-parametres?&#exportation-de-la-valeur-d-une-variable]] ==== $ : appel de la valeur des variables provisoires ==== === $ appel la valeur des variables relatives au shell courant (sans exportation):=== >Terminal ; Console Tout variable déclarée avec affectation de de valeur peut être appelée avec $ au sein du shell : coucou="bonjour" #puis echo $coucou #retour: bonjour === $ appel de valeur de variables relatives au shell courant (après exportation) :=== >Rapport de "filiation" entre un processus père et son processus fils Voir : [[doc:programmation:shells:script-bash-variables-arguments-parametres?&#exportation-de-la-valeur-d-une-variable|exportation de la valeur d'une variable]] ==== $ : appel de la valeur des variables d'environnement prédéfinies :==== >Terminal ; Scripts * À voir : [[doc:programmation:shell:variables#les-variables-d-environnement]] ^ NOM ^ DÉTAIL ^ APPEL VALEUR ^ |HOME |chemin d'accès au répertoire initial de l'utilisateur |$HOME | |USER |contient votre nom de login. |$USER | |LOGNAME |la même chose que USER. |$LOGNAME | |PATH |suite de chemins d'accès aux répertoires des exécutables |$PATH | |SHELL |contient le nom de votre shell. |$SHEL | |ENV |nom du fichier des variables d'environnement |$ENV | |TERM |nom du type de terminal |$TERM | |PS1 |invite principale du shell en mode interpréteur |$PS1 | |PS2 |invite secondaire du shell en mode programmation |$PS2 | |PS3 |la valeur de ce paramètre est utilisé comme entrée de la commande de sélection |$PS3 | |PS4 |la valeur est imprimée avant chaque commande que bash affiche et laisse une trace d'exécution. Le premier caractère de PS4 est répété autant de fois que nécessaire, pour indiquer le niveau d'imbrication. La valeur par défaut est + |$PS4 | |MAIL |chemin d'accès à la boîte aux lettres utilisateur |$MAIL | |MAILCHECK |intervalle en sec au bout duquel le mail est contrôlé |$MAILCHECK | |CDPATH |liste de chemins d'accès pour la commande cd |$CDPATH | |DISPLAY |l'écran sur lequel les programmes X travaillent |$DISPLAY | |PRINTER |pour les commandes d'impression : contient le nom de l'imprimante sur laquelle il faut envoyer vos fichiers |$PRINTER | |EDITOR |utilisée par mutt, forum, et beaucoup d'autres commandes : contient le nom de votre éditeur de texte préféré |$EDITOR | |VISUAL |la même chose qu'EDITOR |$VISUAL | >etc. * Exemple: echo $HOME /home/utilisateur >Le retour affiche la valeur de la variable d'environnement pré-définie USER. >L'étiquette d'une variable d'environnement est en majuscule. >La valeur de cette variable est conservée dans un fichier, on peut donc la modifier de façon durable en modifiant son fichier de configuration, ou de façon provisoire à l'ouverture d'un shell courant à l'aide de la commande export. * À voir : http://abs.traduc.org/abs-5.0-fr/ch09.html#appref === Modifier provisoirement la valeur d'une variable d'environnement=== >Là aussi, on utilise la commande ''export''. * la valeur par défaut de $PATH : echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games * Modification provisoire de ''$PATH'' avec ''export'' : Soit un fichier "essai-path" dans le répertoire de l'utilisateur.\\ Pour modifier provisoirement la valeur de ''$PATH'' on fait : export PATH="$PATH:/chemin-absolu/vers/essai-path" >Après cette commande, si le fichier "essai-path" a pour chemin /home/toto/essai-path, le retour de la commande echo $PATH serait : /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/toto/essai-path >Il suffit de fermer le terminal pour que la valeur pré-définie retrouve sa valeur par défaut. === Modifier durablement la valeur de $PATH=== Pour ce faire, il faut éditer le fichier caché ''~/.bashrc'' pour y ajouter le chemin du fichier qu'on souhaite ajouter. PATH="$PATH:/home/toto/essai-path" >Après avoir ré-initialiser le terminal : echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/toto/essai-path >Lors de l'édition de ''~/.bashrc'', à la place de la ligne mentionnée plus haut, on peut aussi y inscrire celle-ci : PATH=$PATH":$HOME/essai-path" === Autres Fichiers === Voir man bash (tout à la fin) FICHIERS /bin/bash L'exécutable bash /etc/profile Le fichier d'initialisation commun à tout le système, exécuté pour les interpréteurs de commandes de connexion /etc/bash.bashrc Le fichier de démarrage commun à tout le système pour chacun des interpréteurs interactifs /etc/bash.bash.logout Le fichier de nettoyage des interpréteurs de connexion commun à tout le système, exécuté lorsqu'un interpréteur de connexion termine ~/.bash_profile Le fichier d'initialisation personnel exécuté pour les interpré‐ teurs de commandes de connexion ~/.bashrc Le fichier de démarrage personnel, pour chacun des interpréteurs interactifs ~/.bash_logout Le fichier de nettoyage personnel des interpréteurs de commandes de connexion, exécuté lorsqu'un interpréteur de commandes de connexion termine ~/.inputrc Le fichier d'initialisation personnalisée de readline === liens === * Voir aussi modifier le path pour les jeux : [[doc:programmation:shell:path]] * Pour aller plus loin : [[doc:programmation:bash:config?s[]=ps1|Bash, découverte avancée]] 8-) * Trucs et astuces en anglais pour améliorer l'environnement du shell : http://www.caliban.org/bash/index.shtml * Présentation, utilisation et configuration du terminal voir : [[doc:systeme:terminal]] * Variables et scripts : [[doc:programmation:shells:debuter-avec-les-scripts-shell-bash#creation-de-variables-par-l-utilisateur]] =====La suite, c'est ici : ===== [[doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques|Bash : les opérateurs lexicographiques]] =====tuto précédent===== [[doc:programmation:shells:bash-les-differents-caracteres-speciaux|Bash : Vision d'ensemble]]