shell bash
bash
Posted by Jean-Michel Frouin on .Configuration
Le fichier ~/.bashrc est un fichier qui est chargé à chaque exécution d'une session bash.
Il est dépendant de l'utilisateur puisque (par défaut) bash recherche ce fichier dans /home/user.
Ainsi, ce fichier sert à beaucoup de choses :
- Positionner certaines variables globales de bash.
- Configurer le bash en lui-même (configuration du prompt, des couleurs ...)
- Ajout de fonctions au bash (définitions de macros, alias, fonctions)
- Et bien d'autres choses ...
Recharger le .bashrc
Une fois des modifications apportées au fichier ~/.bashrc il convient de le recharger, sans quoi les modifications ne sont pas prises en compte : source ~/.bashrc ou . ~/.bashrc.
Commandes bash
Correction automatique des erreurs de frappe : shopt -s cdspell
Écriturede l'historique à la fin du fichier $HISTFILE : shopt -s histappend
Basculer le bash en mode vi : set -o vi ou ajouter set editing-mode vi dans le fichier /etc/inputrc ou ~/.inputrc
Variables globales
Pour voir le contenu d'une variable globale : echo \$LD_LIBRARY_PATH renverra /usr/local/lib.
Liste des principales variables globales de bash
CDPATH : Liste des répertoires (séparés par : ) dans lesquels cd va rechercher.
DISPLAY : Serveur X géré par ssh.
EDITOR : Editeur par défaut.
UID : L'UID de l'utilsateur courant.
Redirections
Rediriger la sortie d'une commande, vers un fichier (A noter, que le fichier ls.txt, si il existe, sera écrasé.): ls $>$ ls.txt.
Rediriger la sortie d'une commande, à la suite d'un fichier : ls $>>$ ls.txt
Rediriger le flux sortant stdout dans un fichier: ./programme $1>$ result_stdout.log
Rediriger le flux sortant stderr fans un fichier : /programme $2>$ result_stderr.log
Rediriger les flux sortant stderr et stdout dans un fichier (Supporté uniquement à partir de la version 4 de bash.) : ./programme $\&>$ result_stderr.log
Rediriger le flux sortant stderr sur stdout (Et vice-versa $1>\&2$) :./programme $2>\&1$
Exporter une variable depuis un script bash
Dans un fichier test.sh :
#!/bin/bash export CSCOPE_DB=/home/jmfrouin/cscope.out
Scripts
Tous les scripts bash doivent commencer avec le sha-bang : #!/bin/bash
De plus, ils doivent pouvoir être exécutés directement depuis le bash :
chmod u+x script.sh
Variables spéciales
Le bash définit quelques variables ayant une signification bien précise :
$0 : Nom du script.
$i ($i>0$) : Contient le i^eme argument (équivalent de argv en C).
$# : Nombre d'arguments (équivalent de argc en C).
$? : Contient le code de retour de la dernière commande shell.
$@ : "$1" "$2" "$3" ...
$* : Liste de tous les paramètres séparés par un espace.
$$ : PID de l'interpréteur.
$\ : Chemin d'accès absolu.
Variables
Il est possible d'utiliser des variables dans les scripts bash.
Pour définir une variable, on utilise le signe =:
variable=14 variable='Test'
Pour y accéder plus tard, il suffit d'utiliser:
echo ${variable}
Tableaux
Il est possible d'utiliser des tableaux dans les scripts bash.
variable[0]=14 variable[1]='Test'
Pour y accéder plus tard, il suffit d'utiliser:
echo ${variable[0]} echo ${variable[*]}
On remarque qu'il est donc possible de créer des tableaux de variables mixtes (nombres, chaînes de caractères ...).
Chaînes de caractères
Chaîne de caractères sans interprétation : ’.
Chaîne de caractères sans interprétation, sauf de `, \$ et \\ : ".
Pour toutes les fonctions ci dessous, string=abcABC123ABCabc
Longueur
Équivalent de la fonction strlen en C:
echo ${#string} # renverra 15
Sous Chaine
echo ${string:7:3} # 23A
Commandes composées
for nom [ in mot ] ; do liste ; done for (( expr1 ; expr2 ; expr3 )) ; do liste ; done select nom [ in mot ] ; do liste ; done case mot in [ [(] motif [ | motif ] ... ) liste ;; ] ... esac if liste; then liste; [ elif liste; then liste; ] ... [ else liste; ] fi while liste; do liste; done until liste; do liste; done
Tests
test -a fichier ou [ -a fichier ]
-a fichier : Vrai si le fichier existe.
-b fichier : Vrai si le fichier existe et est un fichier spécial bloc.
-c fichier : Vrai si le fichier existe et est un fichier spécial caractère.
-d fichier : Vrai si le fichier existe et est un répertoire.
-e fichier : Vrai si le fichier existe.
-f fichier : Vrai si le fichier existe et est un fichier normal.
-g fichier : Vrai si le fichier existe et a son bit Set-GID de mis.
-h fichier : Vrai si le fichier existe et est un lien symbolique.
-k fichier : Vrai si le fichier existe et a son bit « sticky » de mis.
-p fichier : Vrai si le fichier existe et est un tube nommé (FIFO).
-r fichier : Vrai si le fichier existe et est accessible en lecture.
-s fichier : Vrai si le fichier existe et a une taille strictement positive.
-t fd : Vrai si fd est ouvert sur un terminal.
-u fichier : Vrai si le fichier existe et a son bit Set-UID de mis.
-w fichier : Vrai si le fichier existe et est accessible en écriture.
-x fichier : Vrai si le fichier existe et est exécutable.
-O fichier : Vrai si le fichier existe et appartient à l’UID effectif de l’utilisateur.
-G fichier : Vrai si le fichier existe et appartient au GID effectif du groupe.
-L fichier : Vrai si le fichier existe et est un lien symbolique.
-S fichier : Vrai si le fichier existe et est une « socket ».
-N fichier : Vrai si le fichier existe et a été modifié depuis sa dernière lecture.
fichier_1 -nt fichier_2 : Vrai si le fichier_1 est plus récent que le fichier_2 (selon les dates de dernière modification) ou si fichier_1 existe et non fichier_2.
fichier_1 -ot fichier_2 : Vrai si le fichier_1 est plus vieux que le fichier_2 ou si fichier_2 existe et non pas fichier_1.
fichier_1 -ef fichier_2 : Vrai si le fichier_1 et le fichier_2 se réfèrent au même périphérique et ont les mêmes numéros d’i-n.