Scripts : variables et arguments

La ligne shebang et le droit d'exécution, l'affectation sans espaces, les guillemets simples et doubles, la substitution de commande et le calcul entier, read, et les paramètres $0, $1, $#, $@ : lire un script Bash et prévoir ce qu'il affiche.

  • 26 cartes
  • 4 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation

Quelques cartes du deck

  • Variable shell : de quoi s'agit-il ?

    Voir la réponse

    Nom auquel le shell associe un texte, posé par nom=valeur sans aucun espace autour du = et relu avec $nom.

    Sans le $, le shell ne lit pas la variable : echo nom affiche le mot nom, alors que echo $nom affiche sa valeur.

  • Le script s.sh ci-dessous est lancé par ./s.sh a "b c" d. Qu'affiche-t-il ?

    ```bash
    #!/bin/bash
    echo $#
    echo "$2"
    `

    • 3 puis b c
    • 4 puis b c
    • 3 puis b
    • 4 puis b
    Voir la réponse

    3 puis b c

    Les guillemets autour de b c en font un seul argument : il y en a donc trois, et le deuxième est b c.

  • Pour lancer un script par ./s.sh, il faut le droit d'exécution sur le fichier, posé avec … ; sa ligne …, en tête, désigne l'interpréteur qui l'exécutera.

    Voir la réponse

    Pour lancer un script par ./s.sh, il faut le droit d'exécution sur le fichier, posé avec chmod +x ; sa ligne shebang, en tête, désigne l'interpréteur qui l'exécutera.

    Sans le droit d'exécution, le lancement direct échoue (Permission denied) ; bash s.sh fonctionne quand même, car le fichier n'est alors que lu. Un shebang vers un chemin qui n'existe pas donne bad interpreter.

  • Paramètre positionnel : de quoi s'agit-il ?

    Voir la réponse

    Valeur reçue sur la ligne de lancement d'un script et désignée par son rang : $1 pour la première, $2 pour la deuxième, et ainsi de suite.

    $0 est le nom du script lui-même, $# le nombre de valeurs reçues, "$@" la liste de toutes ces valeurs, chacune restant un seul mot.

  • Un script écrit sous Windows, lancé par ./s.sh, répond bash: ./s.sh: /bin/bash^M: bad interpreter: No such file or directory, alors que /bin/bash existe. Quelle correction faut-il ?

    • Donner le droit d'exécution au script avec chmod +x s.sh
    • Remplacer la première ligne par #!/bin/sh, plus portable
    • Installer Bash, qui manque à l'emplacement /bin/bash
    • Convertir ses fins de ligne Windows en fins de ligne Unix, avec dos2unix
    Voir la réponse

    Convertir ses fins de ligne Windows en fins de ligne Unix, avec dos2unix

    Le ^M est le retour chariot que Windows place en fin de ligne : le système cherche un interpréteur nommé bash suivi de ce caractère, qui n'existe pas. Sans le droit x, le message serait Permission denied, et un autre shebang garderait le même ^M.