Accueil
 

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 envoie le contenu du fichier sur l’entree standard
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 <ESC>[{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

 
scriptsh.txt · Last modified: 2005/10/23 03:41 by ctaf
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki