Semblable à nos séries Unix Sed et Unix Awk en cours, nous publierons plusieurs articles sur les scripts Bash, qui couvrira toutes les techniques de script bash avec des exemples pratiques.
Shell est un programme qui interprète les commandes de l'utilisateur. Les commandes sont soit saisies directement par l'utilisateur, soit lues à partir d'un fichier appelé script shell.
Le shell est appelé en tant que shell interactif, lorsqu'il lit directement l'entrée de l'utilisateur.
Shell est appelé en tant que shell non interactif lorsqu'il lit les commandes d'un fichier et l'exécute. Dans ce cas, le shell lit chaque ligne d'un fichier de script de haut en bas et exécute chaque commande comme si elle avait été tapée directement par l'utilisateur.
Afficher la valeur de la variable shell intégrée $-, pour savoir si le shell est interactif ou non interactif.
# echo $- himBH
Remarque :la variable $- contient un "i" lorsque le shell est interactif .
Unix a une variété de Shells. Bourne shell (sh), Bourne again shell (bash), C shell (csh), Korn shell (ksh), Tenex C shell (tcsh). Utilisez les commandes unix which ou whereis pour savoir où se trouve un shell spécifique, comme indiqué ci-dessous.
# which bash /bin/bash # whereis bash bash: /bin/bash /usr/share/man/man1/bash.1.gz
Vous pouvez basculer entre les shells en tapant le nom du shell. Par exemple, tapez csh pour passer au shell C.
Écriture et exécution de script shell
Exemple 1. Script Hello World Bash
- Créez un script en saisissant les deux lignes suivantes dans un fichier à l'aide de votre éditeur préféré.
- Vous pouvez choisir n'importe quel nom pour le fichier. Le nom de fichier ne doit pas être le même que celui des commandes intégrées d'Unix.
- Le script commence toujours par les deux caractères "# !", appelés she-bang. Cela indique que le fichier est un script et doit être exécuté à l'aide de l'interpréteur (/bin/bash) spécifié par le reste de la première ligne du fichier.
- Exécutez le script comme indiqué ci-dessous. Si vous rencontrez des problèmes lors de l'exécution d'un script shell, reportez-vous au tutoriel d'exécution de script shell
- Lorsque vous exécutez la commande "bash helloworld.sh", elle démarre le shell non interactif et lui transmet le nom du fichier en tant qu'argument.
- La première ligne indique au système d'exploitation quel shell générer pour exécuter le script.
- Dans l'exemple ci-dessus, l'interpréteur bash qui interprète le script et exécute les commandes une par une de haut en bas.
- Vous pouvez même exécuter le script, sans commencer "bash" par :
- Modifier l'autorisation sur le script pour vous permettre (utilisateur) de l'exécuter, en utilisant la commande "chmod u+x helloworld.sh".
- Le répertoire contenant le script doit être inclus dans la variable d'environnement PATH. S'il n'est pas inclus, vous pouvez exécuter le script en spécifiant le chemin absolu du script.
- echo est une commande qui affiche simplement l'argument que nous lui donnons. Il est également utilisé pour imprimer la valeur de la variable.
$ cat helloworld.sh #!/bin/bash echo Hello World
$ bash helloworld.sh Hello World
Fichiers de démarrage Bash
Comme nous l'avons vu précédemment dans notre séquence d'exécution pour .bash_profile et l'article sur les fichiers associés, lorsque le bash est appelé en tant que shell interactif, il lit et exécute d'abord les commandes de /etc/profile. Si /etc/profile n'existe pas, il lit et exécute les commandes de ~/.bash_profile, ~/.bash_login et ~/.profile dans l'ordre indiqué. L'option –noprofile peut être utilisée au démarrage du shell pour empêcher ce comportement.
Généralement, votre bash_profile exécute ~/.bashrc. Si vous le souhaitez, vous pouvez afficher un message de bienvenue. Cela ne s'exécute que lorsque vous vous connectez pour la première fois. Vous pouvez exporter les variables comme vous le souhaitez et vous pouvez définir les alias qui seront exécutés et disponibles une fois que vous aurez ouvert le shell. Lorsqu'un shell de connexion se ferme, Bash lit et exécute les commandes du fichier ~/.bash_logout.
Exemple 2. Imprimez un message de bienvenue lorsque vous vous connectez
Tapez le contenu suivant dans votre fichier bash_profile. Si le fichier n'existe pas, créez un fichier avec le contenu ci-dessous.
$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."
Lorsque vous vous connectez à un shell interactif, vous verrez les messages de bienvenue comme indiqué ci-dessous.
login as: root root@dev-db's password: Welcome on dev-db
Exemple 3. Imprimer des informations relatives au système
Lorsque vous vous connectez à un shell interactif, vous pouvez afficher le nom du noyau installé sur le serveur, la version bash, la disponibilité et l'heure sur le serveur.
$cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname." echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; date
Lorsque vous lancez un shell interactif, il imprime le message comme indiqué ci-dessous.
login as: root root@dev-db's password: Welcome on dev-db Kernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010
Exemple 4. Imprimer les dernières informations de connexion
Si plusieurs utilisateurs utilisent la même machine avec la même connexion, des détails tels que la machine à partir de laquelle la dernière connexion s'est produite et l'heure à laquelle ils se sont connectés seraient les détails les plus utiles. Cet exemple imprime les dernières informations de connexion lors du démarrage d'un shell interactif.
$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; datedernierjournal | grep "racine" | awk {'print "Dernière connexion depuis :"$3
print "Last Login Date &Time :",$4,$5,$6,$7,$8,$9 ;}'
Au démarrage, vous recevrez le message comme indiqué ci-dessous.login as: root root@dev-db's password: Welcome on dev-dbKernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010Dernière connexion depuis :sasikala-laptop
Date et heure de la dernière connexion :mar 22 février 11:24:01 +0100 2010
Exemple 5. Exporter des variables et définir des alias au démarrage
Les commandes les plus courantes que vous utiliserez dans vos fichiers .bashrc et .bash_profile sont les commandes d'exportation et d'alias.
Un alias remplace simplement un morceau de texte par un autre. Lorsque vous exécutez un alias, il remplace simplement ce que vous avez tapé par ce à quoi l'alias est égal. Par exemple, si vous souhaitez définir un alias pour la commande ls afin de répertorier les fichiers/dossiers avec les couleurs, procédez comme suit :
alias ls 'ls --color=tty'Si vous ajoutez cette commande à l'un des fichiers de démarrage, vous pouvez exécuter la commande ls, où elle sera automatiquement remplacée par la commande ls –color=tty.
La commande d'exportation est utilisée pour définir une variable d'environnement. Diverses variables d'environnement sont utilisées par le système ou d'autres applications. Ils sont simplement un moyen de définir des paramètres que n'importe quelle application/script peut lire. Si vous définissez une variable sans la commande d'exportation, cette variable n'existe que pour ce processus particulier.
Dans l'exemple ci-dessous, il exporte la variable d'environnement HISTSIZE. La ligne qui commence par # est une ligne de commentaire.
$ cat /etc/profile alias ls 'ls --color=tty' # Setup some environment variables. export HISTSIZE=1000 PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc export PATH export SVN_SH=${SVN_RSH-ssh}