Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/11/2014, à 12:50

Beuhlet_Reseau

[RESOLU] Script bash simple avec fonction ET (&&)

Bonjour,

#!/bin/bash
read -p 'Entrez votre nom : ' nom
read -p 'Entrez le nom dun repertoire :' repertoire

if [ -d $repertoire ] && [ $nom=Romain ]
then
        echo "Cela est bien un repertoire de Romain"


elif   [ $nom !=Romain ]
then
        echo "Le repertoire existe mais vous netes pas Romain"
else
        echo "Cela n.est pas un repertoire"
fi


~
~
"condition_ET" 21 lines, 353 characters
#./condition_ET
./condition_ET[6]: read: no query process
./condition_ET[7]: read: no query process
Cela est bien un repertoire de Romain

En gros :

- Si le nom entré est "Romain" et que le repertoire indiqué existe bel et bien : on affiche "Cela est bien un repertoire de Romain"
- Sinon Si elif le nom entré et différent de "Romain" mais que le repertoire existe : on affiche "Le repertoire existe mais vous netes pas Romain"
- Sinon cela n'est pas un repertoire.

Problème.

Dernière modification par Beuhlet_Reseau (Le 04/12/2014, à 10:50)


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#2 Le 14/11/2014, à 17:15

Hizoka

Re : [RESOLU] Script bash simple avec fonction ET (&&)

a devrait mieux passer avec ça

if [[ -d ${repertoire} && "${nom}" == "Romain" ]]
then
        echo "Cela est bien un repertoire de Romain"

elif [[ -d ${repertoire} && "${nom}" != "Romain" ]]
then
        echo "Le repertoire existe mais vous netes pas Romain"
else
        echo "Cela n.est pas un repertoire"
fi

Tu devrais jeter un oeil ici : http://abs.traduc.org/abs-fr/

Dernière modification par Hizoka (Le 14/11/2014, à 17:17)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 15/11/2014, à 09:58

tiramiseb

Re : [RESOLU] Script bash simple avec fonction ET (&&)

Salut,

Je préfère pour ma part cette forme :

#!/bin/sh
read -p "Entrez votre nom : " nom
read -p "Entrez le nom d'un répertoire : " repertoire

if [ -d "$repertoire" -a "$nom" = "Romain" ]
then
        echo "Cela est bien un répertoire de Romain"
elif   [ -d "$repertoire" -a "$nom" != "Romain" ]
then
        echo "Le répertoire existe mais vous n'êtes pas Romain"
else
        echo "Cela n'est pas un répertoire"
fi

Trois erreurs notables dans ton code, Romain :
- tu n'as pas protégé les noms des variables dans les tests : si quelqu'un met une chaîne vide, ça ne fonctionnera pas
- tu n'as pas mis d'espace entre les noms de variables et les opérateurs : en shellscript, il faut mettre des espaces sinon il ne comprend pas (*)
- dans ton elif, tu n'as pas testé à nouveau si le répertoire existe, du coup le résultat de ton elif serait « vous n'êtes pas Romain » et le else correspondrait à « vous êtes Romain mais cela n'est pas un répertoire ».

(*) : pour un shell, tout est chaîne de caractères et le séparateur est l'espace. Si un utilisateur répond que son nom est Arthur, alors le second test de ton premier if testera juste que la chaîne « Arthur=Romain » existe (et non pas que Arthur est égal à Romain), le second te retourne une erreur, car il comprend deux arguments : en premier "Arthur", en second "!=Romain" : bien sûr, cela ne veut rien dire.

Hors ligne

#4 Le 15/11/2014, à 11:45

Hizoka

Re : [RESOLU] Script bash simple avec fonction ET (&&)

perso je pense qu'il vaut mieux qu'il prenne de bonnes habitudes, comme toujours entourer ses variables par ${} ça évite les soucis et permet beaucoup de choses en plus.

var="Bon"
echo "${var}jour"

var="Bonjour"
echo "${var:3}"
echo "${var//o/a}"
echo "${var%%j*}"

var=(B o n j o u r)
echo "${var[@]//o/a}"

De même que [[ ]] permet "d'oublier" de mettre des guillemets autour des variables de test:

var="oui et non"
[ ${var} == "oui et non" ] && echo "OK"
[[ ${var} == "oui et non" ]] && echo "OK"
https://doc.ubuntu-fr.org/tutoriel/script_shell a écrit :

De toute facon les limites sont définies par bash, si ça passe, c'est que c'est "prévu" tongue

La syntaxe la plus appropriée dans de la programmation shell moderne est le double crochet :

[[ -f /etc/passwd ]]

Cela gère bien mieux les problèmes d'espace dans les noms de fichiers, les erreurs etc… C'est une structure propre à bash (ksh, ?) qui est le shell par défaut dans la plupart des distributions Linux, et de Ubuntu en particulier. On garde en général des simples crochets pour les scripts shell qui doivent être à tout prix POSIX. ( Utilisation sur des Unix sans installation préalables de bash, comme BSD, Solaris… )

Dernière modification par Hizoka (Le 15/11/2014, à 11:49)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 15/11/2014, à 12:08

tiramiseb

Re : [RESOLU] Script bash simple avec fonction ET (&&)

Ou mais je préfère faire des scripts sh et pas bash : j'évite l'utilisation de trucs spécifiques à Bash...

Pour les accolades, je ne les utilise que quand c'est nécessaire : on est en fait rarement dans un cas où c'est réellement utile, de plus quand on est dans un tel cas on ne peut pas les oublier : "$varjour" posera évidemment problème...

Hors ligne

#6 Le 15/11/2014, à 12:25

Hizoka

Re : [RESOLU] Script bash simple avec fonction ET (&&)

oui si tu programmes en sh en effet, il faut suivre les consignes sh, mais là il est en bash tongue (ouf sauvé !)

les accolades, perso, je les utilises beaucoup, le full bash est plus rapide que de passer par sed par exemple.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#7 Le 15/11/2014, à 13:13

tiramiseb

Re : [RESOLU] Script bash simple avec fonction ET (&&)

Si tu regardes mon shebang, j'ai utilisé /bin/sh wink

Le problème avec l'utilisation de la syntaxe de Bash, c'est que le jour où tu te retrouves sur un système où il n'y a pas Bash, tu dois réapprendre...

Concernant l'utilisation avancée des accolades avec bash, je pense que tu as raison, ça peut être bien plus rapide que d'appeler sed par exemple. Il reste juste à y penser... Pour ma part j'ai appris "à l'ancienne" wink

Hors ligne

#8 Le 19/11/2014, à 17:59

Beuhlet_Reseau

Re : [RESOLU] Script bash simple avec fonction ET (&&)

Merci pour vos réponses, je suis sur du linux donc on m'a conseillé le bash après si la syntaxe ne diffère pas trop le sh est plus facile d'utilisation ?


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#9 Le 19/11/2014, à 18:52

Hizoka

Re : [RESOLU] Script bash simple avec fonction ET (&&)

le sh est plus portable mais moins tolérant et permet moins de choses que bash.

A toi de voir quel est ton besoin. Si tu veux utiliser ton code sur d'autres plateformes...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#10 Le 19/11/2014, à 18:53

tiramiseb

Re : [RESOLU] Script bash simple avec fonction ET (&&)

Bash est le shell le plus courant sous Linux, celui qui est par défaut sur Ubuntu et plein d'autres distributions.

sh, c'est le dénominateur commun entre un très grand nombre de shells : cela veut dire qu'un script utilisant les spécificités de Bash ne fonctionnera qu'avec Bash alors qu'un script n'utilisant que le sous-ensemble disponible sur sh fonctionnera sur beaucoup de shells différents...

Hors ligne