Bases de Linux et de la ligne de commande

$ cat s.sh
#!/bin/bash
echo "$# $1"
$ ./s.sh a "b c" d

Comme ci-dessus, on exécute le script s.sh avec des arguments. Quelle est la sortie ?

  1. A3 ./s.sh
  2. B3 a
  3. C4 a
Afficher la réponse et l'explication

Réponse : B. 3 a

Dans un script, $1, $2 … sont le premier, le deuxième … argument, $# est le nombre d'arguments et $0 le nom du script lui-même. "b c" est placé entre guillemets doubles : il forme donc un seul argument contenant un espace, et il y a trois arguments, a, b c et d. Par conséquent, $# vaut 3 et $1 vaut a, et la sortie est 3 a. Pour transmettre tous les arguments à une autre commande en les gardant séparés, on écrit "$@".

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de Linux et de la ligne de commande

  1. Dans un script shell, dans quel cas la condition du if ci-dessus est-elle vraie ?
  2. Quels fichiers se trouvent dans le répertoire après la session ci-dessus ?
  3. Le script exécutable run.sh, situé dans le répertoire courant, donne « command not found » quand on le lance en tapant « run.sh », mais s'exécute quand on tape « ./run.sh ». Quelle en est la raison ?
  4. Si l'on exécute dans l'ordre les commandes ci-dessus, quelle est la combinaison des sorties des deux commandes bash -c ?
  5. Quelle est la fonction principale d'un système de gestion de paquets de Linux (apt sur les systèmes dérivés de Debian, dnf sur les systèmes dérivés de Red Hat, etc.) ?