logo
  • Accueil
  • Apprendre
  • Partager
  • Blog
  • Connexion
  • S'inscrire
  • Publier Une Fiche
 
Pseudo           
 
Mot de passe   
 
Passe oublié ? | Inscription
 
  
  • Apprendre
  • Catégories/Fiches
  • Nouveautés
  • Tags
  • Rechercher

    avatar Utilisateur non identifié
    S'inscrire pour publier

Comment résoudre un script Shell Unix en erreur ?

1473

Catégorie : Programmation    Création : Vendredi 18 Mai 2007

1473 consultation(s)   -   1 édition(s)   -   0 commentaire(s) - imprimer cette fiche

Tout d'abord, la question indispensable : Qu'est ce que le Shell Unix ?

Il s'agit d'un interpreteur de commande qui permet à l'aide d'un texte (code) d'executer des actions comme :
- la manipulation de fichier (déplacer, supprimer, renommer, comparer deux fichiers, visualiser/changer les droits ...)
- manipulation et lecture du contenu d'un fichier avec tout une panoplie de commande de manipulation et recherche de texte.


et tout comme un langage de programmation, on retrouve :
- utilisation de variable
- Structure conditionnelle (if...else...)
- boucle
- fonction


Bref, le Shell est puissant certe ! Mais quand il ne fonctionne pas (ou plus), c'est loin d'être évident de le corriger.

Dans cette article, vous trouverez toutes une serie d'astuces et de commandes pouvant vous aider à trouver et comprendre votre erreur.
Je pars du principe que vous connaissez déjà un peu le shell, suffisamment pour comprendre les redirections (>>...), echo .... cette article n'est pas un cours mais un guide pour débugger son script.

Les problèmes :


1- Tout d'abord, le script refuse de s'executer. J'ecrit même un echo au tout debut mais rien a faire, que faire ?

C'est le cas typique du script qui n'a pas les droits pour s'exécuter. Tapez la commande "ls -l" pour connaitre les droits sur votre fichier. (affichage du type "rwxrw-r--"). Les droits d'exécution du fichier sont représentés par la lettre "x". Si vous n'en voyez pas, c'est que vous n'avez pas l'autorisation de l'exécuter et c'est la raison de votre problème.

Comment y remédier ? En utilisant la commande "chmod" :
chmod 777 nomFichier pour donner tous les droits (lecture, ecriture,  exécution) à tout le monde (créateur, groupe, autre).
chmod 111 nomFichier pour donner le droit d'exécution a tout le monde
chmod 700 nomFichier pour donner tous les droits mais uniquement au createur du fichier et aucun aux autres.
...

2- Mon script tourne en boucle sans s'arreter.

Assurez-vous d'abord qu'il ne s'agit pas d'un traitement long mais effectivement d'une execution "en boucle".
Pour l'arreter de tourner, pressez tout simplement les touches CTRL+C. Ca ne resoud pas le problème, mais ca permet d'arreter l'exécution du script. Pour régler le probleme, vérifier toutes vos boucles et récursivité afin que chacun dispose d'une condition d'arrêt "possible".

3- J'ai mis un "echo" mais rien ne s'affiche.

La commande echo permet par defaut d'afficher du contenu à l'écran. Cependant, elle ne s'arrete pas là. Si elle est suivi par un > nomFichier ou encore >> nomFichier, alors le echo s'ecrira dans le fichier nomFichier et rien ne s'affichera à l'écran. Si le echo est suivi de "/dev/null", le echo sera ignoré (non affiché).

Que puis-je vérifier dans mon programme ?

- Le truc tout bête : la syntaxe du code.

  Exemples :
    - ma declaration de variable (ou affectation de valeur dans une variable) est-elle bien ecrit "mavariable=valeur" et non "mavariable = valeur" (sans espace avant et après le "=")
    - Un "if" se termine bien par "fi", et un "do" par "done"
    - ouverture/fermeture des parenthèses


- Les valeurs que prennent vos variables à l'instant t (grâce à des "echo")

- Si vous n'etes pas sur de l'utilisation d'une fonction ou commande Shell, testez-là à part. (vous pouvez également utiliser la commande "man laCommande" pour afficher l'aide sur une commande précise).

- Si vous utilisez $? (pour récupérer le résultat de la derniere commande) ou une autre du meme genre, assurez-vous qu'il n'y ait pas d'instruction(s) entre la commande concernée et le $?. Vérifiez egalement la valeur de $? par un echo.
 

Et une autre commande utile pour déboguer ?

Oui bien sur !

Ecrivez "set -x" en debut de script et "set +x" en fin de script. A l'execution du script, chaque commande executé entre le set -x et le set +x sera affiché. Si le script est très long, utilisez pour executez le script la commande suivante : "nomScript 2>> fichierDestination". Le 2>> utilise le flux d'erreur et ecrit ainsi les erreurs ainsi que l'affichage provoqué par set -/+ x dans le fichier "fichierDestination".

Ceci est très utile car il vous permet de voir pas a pas toutes les commandes executées dans l'ordre. (et également avec le contenu des variables)




J'espère que ce tutorial sera utile a tous les scripteurs unix débutant ou en désespoir face à leur code.
Si vous avez d'autres astuces ou remarques à ajouter dans l'article, n'hésitez pas à le modifier pour le rendre encore plus complet.




J'ai testé cette fiche

Ajouter un commentaire


Fiche testée par , le Mercredi 01 Octobre 2008

polo6
Auteur de 62 fiches

Ajoutez votre version
Note : 1  3 2  3 3  3 4   3 5   3

Information

  • Navigation : Retour haut de page
  • Themes : shell, unix, erreur
  • Autorisation de reproduction : Creative Commons

Fiche dans la même catégorie

  • 410

    Comment créer un site multilingue ?

    Une fiche de cbil

  • 316

    Comment créer un flux rss ?

    Une fiche de polo6

  • 2408

    Comment traiter un fichier Excel en JAVA avec l'API JXL ?

    Une fiche de cbil


Sponsors


skilltoo
test sponsor
http://www.skilltoo.com

Categories

  • Vie quotidienne
  • Travaux Artistiques
  • Education
  • Informatique
  • Loisirs
  • Sport
  • Business
  • Internet
  • Bon plans




En bref

Skilltoo est une application de partage du savoir-faire communautaire et Web2.0.
Notre but est de rassembler un maximum de savoir sur un seul site.

Skilltoo est une application Web2.0 éditée par Elyweb SARL - Copyright 2007 / 2008