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:24] – [Formater une date] 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> |