Memo Bash

De Avided.info
Aller à : navigation, rechercher


Les Variables, leurs valeurs et protection

Variable=«valeur»    Déclaration de d'une variable
${variable}        Appel de la valeur d'une variable
export varible => permet de (porter) rendre disponible la variable dans des sous-shell. Si la variable n'est pas exporté, elle ne pourra être utiliser dans un module ou dans un sous-script.
Set -u            Interdit l'appel du contenu  des variables inexistantes.
. @ -             Caractères interdit dans le nom d'une variable.
eval "permet de forcer l'evaluation des variables avant toute autre action"
let => permet d'indiquer ou de forcer une operation arithmetique a effectuer.

Variable spécial


$@ : vaut tous les paramétres mis en option a l'execution du script

$@
Exemple : script.sh para1 para2
dans ce cas $@ vaut "para1 para2"
$@

$#  nombre d'argument  mise en parametre au script

permet de recuperer chaque parametre dans l'ordre indiquer
ex :
script.sh -c opt fic

$1 vaux "-c" , $2 vaux "opt", $3 vaux "fic"

$1, $2, $3, etc..

Nombre de paramétrés indiquer a l'exécution d'un script.
exemple :
script.sh -c para1 para2
$# vaut "3"

$? code retour.

Si la derniere commande c'est bien passé cette variable vaux .
i elle vaux une autre valeur c'est que la dernière commande ne c'est pas fini correctement.
$?
exemple :
ls /fichier

[[ $? -ne 0 ]] && echo "Erreur de la comamnde ls /fichier"

$$ : indique le pid pere de la commande lancé.

Interessant pour récuperer le pid du script puisque c'est le PPID des commandes lancé depuis un script est le PID du script.
$$

$! : Indique le pid du dernier processus mis en tache de fond.

# Vaux le nom du script avec le chemin indiqué l'ours de sont exécution. N'indique pas les paramètres.
exemple :
./script.sh para1 para2

$0 vaut "./script.sh"
exemple :
/chemin/du/script.sh para1 para2

dans ce cas $0 vaux "/chemin/du/script.sh"

$0

#### Je ne sait pas encore
$-

Extraction de sous chaine et recherche de motif dans le contenue d'une variable

${variable:5}    Les 5 premiers caractères sont extrait de la valeur originale de la variable

${variable:5:2}    Seul le 5ème et 6èm caractère du contenue de la variable sont appelé

${variable#motif}    Si le motif correspond  au préfixe du contenue de la variable il en est supprimé.

${variable#*t}        Si la valeur contient un « t » le préfixe est supprimé jusqu'au « t » compris.

${variable#*[rtu]}    Si la valeur contient un des caractère r, t ou u le préfixe est supprimé jusqu'au 1er caractère correspondant rencontré.

${variable#*}    Suppression de la plus petit chaine quelconque, en l'occurrence la chaine vide, donc pas de suppression de préfixe.

Les test (test, if, [])</div>
le « ! » indique le contraire.
test -d « $variable »    Test si le répertoire existe.
[-e “$variable”]    Vraix si le fichier existe
[-r « $variable »]    Vraix si le fichier existe et est en lecture
[-w « $variable »]    Vraix si le fichier existe et est en écriture.
[-x « $variable »]    Vraix si le fichier existe et est exécutable

################ A RANGER
set =>permet de charger des options permettant de configurer le comportement de bash.
env => affiche les variables de l'environement courant fichier et répertoire protection l'option -l de ls permet la visualisation des droits sur le fichier
ls -l "nom de fichier avec espace" ls -l nom\ de\ fichier\ avec\ espace

globalisation

ls *.mp3 => tous les fichier finissant par .mp3" ls ??e => tous les fichiers n'ayant que 3 caractere et finissant par e ls [a-z]* => tous les fichier commancant par une lettre ls [^a-z]* => tous les fichier ne commançant pas par une lettre

Boucle

FOR

for i in `cat fichier`

do

echo "$i"

done

 WHILE

cat fichier | while read ligne

do

echo "$ligne"

done

Astuces

Créer un fichier et son contenue

Methode 1

# Le fichier/chemin/file est créer.
# tous ce qui est ecrit en dessous sera le contenue du fichier
# jusqu'à' ce que le FLAG indiqué à la fin de la 1er ligne ( ici EOF ) soit indiqué

cat > /chemin/files<<EOF
$VARIABLE

.....
.....
EOF

Methode 2


Le contenue de la variable tutu sera dans /chemin/fichier
echo $tutu > /chemin/fichier
ici ont ajoute une ligne dans /chemin/fichier
echo "J'ajoute du texte" >>  /chemin/fichier

Faire une pause

# le script fait une pause de 2 secondes
sleep 2

Attendre la fin d'un traitement

wait => attend la find de tous les jobs
wait $pid => attend un changement d'état du PID indiqué.

Fonction

création

ma_fonction() {

code

}

appel de fonction

ma_fonction parametre1 parametre

Creation de variable depuis une autre variable. (non dynamique)

VAR=tutu
export $VAR=toto
eval "echo \$$VAR"