Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| 04-linux:20-bash:10-scripting [2016/11/09 10:46] – Roge | 04-linux:20-bash:10-scripting [2019/09/14 00:55] (Version actuelle) – [Array] Roge | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Scripting ====== | ||
| + | ===== Parametres ===== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | ^ Variables spéciales | ||
| + | ^ $0 |Contient le nom du script tel qu'il a été invoqué| | ||
| + | ^ $* |L' | ||
| + | ^ $@ |L' | ||
| + | ^ $# |Le nombre de paramètres passés au script| | ||
| + | ^ $? |Le code retour de la dernière commande| | ||
| + | ^ $$ |Le PID su shell qui exécute le script| | ||
| + | ^ $! |Le PID du dernier processus lancé en arrière-plan| | ||
| + | |||
| + | Il est possible d' | ||
| + | |||
| + | '' | ||
| + | |||
| + | initialisera automatiquement les paramètres positionnels " | ||
| + | |||
| + | Les paramètres "#,* et @" sont mis à jours en conséquence. | ||
| + | |||
| + | < | ||
| + | $ set 1 2 voila 3 | ||
| + | $ echo $* | ||
| + | 1 2 voila 3 | ||
| + | $ set a b | ||
| + | $ echo $* | ||
| + | a b | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Quoting ===== | ||
| + | |||
| + | ==== single quotes ' ... ' ==== | ||
| + | La quote préserve tout le contenu. Interdit de mette une quote même avec " | ||
| + | |||
| + | <code bash> | ||
| + | $ echo -e '$var = $* ' | ||
| + | $var = $* | ||
| + | </ | ||
| + | |||
| + | ==== double quotes " ... " ==== | ||
| + | |||
| + | les doubles quotes " ... " préservent tout le contenu à l' | ||
| + | |||
| + | ==== backquotes ` ... ` ==== | ||
| + | |||
| + | |||
| + | '' | ||
| + | |||
| + | ==== Déréférencement ==== | ||
| + | //"If the first character of parameter is an exclamation point (!), a level of variable indirection is introduced. Bash uses the value of the variable formed from the rest of parameter as the name of the variable; this variable is then expanded and that value is used in the rest of the substitution, | ||
| + | < | ||
| + | $ a=letter | ||
| + | $ letter=z | ||
| + | $ echo $a | ||
| + | letter | ||
| + | $ echo ${!a} | ||
| + | z | ||
| + | </ | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | |||
| + | ===== Testing ===== | ||
| + | |||
| + | ==== Opérateur double parenthèses (( ... )) ==== | ||
| + | |||
| + | The %%(( ... ))%% construct permits arithmetic **expansion and evaluation**. In its simplest form, %%a=$(( 5 + 3 ))%% | ||
| + | |||
| + | < | ||
| + | $ echo $((5+6)) | ||
| + | 11 | ||
| + | |||
| + | $ a=10 | ||
| + | $ (( t = a< | ||
| + | $ echo $t | ||
| + | 7 | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Opérateur double crochets [[ ... ]] ==== | ||
| + | |||
| + | L' | ||
| + | |||
| + | |||
| + | [[http:// | ||
| + | |||
| + | ==== Integer comparison ==== | ||
| + | |||
| + | Opérateurs autorisés entre [ ] : -eq, -ne, -gt, -ge, -lt, -le | ||
| + | |||
| + | Opérateurs autorisés entre %%(( )) : <, <=, >, >=%% | ||
| + | |||
| + | <code bash> | ||
| + | $ a=3 | ||
| + | $ b=4 | ||
| + | $ [ $a -lt $b ] && echo true | ||
| + | true | ||
| + | $ [ $a -gt $b ] && echo true | ||
| + | |||
| + | $[ $a -eq $b ] && echo true | ||
| + | |||
| + | $ [ $a -ne $b ] && echo true | ||
| + | true | ||
| + | $ (( $a < $b )) && echo true | ||
| + | true | ||
| + | $ (( $a > $b )) && echo true | ||
| + | </ | ||
| + | |||
| + | Test si une variable est un entier | ||
| + | |||
| + | <code bash> | ||
| + | $ v=toto | ||
| + | $ [[ $v = +([0-9]) ]] && echo $v entier || echo $v pas entier | ||
| + | toto pas entier | ||
| + | $ v=3 | ||
| + | $ [[ $v = +([0-9]) ]] && echo $v entier || echo $v pas entier | ||
| + | 3 entier | ||
| + | </ | ||
| + | ==== String comparison ==== | ||
| + | |||
| + | Opérateurs autorisés entre [] : =, ==, !=, \>, \< | ||
| + | |||
| + | Opérateurs autorisés entre %%[[]] : <, >, -z, -n%% | ||
| + | |||
| + | <code bash> | ||
| + | $ c='' | ||
| + | $ [[ -n $c ]] && echo c is not null | ||
| + | $ [[ -z $c ]] && echo c is null | ||
| + | c is null | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | The == comparison operator behaves differently within a double-brackets test than within single brackets. | ||
| + | |||
| + | %%[[ $a == z* ]]%% # True if $a starts with an " | ||
| + | |||
| + | %%[[ $a == " | ||
| + | |||
| + | [ $a == z* ] # File globbing and word splitting take place. | ||
| + | |||
| + | [ " | ||
| + | </ | ||
| + | |||
| + | |||
| + | Attention : | ||
| + | |||
| + | * " | ||
| + | * Note that the "<" | ||
| + | |||
| + | ===== String manipulation ===== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | [[http:// | ||
| + | ==== String length ==== | ||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code bash> | ||
| + | $ str=" | ||
| + | $ echo ${#str} | ||
| + | 8 | ||
| + | $ echo $(expr length $str) | ||
| + | 8 | ||
| + | </ | ||
| + | |||
| + | ==== Length of matching substring at beginning of string ==== | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | // | ||
| + | |||
| + | <code bash> | ||
| + | $ str=" | ||
| + | $ echo `expr match " | ||
| + | 4 | ||
| + | $ echo `expr " | ||
| + | 0 | ||
| + | $ echo `expr " | ||
| + | 4 | ||
| + | </ | ||
| + | |||
| + | ==== Index ==== | ||
| + | '' | ||
| + | <code bash> | ||
| + | $ str=" | ||
| + | $ echo `expr index " | ||
| + | 4 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== String extraction ==== | ||
| + | '' | ||
| + | <code bash> | ||
| + | $ str=" | ||
| + | # Index from beginning | ||
| + | $ echo ${str:4} | ||
| + | efGH | ||
| + | $ echo ${str:4:2} | ||
| + | ef | ||
| + | # index from end | ||
| + | $ echo ${str: | ||
| + | abCDefGH | ||
| + | $ echo ${str:(-4)} | ||
| + | efGH | ||
| + | $ echo ${str: -4} | ||
| + | efGH | ||
| + | $ echo ${str: | ||
| + | efG | ||
| + | </ | ||
| + | |||
| + | Extraction depuis le début avec une regexp : | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code bash> | ||
| + | $ str=" | ||
| + | $ echo `expr " | ||
| + | abCDef | ||
| + | </ | ||
| + | |||
| + | |||
| + | Extraction depuis la fin avec une regexp : | ||
| + | |||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code bash> | ||
| + | $ str=" | ||
| + | echo `expr " | ||
| + | fGH | ||
| + | </ | ||
| + | ==== Remplacement de pattern ==== | ||
| + | |||
| + | On peut remplacer un pattern une ou plusieurs fois grâce aux ''/'' | ||
| + | |||
| + | <code bash> | ||
| + | $ echo ${var} | ||
| + | / | ||
| + | $ echo ${var/ | ||
| + | / | ||
| + | $ echo ${var// | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== Suppression de pattern ==== | ||
| + | |||
| + | See [[http:// | ||
| + | |||
| + | Les caractères spéciaux ''#'' | ||
| + | * ''#'' | ||
| + | * ''##'' | ||
| + | * '' | ||
| + | * ''< | ||
| + | |||
| + | Exemple : | ||
| + | |||
| + | <code bash> | ||
| + | $ echo $str | ||
| + | aB-Ba--AAbb | ||
| + | # Supprime du début de la chaîne jusqu' | ||
| + | $ echo ${str#*-} | ||
| + | Ba--AAbb | ||
| + | # Supprime du début de la chaîne jusqu' | ||
| + | $ echo ${str##*-} | ||
| + | AAbb | ||
| + | # Supprime depuis la fin de la chaîne jusqu' | ||
| + | $ echo ${str%-*} | ||
| + | aB-Ba- | ||
| + | # Supprime depuis la fin de la chaîne jusqu' | ||
| + | $ echo ${str% %-*} *** Pas d' | ||
| + | aB | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Formatting ===== | ||
| + | |||
| + | ==== Formater un nombre avec séparateur de milliers ==== | ||
| + | |||
| + | <note tip> | ||
| + | |||
| + | |||
| + | Avec SED : | ||
| + | <code bash> | ||
| + | $ num=4568 | ||
| + | $ echo $num | sed ': | ||
| + | 4,568 | ||
| + | $ echo $num | sed ': | ||
| + | 4 568 | ||
| + | |||
| + | </ | ||
| + | |||
| + | En positionnant la locale : | ||
| + | < | ||
| + | $ export LC_NUMERIC=" | ||
| + | $ printf " | ||
| + | 12 345 678 | ||
| + | </ | ||
| + | <note warning> | ||
| + | |||
| + | Variante : | ||
| + | <code bash> | ||
| + | $ LC_NUMERIC=en_US printf " | ||
| + | 123,456,789 | ||
| + | </ | ||
| + | |||
| + | ==== Formater une date ==== | ||
| + | |||
| + | <code bash> | ||
| + | $ date +%F-%T | ||
| + | 2014-09-30-11: | ||
| + | date +%Y\/%m\/%d | ||
| + | 2014/09/30 | ||
| + | $ date +%Y\-%m\-%d\-%Hh%Mmn%S | ||
| + | 2014-10-01-11h26mn53 | ||
| + | $ date +%A\ %d\ %B\ %Y | ||
| + | mardi 30 septembre 2014 | ||
| + | </ | ||
| + | |||
| + | ==== Formater une durée en hh:mm:ss ==== | ||
| + | |||
| + | <code bash> | ||
| + | $ date -u -d @200 +%H:%M:%S | ||
| + | 00:03:20 | ||
| + | </ | ||
| + | |||
| + | ===== Try - Catch ===== | ||
| + | |||
| + | Pas de "Try catch" en Bash, mais des solutions ... | ||
| + | |||
| + | <code bash> | ||
| + | { # this is my bash try block | ||
| + | |||
| + | command1 && | ||
| + | #save your output | ||
| + | |||
| + | } || { # this is catch block | ||
| + | # save log for exception | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | if ... | ||
| + | else | ||
| + | fi | ||
| + | </ | ||
| + | |||
| + | ===== Array ===== | ||
| + | |||
| + | <code bash> | ||
| + | # déclarer un tableau | ||
| + | ticketArray=() | ||
| + | ticketArray=(un deux trois) | ||
| + | |||
| + | # Afficher tous les élements du tableau | ||
| + | echo " | ||
| + | |||
| + | # Afficher 1 élément du tableau | ||
| + | echo " | ||
| + | |||
| + | # ajouter 1 élément au tableau | ||
| + | ticketArray+=(item1) | ||
| + | |||
| + | # ajouter plusieurs éléments au tableau | ||
| + | ticketArray+=(item1 item2 item3) | ||
| + | |||
| + | # Supprimer 1 élément du tableau | ||
| + | unset ticketArray(1) | ||
| + | echo ${ticketArray[@]} | ||
| + | |||
| + | # boucler sur le tableau | ||
| + | for item in " | ||
| + | do | ||
| + | echo -e " - $item" | ||
| + | done | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Incrément ===== | ||
| + | |||
| + | <code bash> | ||
| + | $ var=1 | ||
| + | $ var=$((var+1)) ; echo " | ||
| + | var=2 | ||
| + | $ ((var=var+1)) | ||
| + | var=3 | ||
| + | $ ((var+=1)) ; echo " | ||
| + | var=4 | ||
| + | $ ((var++)) ; echo " | ||
| + | var=5 | ||
| + | $ let " | ||
| + | var=6 | ||
| + | $ let " | ||
| + | var=7 | ||
| + | $ let " | ||
| + | var=8 | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | |||
| + | |||
| + | ===== Commandes dans une variable ===== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | <note warning> | ||