====== Linux ====== ===== Variables & opérateurs ===== \\ ==== Déclaration d'une variable ==== $ variable=5 $ echo $variable 5 Exemples : $ nom="Pierre" # Affectation de "Pierre" dans la variable "nom" $ objet="voiture" # Affectation de "voiture" dans la variable "objet" $ coul=bleue # Affectation de "bleu" dans la variable "coul" $ echo 'Il se nomme $nom' # Affichage d'un texte / la variable n'est pas substituée Il se nomme $nom $ echo "Il se nomme $nom" # Affichage d'un texte et d'une variable Il se nomme Pierre $ txt="$nom a une $objet $coul" # Mélange de variables et texte dans une variable $ echo txt texte $ echo $txt # Affichage de la variable "texte" Pierre a une voiture bleue \\ ==== Suppression de variables ==== unset var1 [var2 ?] \\ ==== Typage de variables ==== typeset [-a] [-i] [-r] [-x] var1 [var2 ?] typeset Les shells évolués (Korn Shell, Bourne Again Shell et autres descendants) permettent de restreindre les propriétés des variables et correspondent à une certaine forme de typage « simpliste ». * typeset -a var : la variable sera traitée comme un tableau. * typeset -i var : la variable sera traitée comme un entier et peut être incluse dans des opérations arithmétiques. * typeset -r var : la variable sera mise en « lecture seule » (équivalent de « readonly »). * typeset -x var : la variable sera exportée automatiquement dans les processus fils (équivalent de « export »). \\ ==== Variables prédéfinies ==== Un utilisateur possède lors de sa connexion plusieurs variables automatiquement définies par le système. Certaines sont modifiables, certaines ne le sont pas, mais toutes sont utiles. ^Variable ^Signification ^ |$HOME |Répertoire personnel de l'utilisateur | |$PWD |Répertoire courant (Ksh / Bash) | |$OLDPWD |Répertoire dans lequel on était avant notre dernier changement de répertoire (Ksh / Bash) | |$LOGNAME |Nom de login | |$PATH |Chemins de recherche des commandes | |$CDPATH |Chemins de recherche du répertoire demandé par la commande ''cd'' | |$PS1 |Prompt principal | |$PS2 |Prompt secondaire (indique que la commande n'est pas terminée) | |$PS3 |Prompt utilisé par la commande ''select'' (Ksh / Bash) | |$PS4 |Prompt affiché lors de l'utilisation du mode débogueur ''set -x'' | |$TERM |Type de terminal utilisé | |$REPLY |Chaîne saisie par l'utilisateur si la commande ''read'' a été employée sans argument (Ksh / Bash).\\ Numéro choisi par l'utilisateur dans la commande ''select'' (Ksh / Bash) | |$IFS |Séparateur de champs internes | |$SHELL |Nom du Shell qui sera lancé chaque fois qu'on demandera l'ouverture d'un Shell dans une application interactive (''vi'', ''ftp''...) | |$RANDOM |Nombre aléatoire entre 0 et 32 767 (Ksh / Bash) | |$$ |Numéro du processus courant | |$! |Numéro du dernier processus lancé en arrière-plan | |$? |Statut (état final) de la dernière commande | \\ ==== Variables réservées ==== Certaines variables ont une signification spéciale réservée par le système. Elles sont utilisées lors de la création de scripts : ^$0 |nom du script. Plus précisément, il s'agit du paramètre 0 de la ligne de commande, équivalent de argv[0] | ^$1, $2, ..., $9 |respectivement premier, deuxième, ..., neuvième paramètre de la ligne de commande| ^$* |tous les paramètres vus comme un seul mot| ^$@ |tous les paramètres vus comme des mots séparés : "$@" équivaut à "$1" "$2" ...| ^$# |nombre de paramètres sur la ligne de commande| ^$- |options du shell| ^$? |code de retour de la dernière commande. Vaut généralement 0 si cette commande s'est bien déroulée, et un autre nombre correspondant à un type d'erreur, décrit par la commandeerrno[2].| ^$$ |PID du shell| ^$! |PID du dernier processus lancé en arrière-plan| ^$_ |dernier argument de la commande précédente| \\ ==== Variables d'environnement ==== Une variable d'environnement est une variable accessible par tous les processus fils du shell courant. $ export variable Pour illustrer la différence entre une variable locale et une variable d'environnement, il suffit de créer une variable d'environnement, de lancer un shell fils et d'afficher la variable. $ ma_variable=toto $ export ma_variable $ bash $ echo $ma_variable toto $ exit Dans ce cas, la valeur de la variable est accessible depuis le shell fils. Si on essaye de faire la même chose sans exporter la variable, la valeur ne sera pas accessible. $ ma_variable=toto $ bash $ echo $ma_variable $ exit La commande ''**env**'' permet de récupérer la liste des variables d'environnement du système d'exploitation. $ env REMOTEHOST=ubuntu01 HOST=machine.univ-autonome.fr TERM=xterm-color SHELL=/bin/bash SSH_CLIENT=::ffff:197.123.57.3 55747 22 SSH_TTY=/dev/pts/0 GROUP=shadogroup USER=shadouser temp=2.6.20.1 HOSTTYPE=i386-linux MAIL=/var/mail/shadouser PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/game PWD=/home/shadouser ... \\ ==== Tableaux ==== variable[n]=chaîne variable=(chaîne1 chaîne2 ?) Exemples : $ nom[1]="Pierre" # Affectation de "Pierre" dans la variable "nom[1]" $ nom[5]="Paul" # Affectation de "Paul" dans la variable "nom[5]" $ nom="Jacques" # Affectation de "Jacques" dans la variable "nom[0]" $ i=5 # Affectation de "5" à la variable "i" (ou "i[0]") $ prenom=(Pim Pam Poum) # Affectation de 3 prénoms dans un tableau $ echo "Voici mes 3 noms: ${nom[0]}, ${nom[1]} et ${nom[$i]}" Voici mes 3 noms: Jacques, Pierre et Paul $ echo "Mon tableau de noms contient ${nom[*]}" Mon tableau de noms contient Jacques Pierre Paul $ echo "Mon tableau de prénoms contient ${prenom[@]}" Mon tableau de prénoms contient Pim Pam Poum **Parcourir un tableau avec une boucle for** for dir in ${dirs2keep[@]} do printf "$dir" done \\ ==== Calculs ==== $ a=1 $ a=$(($a + 1)) $ echo $a 2 $ a=1 $ let "a=$a + 1" $ echo $a 2 $ a=1 $ a=$(echo "$a+1" |bc ) $ echo $a 2 \\