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 :

La programmation "Shell" [Tutoriel]


Sujet :

Shell et commandes GNU

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut La programmation "Shell"
    Bonjour à tous.

    Je vous propose le cours suivant : La programmation "Shell"

    Cet article est un cours complet sur l'apprentissage de la programmation Shell.

    Ce cours propose globalement une syntaxe Bourne Shell avec quelques éléments spécifiques aux shells de même famille dits "plus évolués" (Korn Shell ou Bourne Again Shell) qui seront indiqués au moment où cela sera nécessaire. Le Bourne Shell étant intégralement supporté par le Korn Shell et le Bourne Again Shell (et leurs descendants), cela permet une compatibilité ascendante : un script en Bourne Shell fonctionnera toujours en environnements Korn Shell ou Bourne Again Shell ou shells descendants.
    N'hésitez pas à laisser vos impressions 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]

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Bravo! Gros boulot.

    [erratum]J'ai pas tout lu mais page 3 III-C, le texte parle de set -* alors que l'exemple affiche set ?x.[/erratum]
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Il s'agit bien d'une erreur à la génération du document je pense. Je vais corriger ça.



    EDIT : corrigé

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut


    préciser qu'il existe deux ksh : ksh88 et ksh93 ?

    II-B
    afin de ne pas induire un futur contre-sens sur la signification du signe égal (qui fait une comparaison lexicale, et même si 5 peut être comparé lexicalement), je préférerais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test "chaîne" = "chaîne"
    III-A
    je préconise de mettre tout de suite les chaînes à afficher entre guillemets, avant que le lecteur n'essaie d'afficher des caractères qui demandent d'être protégés : ', (, *, ...

    IV-C
    un point d'interrogation remplace un tiret.
    lire :
    et nonil y en a encore à d'autres endroits.

    V
    $( ) est une spécification POSIX. Ce n'est plus depuis longtemps reservé aux shells "évolués".

    VI
    la différence entre $* et $@ est visible lorsqu'ils sont mis entre guillemets
    "$*" tous els arguments ne font qu'un seul mot
    "$@" les arguments sont "séparés"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in "$*"; do echo "< $i >"; done
    < arg1 arg2 argn >
    for i in "$@"; do echo "< $i >"; done
    < arg1 >
    < arg2 >
    < argn >
    VIII-B-7
    expr est une commande externe, on peut faire ce test en sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test \( $(($y % 4 )) -eq 0 -a $(($y % 100)) -ne 0 \) -o $(( $y % 400 )) -eq 0
    IX-E
    je ne dis rien

    IX-F
    pourquoi ne pas montrer tout de suite la façon de faire avec l'* ?

    XI-D
    pas que les shells récents, c'est une spécification POSIX.

    XI-D
    le < doit être collé au numéro de descripteur de fichier
    XI-F
    là, on a vu l'évaluation arithmétique, on pourrait s'en servir pour le shift OPTIND

    XII-A
    expr n'est pas une commande interne (je l'ai déjà dit ? je radote, paraît-il.)

    XII-B
    mais grep non plus
    il faut peut-être le préciser dans le titre du chapitre ?


    à part ça :
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,

    Alors là, les gars, très bon boulot...
    On devrait maintenant voir apparaitre plus de script en pur shell...
    Sinon, même chose que Flodelarab en:
    IV-C, on a un read ?a au lieu de read -aIX-G, dans l'exemple, on a les test ? au lieu de test -.
    Dans la partie XII:
    l'option -l de wc ne compte pas les lignes mais les caractères newline:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo -n toto | wc -l
    0
    $ echo toto | wc -l
    1
    getopt permet aussi de gérer les options longues ce qui n'est pas le cas de getopts (voir exemples dans /usr/share/getopt/).

    A part ça, respect...
    Je me sens tout petit (Faut vraiment que je m'y mette à faire mon laïus sur sed).
    Cordialement.

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Merci pour vos commentaires. Oui visiblement on eu quelques que tirets qui sont mal passés lors de la gabarisation. Je vais faire une passe et les corriger au fur et à mesure.



    Idriss

    EDIT : bon j'ai corrigé ceux cités, il y en a peut être d'autres, je ferait une passe pour voir.

    Sinon je vais voir pour les autres remarques

  7. #7
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Re bonjour.

    Citation Envoyé par N_BaH Voir le message
    préciser qu'il existe deux ksh : ksh88 et ksh93 ?
    Personnellement j'ai indiqué que certaines choses étaient apparues en KSH88 comme la syntaxe des doubles crochets mais je ne connais pas suffisamment les spécificités de KSH pour faire le distinguo entre KSH 88 et 93. Je suis un utilisateur de Bash à 100%

    Citation Envoyé par N_BaH Voir le message
    pourquoi ne pas montrer tout de suite la façon de faire avec l'* ?
    Ben disons que l'on présente le cas utilisé généralement par beaucoup de monde, le bug présenté et la correction...

    Idriss

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    quand un utilisateur du forum pose une question à propos de ksh, j'ai souvent l'impression qu'il ne sait pas qu'il existe deux versions majeures de ce shell, qui sont l'une à l'autre ce que sh est à bash.

    seulement mentionner cette coexistence peut inciter le lecteur, alors, à préciser la version qu'il utilise lorsqu'il aura une question.
    non ?

    on présente le cas utilisé généralement par beaucoup de monde
    parce que c'est en général le mauvais exemple donné sur les tutos.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    parce que c'est en général le mauvais exemple donné sur les tutos.
    Ouais, de toute façon, je suis en préparation d'un autre tuto pour inciter aux bonnes pratiques et ceci en fait partie.

    getopt permet aussi de gérer les options longues ce qui n'est pas le cas de getopts (voir exemples dans /usr/share/getopt/).
    Ça aussi, c'est dans un prochain tuto. On va pas trop en parler ici mais le brouillon est là. Si vous voulez qu'on en parle, on pourra ouvrir une discussion dans le forum "Contribuez" car beaucoup d'entre vous n'ont pas forcement l'accès à notre forum de relecture technique avant publication.

    Citation Envoyé par N_BaH Voir le message
    seulement mentionner cette coexistence peut inciter le lecteur, alors, à préciser la version qu'il utilise lorsqu'il aura une question.
    non ?
    Si pourquoi pas
    Je vais voir pour l'ajouter.


  10. #10
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # Chargement des fichiers dans les tampons numérotés "3" et "4"
    exec 3 </etc/passwd
    exec 4 </etc/group
    en XI-E là aussi le 3< et 4< il y a l'espace mal placé.

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Citation Envoyé par frp31 Voir le message
    en XI-E là aussi le 3< et 4< il y a l'espace mal placé.
    En effet, merci, je corrige ce soir

  12. #12
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    par contre bravo pour l'aspect rédactionnel parce qu'expliquer le shell de façon claire est pas toujours facile...

  13. #13
    Membre régulier
    Homme Profil pro
    Ingénieur système Unix
    Inscrit en
    Mai 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur système Unix

    Informations forums :
    Inscription : Mai 2013
    Messages : 41
    Points : 95
    Points
    95
    Par défaut
    Excellent article qui ravira les débutants
    www.journaldunadminlinux.fr
    La connaissance est la seule chose qui grandit quand on la partage

  14. #14
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonsoir.

    Plusieurs corrections effectuées dont celles que vous avez cités (tirets remplacés par des '?', espaces en trop...). J'ai aussi mentionné qu'aujourd'hui deux versions majeurs de KSH (88 et 93) étaient couramment utilisés.

    à tous.

  15. #15
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Je n'ai pas encore lu mais je tiens à vous dire "bien joué !" : Sve@r parce que je l'aime bien et Idriss parce que c'est mon responsable

    EDIT: j'ai commencé à lire, je noterai mes remarques ici au fur et à mesure
    deux éléments distincts sont toujours séparés par une espace
    Citation Envoyé par III-B. Les commentaires
    Il est placé en le faisant précéder du caractère croisillon (« # »).
    Citation Envoyé par III-D. Qui exécute ?
    Ici, cas particulier, le caractère « # » (croisillon) de la première ligne combiné au caractère « ! » (point d'exclamation)
    Mince... Quand je cite le message, les deux caractères sont les mêmes mais mon navigateur (Chrome) m'affiche un signe "différent" (≠) dans la partie III-D. Très bizarre mais en zoom 100 %, le deuxième s'affiche mal car il n'est pas en gras. En (dé)zoomant d'un cran, il s'affiche correctement.

    EDIT : En fait, l'affichage de ce message est correct en mode édition mais pas en mode lecture (zoom 100%). Je vois deux signes "différent" en mode lecture. Cf pièce jointe.

    De plus, ce signe n'est-il pas simplement un dièse ? OK, je viens de lire Wikipédia à ce sujet Ne serait-il pas utile de le préciser ? Je pense que plein de gens apprendrait quelque chose !
    Images attachées Images attachées  

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bktero Voir le message
    De plus, ce signe n'est-il pas simplement un dièse ? OK, je viens de lire Wikipédia à ce sujet Ne serait-il pas utile de le préciser ? Je pense que plein de gens apprendrait quelque chose !
    Outch je viens aussi de découvrir cette différence
    Moi non plus je ne connaissais pas la différence. Et en plus je joue du piano donc le "dièse" je connais un peu
    Mais la différence typographique est quand-même difficile à remarquer si on ne met pas le nez dessus
    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]

  17. #17
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Moi qui élevait toujours !/bin/bash ou !/bin/sed d'un demi-ton, je suis déçu.

    Ok, je sors; je suis déjà dehors.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  18. #18
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Oui c'est ClaudeLeLoup qui me l'a appris récemment au moment de la relecture orthographique

    => http://quelleestladifference.blogspo...-le-diese.html

    Sinon les "une espace" vs "un espace" les deux se disent je pense ... la première forme est surtout employée par les typographes (et ce cours ne concerne pas vraiment la typographie ).

  19. #19
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Bonjour,

    Citation Envoyé par ok.Idriss
    Sinon les "une espace" vs "un espace" les deux se disent je pense ...
    C'est avant tout confondre (ce qui est courant je l'avoue) une surface (un espace) et un caractère d'espacement (une espace). Un simple dictionnaire devrait permettre d'en confirmer le sens.

    Et juste pour pinailler. On ne met pas d'espace entre le mot et les points de suspension (cf. citation ci-dessus).

    Sinon superbe travail merci pour celui-ci.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

Discussions similaires

  1. Livre sur la programmation linux (shell et noyau)
    Par Tchetch dans le forum Linux
    Réponses: 10
    Dernier message: 07/07/2004, 08h27

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