Ceci est une ancienne révision du document !


~~CLOSETOC~~

Variables, Redirection des flux

Les variables utilisateurs (généralement appelée variables, les autres types étant systématique précisé) sont les variables définies par les utilisateurs manuellement ou au travers d'un script. Elles n'ont d'existence que dans le contexte (script ou session) où elles sont créées. On les distingue alors des variables systèmes ou les variables d'environnement.

  • Les variables sont définie par leur nom est une valeur leur est affecté avec = :

# On définie une variable nommé AGE dont la valeur est 99
AGE=99

  • Les variables définies peuvent alors être appelées grâce à $ :

echo "l'âge est $AGE"
# Retour console
l'âge est 99

  • Dans certains cas, une ambiguïté peut apparaître, bash n'étant pas capable de déterminer le où se termine le nom de la variable. Dans ces cas, on peut utiliser {} pour délimiter le nom de la variable :

# Exemple 1

# On définie une durée
MINUTES=10
# On affiche la durée
echo "Durée : $MINUTESm"
# Retour console
Durée :

# $MINUTESm a été considéré comme une variable par bash et non comme une variable suivie d'un caractère.
# La variable n'ayant pas été définie au préalable, il n'y a eu aucun affichage.

# Exemple 2

# On définie une durée
MINUTES=10
# On affiche la durée
echo "Durée : ${MINUTES}m"
# Retour console
Durée : 10m

# Cette fois-ci, la variable $MINUTE a bien était interprétée.

  • Une variable contient généralement 4 types de valeurs mais ce type n'est pas figé :
    • Nombre : définie par une valeur numérique. La séparation décimale est le ..
    • Commande : définie par $() ou ``. Le contenu entre parenthèses (ou back-quote) est exécuté et le résultat de la commande est stocké dans la variable. Les opérations mathématiques sont elles contenue dans 2 parenthèses.
    • Chaîne de caractère : la valeur est définie par des apostrophes ou des guillemets. Les chaînes entre apostrophes sont figées alors que celles entre guillemets verront les variables ou caractères spéciaux dans leur contenu interprétés.
    • Tout autre entrée est considérée comme une chaîne de caractères.

ENTIER=1
NOMBRE=10.2
COMMANDE1=$(cat /etc/issue)
COMMANDE2=`ls -l /etc/cron.d`
COMMANDE3=$(($ENTIER + 1))
CHAINE1="L'âge est $AGE"
CHAINE2='test'

bash contient un certain nombre de variables prédéfinies ou dont la valeur est gérée par le système.

Variable Explication
$? État de la dernière commande exécutée. Les valeurs possibles sont 0 pour OK, 1 pour avertissement, 2 pour échec critique et 3 pour état inconnu.
$0 Variable contenant le nom du script exécuté.
$1 à $9 Variables contenant respectivement les premiers, seconds, etc jusqu'aux neuvièmes arguments du script exécuté.
$* Variable contenant tous les arguments du script exécuté. Ces derniers sont alors traités comme un seul élément.
$@ Variable contenant tous les arguments du script exécuté. Ces derniers sont alors traités comme une liste d'éléments séparés.
$# Variable contenant la quantité de paramètres indiqués pour le script exécuté.
$- Variable contenant les options du shell.
$$ Variable contenant le PID (Processus IDentification) du shell.
$! Variable contenant le PID de dernier processus exécuté en arrière-plan.
$_ Variable contenant le dernier argument de la commande précédente.

Les variables d'environnement sont des utilisables par tout le système. La commande env permet de les consulter. Pour en créer une ou la modifier, il suffit de la déclarer comme n'importe quelle variable puis d'utiliser la commande export suivie du nom de la variable déclarée.

La redirection de flux est très largement utilisée en bash. Elle consiste a envoyer les sorties standard et/ou d'erreur vers un fichier ou l'entrée standard d'une autre commande. On peut aussi s'en servir pour envoyer les données d'un fichier dans l'entrée standard d'une commande.

Redirecteur Fonction Explication Exemple
> Redirige Envoi la sortie standard de la commande de gauche vers le fichier de droite. Si il n'existe pas, alors ce dernier sera crée. Son contenu est alors remplacé par le flux redirigé.
 ls > file.txt
» Concatène Ajoute le flux de la sortie standard de la commande au contenu déjà existant du fichier.
ls -l >> file.txt
2> Redirige les erreurs Envoi la sortie d'erreur de la commande de gauche vers le fichier de droite. Si il n'existe pas, alors ce dernier sera crée. Son contenu est alors remplacé par le flux redirigé.
 mkdir 2> error.log
Concatène les erreurs Ajoute le flux de la sortie d'erreur de la commande au contenu déjà existant du fichier.
chmod 2>> error.log
> /dev/null Supprime Supprime l'affichage de la sortie standard
ls > /dev/null
2>&1 Redirige erreur vers standard Redirige la sortie d'erreur de la commande vers son entrée standard.
ls -lR > /dev/null 2>&1
< Injecte Injecte le contenu du fichier de droite dans l'entrée standard de la commande de gauche.
cat < file.txt 
« et «- HereDoc Voir chapitre dédié : Boucles & HereDoc
cat << EOF
test
test2
EOF
| Pipe Redirige la sortie standard de la première commande vers l'entrée standard de la seconde.
cat /var/log/syslog | grep 'deny'
|& Connexion Redirige les sorties standard et d'erreur de la première commande vers l'entrée standard de la seconde.

Nicolas THOREZ 2020/03/11 18:06

Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • bash_base_0.1584004302.txt.gz
  • Dernière modification : 2020/03/12 08:11
  • (modification externe)