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 script Shell

Pseudo supprimé
Pseudo supprimé 21 décembre 2014 à 18:36:18

Bonsoir, je suis en première année dans un IUT informatique et dans le but de m’exercer aux scripts Shell j'essaie d'en créer un. Cependant j'ai un problème d'exécution. J'ai deux case imbriqués et c'est de là que vient l'erreur. Quand j'exécute le script avec le seul gros case tout fonction niquel. Mais si j'essaie d'affiner mon script avec un deuxième case pour le 6° choix j'ai une erreur mais je ne comprends pas d'où elle vient. voici mon code:
1 #!/bin/sh 2 3 echo 4 echo 5 echo Que voulez-vous faire \? 6 echo 7 echo 1 - Mettre à jour le dépôt et les paquets 8 echo 9 echo 2 - Nettoyer le cache et supprimer les paquets inutiles 10 echo 11 echo 3 - Tester la connexion à Internet 12 echo 13 echo 4 - Arrêter un processus en particulier 14 echo 15 echo 5 - Arrêter tous les processus 16 echo 17 echo 6 - Eteindre l\'ordinateur 18 echo 19 echo 7 - Redémarrer l\'ordinateur 20 echo 21 echo 8 - Sortir de ce script 22 echo 23 24 read choix 25 case $choix in 26 1) sudo apt-get update && sudo apt-get upgrade;; 27 28 2) sudo apt-get autoclean && sudo apt-get autoremove;; 29 30 3) ping -q -c 2 www.google.fr >/dev/null 2>&1 31 if [ $? -eq 0 ]; then 32 echo "Vous êtes connecté." 33 else 34 echo "Vous n'êtes pas connecté." 35 fi;; 36 37 4) echo Tapez le nom du pocessus 38 read val 39 process=`ps -ef | grep $val | cut -d " " -f 3` 40 kill -9 $process;; 41 42 5) kill -9 -1;; 43 44 6) echo 45 echo Dans combien de temps voulez-vous éteindre l\'ordinateur \? 46 echo 47 echo 1 - Tout de suite 48 echo 49 echo 2 - Dans X minutes \(Entrer X\) 50 echo 51 echo 3 - A une heure précise \(Entrer l'heure\) 52 echo 53 54 read shut 55 case $shut in 56 1) sudo shutdown -h now;; 57 58 2) echo Dans combien de minutes l\'ordinateur doit-il s\'éteindre \? 59 echo 60 read minutes 61 sudo shutdown -h $minutes;; 62 63 3) echo A quelle heure l\'ordinateur doit-il s\'éteindre \? \(Entrer l\'heure au format hh:mm\) 64 echo 65 read heure 66 sudo shutdown -h $heure;; 67 esac;; 68 69 7) sudo reboot;; 70 71 8) exit;; 72 esac

Et voici l'erreur que j'ai :
./test.sh: 67: ./test.sh: Syntax error: ";;" unexpected

Merci par avance de votre aide :merci: :hap:

Message édité le 21 décembre 2014 à 18:39:09 par Pseudo supprimé
Tharsis
Tharsis
Niveau 10
21 décembre 2014 à 18:39:39

A priori il ne faut tout simplement pas mettre les deux points-virgules après le esac :doute: (tu ne l'as d'ailleurs pas fait en ligne 72)

Pseudo supprimé
Pseudo supprimé 21 décembre 2014 à 18:43:00

Merci Tharsis, j'ai déjà essayé mais ça ne marche pas. De plus les deux points virgules permettent de clore une instruction de choix incluse dans un case. Le case du choix 6 étant imbriqué dans le plus grand, je clos le choix 6 avec les deux points virgules après le esac. Et je ne l'ai pas fait en ligne 72 parce que c'est celui qui englobe le tout

Pseudo supprimé
Pseudo supprimé 21 décembre 2014 à 19:43:20

:up:

Pseudo supprimé
Pseudo supprimé 21 décembre 2014 à 19:53:45

Deja, mets #!/bin/sh -x pour debugger.

RogerLeCaillou
RogerLeCaillou
Niveau 10
21 décembre 2014 à 20:32:55

Indente ton code correctement et utilise un éditeur avec coloration syntaxique, les erreurs te sauteront aux yeux.

Pour indenter correctement des suites de case, on fait comme ça :

case $var in
CHOIX1)
    instruction1
    ...
    instruction n
;;
CHOIX2)
    instruction 1
    ...
    case $autre_var in
    CHOIX2_1)
        instruction 1
    ;;
    esac
;;
esac

C'est quand même plus clair en alignant le ;; avec le case) correspondant.

En indentant en respectant ça, tu remarqueras que tu as oublié un ;; quelque part. EDIT : ah non au temps pour moi, je l'avais juste pas vu à cause de l'indentation non faite. Mais le conseil reste valable, indente correctement si tu veux pouvoir te relire et éviter des erreurs bêtes.

Et en utilisant un éditeur avec coloration syntaxique, tu remarqueras que tu as oublié d'échapper une '

Message édité le 21 décembre 2014 à 20:37:54 par RogerLeCaillou
Pseudo supprimé
Pseudo supprimé 21 décembre 2014 à 21:04:43

C'est indenté sur le script d'origine, mais j'ai fait un copié/collé et cela ne m'a pas pris l'indentation. Pour la coloration syntaxique j'utilise nano, il me convient très bien. Par contre je n'ai pas bien compris ta dernière phrase. Où est mon erreur?

Pseudo supprimé
Pseudo supprimé 21 décembre 2014 à 21:11:24

Ok j'ai vu mon erreur, merci ! Ligne 51 une apostrophe n'avait pas été annulée. :merci: mille fois ! Le script fonctionne nickel !

Message édité le 21 décembre 2014 à 21:11:54 par Pseudo supprimé
Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment