LE BOURNE SHELL ( /bin/sh )
Variables, quotes, back-quotes, double quotes
Définir une variable d'identificateur VAR avec la chaîne date.
Afficher successivement à l'aide de la commande écho :
- La chaîne $VAR
- Le contenu de la variable VAR
- La date en utilisant la variable VAR
- Affecter le résultat de cette commande à une variable DATE
- Afficher le contenu de DATE inséré dans une phrase.
- Idem en utilisant directement VAR.
Exemple :
En ce jour: .... , troisieme jour de formation a l ' ENST}
Arguments de la ligne de commande
Exercice1 :
Ecrire en langage shell ( /bin/sh ), un programme qui affiche :
- le nom de la commande
- le nombre d'arguments
- le numéro du processus en cours
- les arguments de la commande.
(gadret@valjean: 44) prog1 arg1 arg2 arg3 ....
Nom de la commande : prog1
Nb de parametres : ....
Numero de process : ...
Arguments : arg1 arg2 ...
Exercice2 :
Afficher un argument par ligne précédé de son numéro:
Argument 1 : arg1
Argument 2 : arg2
.... : ...
Pour cela vous utiliserez une boucle for avec une variable prenant ses valeurs
dans $*.
Pour faire précéder chaque argument de son numéro: Utiliser l'intruction expr
pour faire évoluer la seconde variable numérotant l'argument.
Exercice3 :
En utilisant uniquement la variable de position ( $1 ),
afficher les arguments d'une commande .
Utiliser une boucle while qui teste le nombres d'arguments
$# et
afficher l'argument $1 en décalant la liste d'arguments par l'instruction
shift à chaque cycle de cette boucle.
Recherche de fichier
Ecrire une commande qui possède comme paramètres des noms de fichiers.
Cette commande recherchera ( pour tout paramètre ) dans l'arborescence courante
où se trouve ce fichier et affichera son nom complet ( Utiliser : find )
FIND
- Description :
recherche récursive de fichier à partir
du répertoire désigné, et satisfaisant aux options. Si on fait une recherche
à partir du répertoire courant il faut spécifier le ``.''.
- Options :
- name : désigne le fichier à rechercher.
- print: affiche le chemin d'accès au fichier en
cas de recherche réussie. Sans cette option même si le fichier existe,
aucune impression n'aura lieu.
- Exemple :
find . -name .zshrc -print
find . -name "*.c" -print
Syntaxe d'une commande
En supposant qu'une commande nécéssite deux paramètres, vérifier la
syntaxe, en cas d'erreur renvoyer en écho un message présisant le mode
d' utilisation de la commande (Utiliser: if ... ,$0 , $# )
Exercice :
(gadret@valjean: 44) nom-comde para1 para2
On envisagera d'envoyer le message avec une fonction usage, le test se faisant
dans la fonction principale.
usage()
{
....
}
main()
{
...
}
main $*
Lister le contenu d'un repertoire
Ecrire une commande qui prend comme argument le nom d'un répertoire.
Cette commande affichera le contenu de ce répertoire et fera précéder chaque élément
de son type ( fichier ou répertoire ). Si aucun argument n'apparait sur la ligne
de commande, on affiche le répertoire courant. ( Utiliser for , ls, ${... : ...},
test.
Expressions régulières
-
A l'aide des commandes ls, grep, lister sous votre repertoire de login vos
fichiers cachés et uniquement ceux-ci.
-
Sous le répertoire TP-shell chez l'utilisateur domas ,
vous trouverez le fichier desordre .
Ce fichier est un exemple de fichier passwd, mais où se sont introduites
des lignes blanches, ainsi que des blancs avant ou après le délimiteur de
champ " : ".
On recherchera ces lignes à l'aide de la commande grep .
SED
-
Soit la variable DISK} ayant la valeur /dev/dsk/c0t3d0s,
nous voulons la modifier afin d'avoir la valeur suivante
/dev/rdsk/c0t3d0s0 , écrire la commande réalisant cette
transformation.
-
Afin de remettre le fichier précédent en ordre, écrire un scrip pour sed
qui supprimera les lignes blanches,ainsi que les blancs uniquement devant
et derrière le séparateur " : "
Puis compléter ce script pour changer les shells de login csh par enstsh.
AWK
Toujours en utilisant le fichier précédent, écrire un script pour AWK
qui sélectionnera les champs 1, 6 et 7, c'est à dire le nom de connexion login,
le répertoire de l'utilisateur HOME et le shell de login .
En entête on affichera l'intitulé de chaque champ.
En fin de fichier on donnera le nombre total d'utilisateurs.
LOGIN HOME SHELL
gadret /inf/valjean/admin/gadret /bin/sh
... .... .....
TOTAL USERS : .........
Exercices:
-
Ecrire une commande tac qui en prend en argument le nom
d'un fichier, qui créera un nouveau fichier inserse du fichier
d'origine ( en fait l'inverse de cat )\\
Quelques commandes utiles:
while, tail, head, expr, wc, awk
aaaaaaa ccccccc
bbbbbbb -----> bbbbbbb
ccccccc aaaaaaa
Refaire le même exercice, mais cette fois en utilisant uniquement awk.
-
A partir de la commande date , afficher celle-ci en français
avec le format suivant:
jour date mois année heure
date ----> Fri Sep 8 10:39:59 MET DST 1995
script ---> Vend 8 Sept 1995 10:39.59
Remarque: Seuls les mois suivants ont besoin d'une conversion
( Feb Apr May Aug ).