diff --git a/systeme/tp/tp6/afficheArg.sh b/systeme/tp/tp6/afficheArg.sh new file mode 100755 index 0000000..533e968 --- /dev/null +++ b/systeme/tp/tp6/afficheArg.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +echo "le nom de la commande est $(basename $0)" +echo "le premiere argument est $1" +echo "le deuxieme argument est $2" +echo "il y a $# arguments" +echo -n "Vous avez tapé $(basename $0), $@" +echo '$@ ou $*' diff --git a/systeme/tp/tp6/existe.sh b/systeme/tp/tp6/existe.sh new file mode 100755 index 0000000..7c86d95 --- /dev/null +++ b/systeme/tp/tp6/existe.sh @@ -0,0 +1,13 @@ +#!/bin/sh +#set -x affiche les commandes aussi + +echo -n 'Nom de fichier: ' +read nom +if [ -r "$nom" ] # ou test(remplace les crochets) -r $nom + #si on met pas les guillemets au $nom cela ne prends pas bien le nom qu'on lui donne +then + cat "$nom" +else + echo "Fichier $filename n'existe pas ou est non accessible en lecture !" >&2 #> /dev/stderr + exit 1 +fi diff --git a/systeme/tp/tp6/pluspetit2.sh b/systeme/tp/tp6/pluspetit2.sh new file mode 100755 index 0000000..210a11c --- /dev/null +++ b/systeme/tp/tp6/pluspetit2.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +if [ $# -ne 2 ] ; then + echo "Attention ! merci de donner 2 entiers" >&2 + exit 1 +fi + +if echo "$1$2" | egrep -q '^[0-9]+$' ; then + if [ $1 -lt $2 ] ; then + echo "$1" + else + echo "$2" + fi +else + echo "attention ! Vos arg doivent etre 2 entiers" >&2 + exit 2 +fi diff --git a/systeme/tp/tp6/tp_6.md b/systeme/tp/tp6/tp_6.md new file mode 100644 index 0000000..df83516 --- /dev/null +++ b/systeme/tp/tp6/tp_6.md @@ -0,0 +1,76 @@ +# TP 6 - Scripts + + + +debut + ./afficheArg.sh "dj ff" djfj dlld pour lancer + + echo $ pour afficher le separateur ' ' de base + + echo -n permet que echo n'aille pas a la ligne apres + + egrep -q rend silentieux le egrep (pas de messages dur le terminal) + + ECHAP u pour faire un CTRL + z sous vim + + +Pas de compte rendu dédié aux TP sur les scripts shell. Vos programmes feront foi! + + + +Quelques règles simples pour éviter les erreurs de syntaxe : + +* Jamais d'espace autour d'une affectation (exemple : `a=3`) +* des espaces partout ailleurs (exemple `if test $a = 4; then...` +* `$` devant le nom d'une variable pour accéder à son contenu. + +Pour observer les commandes exécutées, passez en mode trace en plaçant la commande `set -x` en début de programme. + + + +## La commande `existe` + +Écrire un programme qui : + +- Demande à l'utilisateur de saisir un nom de fichier +- Vérifie que le fichier existe et qu'il est accessible en lecture +- Affiche alors le contenu du fichier à l'aide de la commande `cat` +- Affiche sinon un message d'erreur si le fichier n'existe pas + ./existe.sh + +## La commande `min1` + +Écrire un script-shell qui demande à l'utilisateur de saisir une suite d'entiers (un par ligne) et qui affichera le plus petit des entiers saisis. + +## La commande `min2 entier [entier ...]` + +### Étape 1 + +Écrire un script-shell recevant en arguments (sur la ligne de commande, en paramètre) une suite d'entier et affichant le plus petit d'entre eux. + +### Étape 2 + +Lorsque votre programme fonctionne ajouter le nécessaire pour gérer le cas d'un nombre d'argument nul. Dans ce cas le programme affichera un message d'erreur et retournera un code retour de 1 (il retournera 0 dans les autres cas). + +## La commande `arg1` + +Écrire un programme qui affiche son nom (seulement la dernière partie après le dernier '/'), puis chacun de ses arguments, séparés par des caractères '\#'. Attention, le dernier argument ne doit pas être suivi d'un '\#'. + +Indications : + +* l'option `-n` (nonewline) de la commande `echo` peut-être utile. +* la commande `basename` également` + +Exemple : + +``` +./arg1 toto titi tata + +arg1 toto#titi#tata +``` + +## La commande `dir [répertoire]` + +Écrivez un script-shell qui affiche les fichiers du répertoire passé en argument (ou du répertoire courant si aucun répertoire n'est passé en argument) en encadrant de crochets le nom des fichiers correspondant à des répertoires et faisant suivre d'une étoile le nom des fichiers exécutables (autres que les répertoires). + +Indication : utilisez la commande `test` pour déterminer le type du fichier.