IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[1: command not found


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2021
    Messages : 8
    Par défaut [1: command not found
    Bonjour

    avez-vous une idée sur le pb


    Nom : Sans titre.png
Affichages : 215
Taille : 13,7 Ko

    Nom : zzzzzzzzz.png
Affichages : 219
Taille : 46,8 Ko

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut modération
    • 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.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    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) ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2021
    Messages : 8
    Par défaut
    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


    Nom : fffffffff.PNG
Affichages : 159
Taille : 76,9 Ko

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par videk Voir le message
    Merci N_BaH
    Ouais, de rien, ça fait toujours plaisir !!!

    Citation Envoyé par videk Voir le message
    pour info, je suis débutant
    Oh? Sérieux??? On s'en serait jamais douté !!!

    Citation Envoyé par videk Voir le message
    voilà j'ai rectifié le script aussi, j'ai tapé la commande sur le terminal avant
    mais j'ai toujours un problème
    Parce qu'être débutant t'empêche de lire et de recopier ce que N_BaH a écrit avec exemple à la clef???
    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]

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par videk Voir le message
    avez-vous une idée sur le pb
    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=$?


    Citation Envoyé par N_BaH Voir le message
    aux crochets, je préfère test qui dit bien ce qu'il fait
    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]

  7. #7
    Membre habitué
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2021
    Messages : 8
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    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 au goûts de chacun.


    ok ca marche merci le pb etait l'espace à la condition if

    Nom : sssssssssssssssssssssssss.PNG
Affichages : 165
Taille : 84,0 Ko

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    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
    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)"
    Les simples quotes ont leur utilité aussi (par exemple quand justement on ne veut pas transformer le texte) mais pas ici.
    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]

  9. #9
    Membre habitué
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2021
    Messages : 8
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    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"
    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

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    test -e <nom_fichier> : vrai si l’argument existe
    non.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ help test | grep -- -e\\\>
          -e FICHIER     Vrai si le fichier existe.
    la 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.

    il faut entendre "fichier" au sens large, puisque sur Linux tout est fichier (fichier, lien, répertoire, périphérique...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ test -e /dev/sda1; echo $?
    0
    $
    la première partition du premier disque dur du système est un bien fichier.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Donc il vaut mieux regrouper la commande et son état en une ligne => test -f resultat; status=$?[/list]
    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)...

    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
    Quand j'ai voulu porter mes scripts sh ou bash en zsh, j'ai dû renommer les variables status en statut, par exemple !

    Et il me semble que $status a la même valeur que $?.

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Attention ! Avec le "zsh", la variable status est "spéciale/réservée/protégée/read-only" (cochez la case qui vous convient)...
    Ah oui !!! C'est pour ça que "vi" me met la variable en rouge. Je sentais bien un truc dans ce genre mais je cherchais dans bash et non dans zsh...

    Merci de cette info
    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]

Discussions similaires

  1. Script shell, probleme de boucle, permission denied
    Par tibobo_77 dans le forum Linux
    Réponses: 3
    Dernier message: 26/10/2009, 11h36
  2. script shell : probleme avec sed et awk
    Par salseropom dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 05/06/2007, 11h57
  3. Problème dans un script shell/ftp
    Par peppena dans le forum Linux
    Réponses: 16
    Dernier message: 09/10/2006, 13h07
  4. Problème script shell
    Par bessonnet dans le forum Linux
    Réponses: 15
    Dernier message: 30/06/2006, 15h45
  5. Problème script shell
    Par bessonnet dans le forum Linux
    Réponses: 6
    Dernier message: 12/05/2006, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo