Extraction de patterns :

${VAR}                      # valeur de VAR
${#VAR}                     # taille de  VAR
${VAR#pattern}              # VAR amputé du pattern mini en prefix
${VAR##pattern}             # VAR amputé du pattern max en prefix
${VAR%pattern}              # VAR amputé du pattern mini en suffix
${VAR%%pattern}             # VAR amputé du pattern max en suffix
${VAR:­-word}                # Affiche word si VAR est nulle ou unset
${VAR:­=word}                # Affiche word si var est nulle ou unset et set assigne word à var
${VAR:­?}                    # Affiche une erreur si VAR est nulle ou unset
${VAR:­+word}                # Affiche word si VAR est différente de nulle et définie
${VAR:­offset}               # Affiche VAR à partir de l'offset
${VAR:­off­set­:le­nght}        # Affiche VAR à partir de l'offset sur lenght de longeur
${!tab[@]}                  # Liste les id du tableau tab
${tab[­#_ID]}                # Affiche la valeur du #_ID de tab
${VAR/­p­a­tt­­ern­­/s­t­ring}       # Substi­tution
${VAR^}                     # Maj du premier caractère
${VAR^^}                    # Maj de tous les caractères
${VAR,}                     # Min du premier caractère
${VAR,,}                    # Min de tous les caractères
${#tab[*]}									# Affiche le nombre d'entrée dans le tableau
$ FILE="/usr/lib64/coreutils/libstdbuf.so"
$ echo ${#FILE}
33

$ echo ${FILE#/*/}
lib64/coreutils/libstdbuf.so

$ echo ${FILE##/*/}
libstdbuf.so

$ echo ${FILE%/*}
/usr/lib64/coreutils

$ echo ${FILE%%/*}


$ echo ${FILE%.so}
/usr/lib64/coreutils/libstdbuf
$ NAMES="barney:ted:lily:robin:marshall"

$ echo ${NAMES#*:}        # remove shortest prefix matching "*:"
ted:lily:robin:marshall

$ echo ${NAMES##*:}       # remove longest prefix matching "*:"
marshall

$ echo ${NAMES%:*}        # remove shortest suffix matching ":*"
barney:ted:lily:robin

$ echo ${NAMES%%:*}       # remove longest suffix matching ":*"
barney

Redirections :

cmd > file                                         # Redirige stdout de cmd dans file
cmd 2> file                                        # Redirige stderr de cmd dans file
cmd &> file                                        # Redirige stdout et sterr de cmd dans file
cmd < file                                         # Envoi le contenu de file dans cmd
cmd 2> /dev/null                                   # Redirige sterr dans un trou noir
cmd > file.out 2> file.err                         # Redirige stdout dans file.out et stderr dans file.err
cmd1 | cmd2                                        # Redire­ction stdout de cmd1 dans stdin de cmd2. stderr n'est pas transmit dans les |
cmd1 | cmd2 | cmd3 | cmd4; echo ${PIPE­STA­TUS[@]}   # Suite de redire­ctions et récupé­ration des
> file                                             # Vide et/ou crée un fichier
cmd | tee cmd.out | sort | tee sort.out            # Un fichier de sortie par cmd
(cmd1; cmd2) > file                                # stdout des 2 cmd dans file (via sous shell)
{ cmd1; cmd2; } > file                             # stdout des 2 cmd dans file (sans sous shell)
cmd1; cmd2                                         # Execution cmd1 puis cmd2
cmd1 && cmd2                                       # Execution de cmd2 si cmd1 est OK
cmd1 || cmd2                                       # Execution de cmd2 si cmd1 est non OK
#-------------------------------------
>> ajoute au lieu de rediriger.

Pipelines :

Symbole Connexion Détails
;SéquencementLa seconde opération ne commence qu'après la première.
&ParallélismeLa première opération est lancée en arrière-plan et la seconde démarre simultanément; elles n'ont pas d'interactions entre elles.
&&DépendanceLa seconde n'est exécutée que si la première renvoie un code de retour succès.
||AlternativeLa seconde opération n'est exécutée que si la primère retourne un code retour d'échec.

Conditions et tests :

Option Vrai si
-b fichier Le fichier est de type block.
-c fichier Le fichier est de type caractère.
-d repertoire Le répertoire indiqué existe.
-e fichier Le fichier indiqué existe.
-f fichier Le fichier indiqué est un fichier régulier.
-g fichier Le bit Set-GID du fichier indiqué est positionné.
-h fichier
-L fichier
Le fichier indiqué est un lien symbolique.
-G fichier "Le fichier indiqué appartient au même groupe que le GID effectif du processus invoquant la commande test."
-k fichier Le bit Sticky du fichier indiqué est positionné.
-n chaine La longueur de la chaîne indiquée est non nulle.
-N fichier Le fichier a été modifié depuis son dernier accès en lecture.
-O fichier "Le fichier indiqué appartient au même utilisateur que l’UID effectif du processus invoquant la commande test."
-p fichier Le fichier indiqué est un tube nommé (file FIFO).
-r fichier Le fichier indiqué est lisible.
-s fichier La taille du fichier indiqué est non nulle.
-S fichier Le fichier indiqué est une socket.
-t descripteur Le descripteur de fichier correspond à un terminal.
-u fichier Le bit Set-UID du fichier indiqué est positionné.
-w fichier On peut écrire dans le fichier indiqué.
-x fichier Le fichier indiqué est exécutable.
-z chaine La longueur de la chaîne indiquée est nulle.
chaine La chaîne est non nulle.
chaine_1 = chaine_2 Les deux chaînes sont identiques.
chaine_1 != chaine_2 Les deux chaînes sont différentes.
chaine_1 < chaine_2 La première chaîne apparaît avant la seconde, dans un tri lexicographique croissant.
chaine_1 > chaine_2 La première chaîne apparaît après la seconde, dans un tri lexicographique croissant.
valeur_1 -eq valeur_2 Les deux valeurs arithmétiques sont égales.
valeur_1 -ge valeur_2 La première valeur est supérieure ou égale à la seconde.
valeur_1 -gt valeur_2 La première valeur est strictement supérieure à la seconde.
valeur_1 -le valeur_2 La première valeur est inférieure ou égale à la seconde.
valeur_1 -lt valeur_2 La première valeur est strictement inférieure à la seconde.
valeur_1 -ne valeur_2 Les deux valeurs arithmétiques sont différentes.
fichier_1 -ef fichier_2 Le fichier_1 est le même que le fichier_2. Il peut s’agir de deux noms (liens physiques) différents
dans le système de fichiers, correspondant au même contenu sous-jacent. La comparaison concerne
le numéro de périphérique de support et le numéro d’i-noeud.
fichier_1 -nt fichier_2 2 La date de dernière modification du fichier_1 est plus récente que celle du fichier_2.
fichier_1 -ot fichier_2 La date de dernière modification du fichier_1 est plus ancienne que celle du fichier_2.

Exemples divers :

Valeur absolue d'un nombre

 1 $ NUMBER=-33
 2 $ echo $NUMBER
 3 -33
 4 $ echo ${NUMBER#-}
 5 33
 6 $ NUMBER=888
 7 $ echo $NUMBER
 8 888
 9 $ echo ${NUMBER#-}
10 888

Calcul

 1 $ echo $((7+4))
 2 11
 3 
 4 $ echo $((8-2))
 5 6
 6 
 7 $ echo $((4*7))
 8 28
 9 
10 $ echo $((8/2))
11 4
12 
13 !Avec des variables :
14 $ i=4
15 $ echo $(($i/2))
16 2

Incrémentation/Décrémentation

1 $ i=4
2 $ let i++
3 $ echo $i
4 5
5 
6 $ i=5
7 $ let i--
8 $ echo $i
9 4

Récupérer le dernier argument passé à un script :

1 dernierArg=${!#}

Annexes :

Ressource Bash en PDF