Bonjour
avez-vous une idée sur le pb
![]()
Bonjour
avez-vous une idée sur le pb
![]()
- le titre de ton sujet doit être explicite.
- il est préférable, quand on poste du code, de ne pas envoyer des captures d'écrans, mais autant de copier/coller.
- en cherchant sur le net avant de poster (c'est demandé dans la charte du forum), tu aurais trouvé une solution au problème : il faut des espaces autour des crochets.
aux crochets, je préfère test qui dit bien ce qu'il fait, et "désolidarise" la commande du if, évitant ainsi toute confusion.
cd ~/quelquePart, donc tu sais où tu te déplaces, tu sais où tu es : y=`pwd` ne sert alors à rien.
d'une manière générale, dans un script, cd n'est pas utile.
test -f fichier, et ... ?
ah, oui ! a=$?
pourquoi pas tout de suite if test -f fichier (comme je le disais au début de mon message) ?![]()
Merci N_BaH
pour info, je suis débutant
voilà j'ai rectifié le script aussi, j'ai tapé la commande sur le terminal avant
mais j'ai toujours un problème
![]()
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Il faut espacer les crochets de l'évaluation => if [ $a -eq 0 ] et non if [$a -eq 0]. Ou alors, comme le dit N_Bah, utiliser test qui est la commande d'origine => if test $a -eq 0.
A partir de là, ton script fonctionnera. Mais question finesse...
Aux remarques de N_BaH, qui bien évidemment gardent toutes leur pertinences, on peut rajouter celles-ci
- on ne teste pas si un état vaut 1 mais s'il est différent de 0 (parce qu'il peut valoir toute la gamme de 1 à 255, chaque valeur permettant d'indiquer un souci X ou Y)
- plutôt que de tester s'il vaut 1, puis re-tester s'il vaut 0, on testera plus intelligemment s'il est différent de 0 et sinon, c'est que le fichier existe (un seul test au lieu de deux)
- si tu rajoutes une instruction (style echo) entre le test et la récupération de l'état, tu récupères l'état de la dernière instruction et non plus celui du test. Donc il vaut mieux regrouper la commande et son état en une ligne => test -f resultat; status=$?
Mince, hier (oui oui, j'ai vraiment fait ça hier, à prendre au sens littéral) j'ai passé tous mes scripts et ai remplacé les "test" par des crochets.
Mais voici pourquoi
- j'ai remarqué que les scripts système (/etc/profile, .profile par défaut) utilisaient les crochets
- etant donné qu'il est sorti les doubles crochets [[ ... ]] permettant des tests avancés, cette syntaxe n'ayant pas d'équivalent littéral (enfin je crois), je me suis dit que désormais la syntaxe "crochets" devenait une syntaxe à plébisciter, permettant ainsi de changer plus facilement [ ... ] en [[ ... ]] et inversement si besoin (d'ailleurs justement la semaine dernière j'ai utilisé pour la première fois les doubles crochets afin de regarder si "$TERM" débutait par "xterm" => [[ $TERM = xterm* ]]
Mais bon, ça reste aus goûts de chacun.![]()
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
test -f ne teste pas l'existence, mais le type. Donc si "resultat" est un lien symbolique, un pipe, un fichier spécial ou un dossier, le test renvoie faux bien qu'il existe. Pour tester l'existence pure c'est test -e
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #!/usr/bin/bash test -e "resultat" && echo "Le fichier resultat existe" || echo "Le fichier resultat n'existe pas" [ -e "resultat" ] && echo "Le fichier resultat existe" || echo "Le fichier resultat n'existe pas"
Pour les chaines, il vaut mieux en général utiliser les doubles quotes plutôt que les quotes simples car les doubles quotes conservent certaines propriétés intéressantes
Les simples quotes ont leur utilité aussi (par exemple quand justement on ne veut pas transformer le texte) mais pas ici.
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #!/usr/bin/bash echo 'Je me trouve dans $(pwd)' echo "Je me trouve dans $(pwd)"
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
oui, je sais sauf que je veux fair des essais des commandes suivants dans un script
donc le message n'explique pas la commande
test -e <nom_fichier> : vrai si l’argument existe
test -f <nom_fichier> : vrai si l’argument est un fichier ordinaire
test -d <nom_fichier> : vrai si l’argument est un répertoire
test -L <nom_fichier> : vrai si l’argument est un lien symbolique
test -r <nom_fichier> : vrai si on a le droit de lire le fichier
test -x <nom_ficher> : vrai si on a le droit d’exécuter le fichier
test -w <nom_ficher> : vrai si on a le droit d’écrire dans le fichier
test -s <nom_fichier> : vrai si l’argument existe et non vide
non.test -e <nom_fichier> : vrai si l’argument existela vérification de l'existence d'un argument se fait par -n, parce qu'un argument (ou "paramètre") est forcément une chaîne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ help test | grep -- -e\\\> -e FICHIER Vrai si le fichier existe.
il faut entendre "fichier" au sens large, puisque sur Linux tout est fichier (fichier, lien, répertoire, périphérique...)la première partition du premier disque dur du système est un bien fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $ test -e /dev/sda1; echo $? 0 $
Sur le principe, je suis d'accord...
Attention ! Avec le "zsh", la variable status est "spéciale/réservée/protégée/read-only" (cochez la case qui vous convient)...
Quand j'ai voulu porter mes scripts sh ou bash en zsh, j'ai dû renommer les variables status en statut, par exemple !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 % cat test.zsh #!/bin/zsh foo() { local status echo 'coucou'; status=$? echo "status: $status" } foo % ./test.zsh coucou foo:2: read-only variable: status
Et il me semble que $status a la même valeur que $?.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Partager