CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème programmation shell

Samefly1
Samefly1
Niveau 2
17 octobre 2016 à 12:33:47

Bonjour à tous !

Je voulais savoir pourquoi lorsque l'on fait ceci dans un script shell le terminal renvoi le résultat de la commande :

if grep [motif] [fichier]

Pourtant je ne demande pas au script de renvoyer quelque chose, est il donc possible de faire en sorte qu'il ne renvoie rien ?

D'avance merci.

Samefly1
Samefly1
Niveau 2
17 octobre 2016 à 12:39:28

C'est la même chose avec :
if find /home/user/test toto

le terminal renvoie /home/user/test/toto

Samefly1
Samefly1
Niveau 2
17 octobre 2016 à 12:52:29

Nouveau problème lorsque je fais par exemple
if find $PWD -name $1
then
echo "c'est trouvé"
else
echo "c'est pas trouvé"
fi

Le terminal m'affiche toujours "c'est trouvé" alors que le premier paramètre ne correspond pas à un nom de fichier existant..

f0c300
f0c300
Niveau 10
17 octobre 2016 à 13:12:40

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

Il faut que tu utilises un ";" pour arreter l'execution de la commande et passer au "then"

Samefly1
Samefly1
Niveau 2
17 octobre 2016 à 13:18:24

Le ";" sert a indiquer au shell un retour à la ligne. J'ai essayé mais ça ne change rien.

f0c300
f0c300
Niveau 10
17 octobre 2016 à 13:28:10

Le 17 octobre 2016 à 13:18:24 Samefly1 a écrit :
Le ";" sert a indiquer au shell un retour à la ligne. J'ai essayé mais ça ne change rien.

Tu utilises bien bash?

+ desole j'ai lu trop vite.

Ton probleme est que tu ne fais aucun test ici. Tu ne regardes pas si ta commande find renvoie quelque chose ou non.
Il faut que tu utilises quelque chose comme if [ -n $(commande) ]

Message édité le 17 octobre 2016 à 13:29:36 par f0c300
Samefly1
Samefly1
Niveau 2
17 octobre 2016 à 13:43:40

Oui j'utilise bien bash.
J'ai trouvé une solution :

rep=`find $PWD -name $1`
echo $rep
if [ "$rep" != "" ]
then
echo "c'est trouvé"
else
echo "c'est pas trouvé"
fi

Je vais tenter avec la tienne, et je pense que ça va marcher.
Effectivement je testais juste l’exécution de la commande mais pas ce qu'elle renvoie. Merci beaucoup

Samefly1
Samefly1
Niveau 2
17 octobre 2016 à 13:50:00

Cela ne fonctionne toujours pas avec if [ -n $(commande) ]
En fait la commande find renvoie du vide si le fichier recherché n'existe pas. Du coup pour
if [ -n $(find $PWD -name $1) ]
la condition est quand même vrai car la variable $(find $PWD -name $1) existe malgré qu'elle soit vide.

f0c300
f0c300
Niveau 10
17 octobre 2016 à 15:26:23

Etrange, -n est cense tester si la longueur d'une variable est egale a zero, pas si elle existe.

deepblue
deepblue
Niveau 16
17 octobre 2016 à 19:25:53
[19:25] /tmp/test % cat /tmp/foo 
#!/bin/sh

isOk() {
	"$@" 2>/dev/null

	return "$?"
}


if [ $(isOk find /tmp/test -name "foo") ]; then
	echo "OK"
else
	echo "KO"
fi

if [ $(isOk find /tmp/test -name "bar") ]; then
	echo "OK"
else
	echo "KO"
fi
[19:25] /tmp/test % ls
foo
[19:25] /tmp/test % /tmp/foo 
OK
KO
deepblue
deepblue
Niveau 16
17 octobre 2016 à 19:29:25

Pour info, la fonction `isOk` permet juste de taire les erreurs.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware