======Enchainement de commande====== |cmd >fichier | redirige la sortie standard vers un fichier (ecrasement du fichier)| |cmd 2>fichier | redirige la sortie des erreurs vers un fichier| |cmd 2>&1 | redirige la sortie d'erreur dans la sortie standard (meme sortie au final)| |cmd 2>&2 | redirige vers lui même (super utile)| |cmd 2>/dev/null | redirige vers rien (pas de sortie en quelquesorte)| |cmd 2>&- | pas de sortie (fermeture du descripteur de fichier)| |cmd &>fichier| redirige les sorties standard et d'erreurs vers un fichier, equivalent à “cmd >fichier 2>&1”| |cmd >fichier| ecrit la sortie standard a la fin du fichier| |cmd << delimiteur | c’est l’utilisateur qui tape sur plusieurs lignes ce qu’il faut. Le delimiteur permet de terminer le message.| |cmd <>fichier | read and write du fichier (humm)| |cmd & | mode asynchrone (cmd execute en arrière plan)| |cmd1 | cmd2 | passe en argument à cmd2 la sortie std de cmd1| |cmd1 && cmd2 | si le code de retour de cmd1 ($?) est de zero, alors execute cmd2| |cmd1 || cmd2 | si le code de retour de cmd2 ($?) est different de zero, alors execute cmd2| |! cmd | renvoie la negation du code de retour (si cmd renvoie 1, alors $? sera egale a 0)| |$(cmd) | recupere la sortie de cmd, ex : echo $(who –T)| ======Variables et Boucles====== =====Variable===== * au lancement du script il est fait un set sur ses arguments, il se retrouve accessible avec $1 .. $n * read var : demandes la valeur de la variable a l'utilisateur * on peut ecrire echo "${a}1" pour avoir en sortie la valeur de a suivi de 1. Variables utiles: |$IFS | caractere de separation des mots (utile pour set)| |$REPLY | valeur retourne par read si il est execute sans argument| |$? | valeur du code de retour de la derniere commande| |$0 | nom du programme shell (du sript)| * set $var1 $var2 : permet de splitter ses arguments suivant $IFS et de d'assigner les variables $# et $1 .. $n. Ceci changera la valeur precedente de $1 .. $n. |$# | nombre de parametres| |$1 $2 ... | valeur du parametre 1, 2 ,...| ex: set cool nul chiant echo $2 nul =====boucles===== Il s'agit ici d'une syntaxe sh, elle s'applique aussi a tout les shell compatible (bash, zsh, etc) ====case==== Syntaxe : case [var] in expgenerique1 )cmd; cmd2;; expgenerique2 )cmd esac ex : case $1 in [[:lower:]]*)echo minuscule;; *)echo n \' importe quoi esac ====while==== syntaxe1 : #tant que expbool renvoie 0 while expbool do cmd done syntaxe2 : #lit toutes les lignes envoyées par cmd cmd | while read var1 var2 ... do #traitement var1 var2 ... done syntaxe3 : #lit toutes les lignes du fichier while read var1 var2 ... do #traitement var1 var2 ... done < fichier ex : while who|grep sanchis >/dev/null do echo sanchis est toujours echo connecte done ====FOR==== Syntaxe1 : #pour tous les param de position #(set) For i Do Suite_cmd; #depend de i Done syntaxe2 : #ex: liste_nom=$tmp for i in liste_nom; do suite_cmd; done Exemple : Tmp="abc vbn bvb" Set $tmp For i Do Echo $i; done sortie: abc vbn bvb =======Chaine de caractere======= ====Base==== Pour la protection des caracteres '(' '*' '#' '$' '>' ')' 3 possibilites : * \ protege le caractere qui suit * " edfdffd " protege tous sauf '\' et '"' * 'ereerer' protege tous sauf ''', aucune interpretation * largeur d'une chaine ${#param} ex : echo ${#PWD} #nombre de char de $PWD ====Sous-chaine==== ceci s'applique a bash et certainement au shell compatible. * Suppression de la plus courte sous-chaine a gauche ${param#modele} #param=var sans le dollars ex echo ${PWD#*/} PWD=/home/bob Sortie : home/bob * Suppression de la plus longue sous-chaine a gauche ${param##modele} #param=var sans le dollars ex echo ${PWD##*/} PWD=/home/bob Sortie : bob * Suppression de la plus courte sous-chaine a droite ${param%modele} #param=var sans le dollars ex echo ${PWD%/*} PWD=/home/bob Sortie : /home * Suppression de la plus longue sous-chaine a droite ${param%%modele} #param=var sans le dollars ex echo ${PWD%%/*} PWD=/home/bob Sortie : "" ======Expressions Rationnelles====== Attention toujours mettre les expressions regulieres (regexp) entre simple quotte. ====Mono caractere==== * a : un caractere * . : n'importe quel caractere * [] : 1 caractere parmi un groupe ou intervalle ([a-z], [:alpha:], [abc]) * ^ : mise en correspondance au debut de la chaine (^a match abc, mais pas bac) * $ : mise en correspondance de la fin de la chaine * [^] : négation du groupe ====Multi caractere==== * c1c2 : deux char * e* : nombre quelquonque de l'expression rationnel e * e+ : 1 ou plus * .* : n'importe quel suite de char ====expr==== expr permet de "matcher" des regexp. * position d'une sous-chaine: expr chaine : expr_rationnelles Ex : expr "chaine" : a #retourne 0 expr " chaine " : .*a #retourne 3 * extrait une partie d'une chaine (celle entre parenthese): expr chaine : \(exp_rat\) #renvoie la chaine resultat Zx : expr "chaine" : "c\(.*\)" #retourne haine ======Termcaps, ou la couleur dans le shell====== ====exemple==== dans une console tapper: echo -e "\033[0;33;43mWhow CTAF you're a fuckin bastard" couleur par default (reset): echo -e "\033[0m" seulement le foreground: echo -e "\033[{attribut};{foreground}m" ====Syntaxe==== echo [{attribut};{foreground};{background}m ces valeurs peuvent changer d'un shell a un autres, voici les valeurs courantes: ^ {attribut} ^ signification ^ | 0 | reset, repasse en mode normal (police par default)| | 1 | Bright, souvent equivalent a gras | | 2 | Dim | | 3 | | | 4 | Underline, souligné | | 5 | Blink | | 6 | | | 7 | Reverse, couleurs inversés | | 8 | Hidden | ^ {foreground} ^ {background} ^ signification ^ |30 | 40 | Black| |31 | 41 | Red| |32 | 42 | Green| |33 | 43 | Yellow| |34 | 44 | Blue| |35 | 45 | Magenta| |36 | 46 | Cyan| |37 | 47 | White|