BASH - LGEP
Transcription
BASH - LGEP
• 6. L'interpréteur de commande : BASH • 6.1 Les fichiers d'initialisation • 6.2 Les variables du Bash • 6.3 Les alias • 6.4 La fonction shell • 6.5 L'édition de la ligne de commandes • 6.6 Les utilitaires (history, complétion...) • 6.7 Quelques commandes internes • 6.8 Ecriture et exécution d'un script • 6.9 Exercices Olivier HUBERT - LGEP/CNRS 1 • 6. L'interpréteur de commande : BASH • Le plus répandu dans le monde Linux • Compatible avec le Bourne Shell (sh) • Interface entre l'utilisateur et le système • • • En mode console Langage interprété • Écriture de scripts • Utilisation de vi ou emacs pour les écrire Lancement d'un programme à un instant donné • processus Olivier HUBERT - LGEP/CNRS 2 • • • • 6. L'interpréteur de commande : BASH Lors de la connexion, le processus /bin/bash défini dans /etc/passwd est lancé Processus • PID (Process Identifier) • Processus père • Processus fils Types de processus • Les commandes définies (fonction ou alias) • Les commandes internes (shell) • Les commandes externes (/usr/bin, /sbin..) Olivier HUBERT - LGEP/CNRS 3 • • • 6. L'interpréteur de commande : BASH Exemple d'alias : • alias ld= ''ls -ld '' • alias freebox='lftp -u freebox,passwd hd1.freebox.fr' Les variables shell • • • • VAR_SHELL='VALEUR' Variables internes (shell) Variables d'environnement (shell et processus fils) Le caractère _ (souligné) est le seul caractère non alphanumérique utilisable Olivier HUBERT - LGEP/CNRS 4 • • 6. L'interpréteur de commande : BASH 6.1 Les fichiers d'initialisation : • • • • • • /etc/profile géré par l'administrateur .bash_profile géré par l'utilisateur VAR_SHELL='VALEUR' Variables internes (shell) Variables d'environnement (shell et processus fils) .bashrc exécuté par .bash_profile à la connexion sinon en mode intéractif ➔ Fichier commun Olivier HUBERT - LGEP/CNRS 5 • • 6. L'interpréteur de commande : BASH 6.1 Les fichiers d'initialisation : • • BASH_ENV si variable initialisée et lancement d'un script shell, le script contenu dans BASH_ENV est exécuté avant. Lors de la déconnexion • exit ou <ctrl-d> ➔ Exécution de .bash_logout Olivier HUBERT - LGEP/CNRS 6 • • 6. L'interpréteur de commande : BASH 6.3 Les variables du BASH : • • Les variables bouléennes • echo $SHELL_OPTS • Modifie le comportement de l'interpréteur Les variables ordinaires • set liste les variables et leur valeur • nom_variable=valeur ➔ Variables exportées (d'environnement) • export nom_variable=valeur • declare -x nom_variable Olivier HUBERT - LGEP/CNRS 7 • • 6. L'interpréteur de commande : BASH 6.2 Les variables du BASH : ➔ Exemples de variables bouléennes • history • noclobber redirection interdite vers un fichier existant • notify le Bash indique immédiatement la fin d'un travail en arrière plan (background job) • xtrace permet de suivre l'exécution en détail d'un programme historique des commandes Olivier HUBERT - LGEP/CNRS 8 • • 6. L'interpréteur de commande : BASH 6.2 Les variables du BASH : ➔ Variables ordinaires • set liste les variables et leur valeur • unset supprime une variable ➔ Les principales variables du shell • ENV IFS PWD • HISTSIZE OLDPWD TERM • HISTFILE PATH TMOUT • HOME PS1 ... • HOSTNAME PS2 Olivier HUBERT - LGEP/CNRS 9 6. L'interpréteur de commande : BASH • • 6.2 Les variables du BASH : ➔ Variables ordinaires • PS1 • • • • • • • \h \u \t \w \W \! \$ valeur du prompt (par défaut ‘‘\s-\v\$ ’’) nom de l'ordinateur, nom du login heure courante chemin du répertoire de travail nom du répertoire de travail numéro de la commande dans l'historique # pour l'administrateur sinon $ Olivier HUBERT - LGEP/CNRS 10 • • 6. L'interpréteur de commande : BASH 6.3 Les alias : ➢ alias nom_alias='commandes' Permet de définir des commandes personnalisées ualias nom_alias ➔ ➢ Permet de supprimer l'alias Exemples : ➔ ➢ alias md='mkdir' ➔ alias vdir='ls –color=auto –format=long' ➔ alias sshroot='ssh -X root@localhost' ➔ Alias tidy2html='tidy -utf8 -indent $1 -file errors.log >output.log 2>warnings.log' ➔ Olivier HUBERT - LGEP/CNRS 11 6. L'interpréteur de commande : BASH • • 6.4 La fonction shell : ➢ function nom_fonction { liste de commandes } ➢ nom_fonction () { liste de commandes; } Lancée dans le shell courant, pas de création de processus. Permet de créer des fonctionnalités complexes impossibles en script. Exemple : ➔ ➔ • • • • cdd () { tempo=$(find . -name $1 -type d -print 2>/dev/null) cd $(echo $tempo | cut -f1 -d' ') } Olivier HUBERT - LGEP/CNRS 12 • • 6. L'interpréteur de commande : BASH 6.5 L'édition de la ligne de commandes ➢ ➢ On retrouve certaines commandes de l'éditeur emacs Permet de retrouver rapidement des commandes dans l'historique (history) ➢ ↑ ou <ctrl-P> ou <ctrl-p> ➢ ↓ ou <ctrl-N> ou <ctrl-n> ➢ <ctrl-R>motif ou <ctrl-r>motif ➢ <meta-p>motif<return> ➢ !n ➢ !ls ➢ !! Olivier HUBERT - LGEP/CNRS 13 • • 6. L'interpréteur de commande : BASH 6.6 Les utilitaires du Bash ➢ Recherche et complément d'une fonction avec la touche <tab> ➢ Recherche et complément des noms de fichiers ➢ ~/ ➢ ~nom_user = $HOME/nom_user ➢ ~+ = $PWD ➢ ~- = $OLDPWD = $HOME Olivier HUBERT - LGEP/CNRS 14 • • 6. L'interpréteur de commande : BASH 6.7 Quelques commandes internes ➢ alias hash [-r] [nom] ➢ cd [rep] history ➢ ed [rep] pwd ➢ command read [nom] ➢ echo [-ne] ''texte'' set, unset [option] [arg] ➢ enable [-n] cmd shopt [-su] [opt] ➢ exec cmd times ➢ exit [n] trap [arg] [sig] ➢ export [-n] [nom] type [nom] Olivier HUBERT - LGEP/CNRS 15 • • 6. L'interpréteur de commande : BASH 6.8 Ecriture et exécution d'un script ➢ Script appelé fichier de commandes ➢ Appel du script bash option programme arg1 arg2 arg3 ➢ ./programme arg1 arg2 arg3 ➢ programme arg1 arg2 arg3 (dans le chemin PATH) Choix du shell fils ➢ ➢ En début de fichier, choix du shell de lancement ➢ #/bin/bash, sh, tcsh... . pgme Ne crée pas de shell fils, force l'exécution et prend en compte les variables d'environnement ➢ ➢ Olivier HUBERT - LGEP/CNRS 16 • • 6. L'interpréteur de commande : BASH 6.9 Exercices ➢ Ecrivez votre commande ''dir'' Affiche page par page, utilise ls -l ➢ Inclus les fichiers cachés Ecrivez un alias confirmant la suppression des fichiers ➢ ➢ ➢ Ecrivez votre commande ''psme'' (ps) Liste tous vos processus Modifier votre prompt (PS1) ➢ ➢ Nom ordinateur + répertoire courant Ecrivez votre fonction ''fdplussize '' permettant de trouver à partir du répertoire courant les fichiers de taille >= n octets (ex: fdplussize 10M) ➢ ➢ Olivier HUBERT - LGEP/CNRS 17 6. L'interpréteur de commande : BASH • • 6.9 Exercices solutions ➢ Ecrivez votre commande ''dir'' ➢ Affiche page par page, utilise ls -l ➢ 2 solutions alias ou function ➢ • alias ''ls -Al | more'' • • • • dir() { ls -al $* | more } Olivier HUBERT - LGEP/CNRS 18 6. L'interpréteur de commande : BASH • • 6.9 Exercices solutions ➢ Ecrivez un alias confirmant la suppression des fichiers alias rm= ''rm -i'' Ecrivez votre commande ''psme'' (ps) ➢ ➢ Liste tous vos processus ➢ 2 solutions alias ou function • alias psme=''ps -f -u $LOGNAME'' • function psme() { • ps -u $USER -o pid,%cpu %mem,bsdtime,command • } ➢ Olivier HUBERT - LGEP/CNRS 19 6. L'interpréteur de commande : BASH • • 6.9 Exercices ➢ Modifier votre prompt (PS1) ➢ • Nom ordinateur + répertoire courant PS1=''\h:$PWD'' • ➢ Ecrivez votre fonction ''fdplussize '' permettant de trouver à partir du répertoire courant les fichiers de taille >= n octets (ex: fdplussize 10M) • • • fdplussize () { find . -name "*" -size "$1" -type f -print } Olivier HUBERT - LGEP/CNRS 20