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 : 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 :
 	(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

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

  1. A l'aide des commandes ls, grep, lister sous votre repertoire de login vos fichiers cachés et uniquement ceux-ci.
  2. 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

  1. 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.
  2. 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:

  1. 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.
  2. 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 ).