Shell script tips
Un article de SeRoM - Wiki.
Sommaire |
[modifier] READ
- read sert à initialiser des variable shell:
$ read brol bidulle ceci est du bazard
$ echo $brol ceci $ echo $bidulle est du bazard
[modifier] Test
[modifier] Numerique
- 'test <num1> <eval-flag> <num2>'
note: <num> est soit un nombre, soit un -l <string> qui équivaut à la longeur du string
[modifier] tab of eval-flag
- -eq : equal (=)
- -ne : not equal (!=)
- -lt : less than (<)
- -le : less or equal (<=)
- -gt : greater than (>)
- -ge : greater or equal (>=)
[modifier] Sting
- test -z <$var> : test si la variable n'a pas encore été initialisée(true), ou si la longueur du string = zéro
- test <$var> <eval> <$var> : compare les chaines
[modifier] tab of eval
- = : Vrai si les deux chaines sont identiques
- != : Vrai si les deux chaines ne sont pas identiques
- > : Vrai si la 1ere chaine est plus longue que la 2nd
- < : Vrai si la 2nd chaine est plus longue que la 1ere
[modifier] Fichier
- test <eval-flag> <File>
[modifier] tab of eval-flag
- -G : Existe et appartient au même groupe que l'exécutant
- -L : Existe et est un SoftLink
- -O : Existe et appartient au même utilisateur que l'exécutant
- -S : Existe et est un Socket
- -b : Existe et est un fichier d'un Bloc Device
- -c : Existe et est un fichier d'un char Device
- -d : Est un Dossier
- -e : Existe
- -f : Existe et est un fichier regular
- -g : ...
- -r : Existe et possède les droits de lecture
- -s : Existe et n'est pas un fichier vide
- -u : ...
- -w : Existe et possède les droits d'écriture
- -w : Existe et possède les droits exécution
- -ot : Fichier plus vieux (>< nt)
[modifier] Combinaison logique
- -a/-o &&/|| : Pour combiner deux conditions avec les opérateurs logiques AND ou OR
- ! : Pour la négation
[modifier] Boucles et conditions en Shell
[modifier] IF
if [ -e file] then command-block else command-blok fi
if [ test ] then command-block elif [ test ] then command-block else command-blok fi
[modifier] CASE
case <string> in pattern) command-block ;; pattern) command-block ;; *) command-block-by-default ;; esac
[modifier] FOR
for in <list> do command-block done
[modifier] WHILE
while [ test ] do command-block done
[modifier] Fonction
[modifier] Déclaration
name () { commands;}
[modifier] Appel
name param1 param2 ...
[modifier] Variable
Par défaut, elles sont déclaré de facon global sauf indication contraire:
UneFonction()
{
#déclaration de la variable locale
local var=1
}
#Ici $var n'est plus reconnu
[modifier] Tableaux
[modifier] Initialisations
Plusieurs possibilités:
tab[0]=Brol tab[1]=Bidule tab[2]=Truc tab[3]=Chose
tab=([0]=Brol [1]=Bidule [2]=Truc [3]=Chose)
tab=(Brol Bidule Truc Chose)
[modifier] Attributs spéciaux
* ${nom_tableau[0]} : Donne le premier élément du tableau
* ${nom_tableau[@]} : Donne fait référence à tout les éléments du tableau (utile pour une boucle for. ( for i in "${nom_tableau[@]}" do [...] done )
* ${#nom_tableau[@]} : Donne la longueur du tableau
[modifier] boucler dans un tableau
tab=(Brol Bidule Truc Chose)
for elem in ${tab[@]}
do
echo $elem
done
[modifier] Include
#!/bin/sh . /path/to/MonFichierLib
[modifier] Couleur
Un peu de couleur dans cette console de brute!
Cela fonctionne avec des balises:
- \033<id-couleur>m : Balise pour commençant un couleur
- [<?>;<??>m: ID Couleur
- \033[m : balise de fermeture (reset le couleur initiale)
Ce qui nous donne:
echo -e " Texte normal \033[0;32mTexte en vert\033[m Texte normal"
Un definition de variable peut donc etre pratique:
# Definition des couleurs:
ColorStart="\033"
ColorStop="\033[m"
ColorRed="[0;31m"
ColorLightRed="[1;31m"
ColorGreen="[0;32m"
ColorLightGreen="[1;32m"
ColorYellow="[0;33m"
ColorLightYellow="[1;33m"
ColorBlue="[0;34m"
ColorLightBlue="[1;34m"
ColorPink="[0;35m"
ColorLightPink="[1;35m"
ColorCyan="[0;36m"
ColorLightCyan="[1;36m"
ColorGray="[0;37m"
ColorWhite="[1;37m"
# Exemple d'utilisation
echo -e "{ColorStart}${ColorRed}Texte en Rouge{ColorStop}"
Ou ce que j'ai l'habitude d'utiliser pour mes scripts pour mettre en évidence un status (OK | Error):
# Definition des couleurs:
START_COLOR_OK="\033[0;32m"
START_COLOR_ERROR="\033[0;31m"
STOP_COLOR="\033[m"
OUT_OK="${START_COLOR_OK}Ok!${STOP_COLOR}"
OUT_ERROR="${START_COLOR_ERROR}Error: ${STOP_COLOR}"
# Exemple d'utilisation
commande
RET_CODE=$?
case $RET_CODE in
0)
echo -e "\t\t${OUT_OK}" ;;
1)
echo -e "\t\t${OUT_ERROR}Message d'erreur";;
*)
echo -e "\t\t${OUT_ERROR}Unknown Error!";;
esac

