Bases de Linux et de la ligne de commande

if [ -f "$f" ]; then
  echo "found"
fi

Dans un script shell, dans quel cas la condition du if ci-dessus est-elle vraie ?

  1. ALorsqu'un fichier ordinaire portant le nom contenu dans la variable f existe
  2. BLorsqu'un fichier portant le nom contenu dans la variable f existe et que sa taille est supérieure à 0
  3. CLorsqu'un fichier ou un répertoire portant le nom contenu dans la variable f existe
Afficher la réponse et l'explication

Réponse : A. Lorsqu'un fichier ordinaire portant le nom contenu dans la variable f existe

[ ] est une autre façon d'écrire la commande test : elle renvoie le code de retour 0 (vrai) si la condition est remplie, et if choisit sa branche d'après ce code. -f vérifie qu'« un fichier ordinaire portant ce nom existe » et donne faux pour un répertoire. Pour vérifier seulement l'existence, on utilise -e ; pour vérifier qu'il s'agit d'un répertoire, -d ; et pour vérifier que la taille est supérieure à 0, -s. Un espace est nécessaire après [ et avant ], et placer la variable entre guillemets doubles, comme "$f", permet de tester correctement même les noms qui contiennent des espaces.

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

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

  1. Quels fichiers se trouvent dans le répertoire après la session ci-dessus ?
  2. 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 ?
  3. Si l'on exécute dans l'ordre les commandes ci-dessus, quelle est la combinaison des sorties des deux commandes bash -c ?
  4. 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.) ?
  5. Sur un système Linux qui utilise systemd, quelle est la différence entre « systemctl start license.service » et « systemctl enable license.service » pour le service license.service ?