Scripting shell: options -z et -n avec if

Jai un script shell où nous avons les lignes suivantes if [ -z "$xyz" ] et if [ -n "$abc" ], mais je ne sais pas quel est leur objectif. Quelquun peut-il expliquer?

Réponse

Vous pouvez trouver une très belle référence pour les opérateurs de bash ici . Si vous utilisez un autre shell, recherchez simplement <my shell> operators et vous trouverez tout ce dont vous avez besoin. Dans votre cas particulier, vous êtes en utilisant:

-n string is not null. -z string is null, that is, has zero length 

Pour illustrer:

$ foo="bar"; $ [ -n "$foo" ] && echo "foo is not null" foo is not null $ [ -z "$foo" ] && echo "foo is null" $ foo=""; $ [ -n "$foo" ] && echo "foo is not null" $ [ -z "$foo" ] && echo "foo is null" foo is null 

Commentaires

  • Si vous ne parvenez pas à faire fonctionner -n, cela peut être dû au fait que vous suivez de mauvais guides sur le Web (par exemple GeeksforGeeks ou TutorialsPoint ) qui ne citent pas les variables. Cette réponse, et le guide lié ici, citent correctement Si vous utilisez -n sans les guillemets, cela vous dira que ' nest pas vide même quand il est! @terdon, merci beaucoup!

Réponse

man test ou man [ vous donnera toutes les options pour tester la commande. Dans ce cas, -n teste pour voir si le contenu de $ abc a une longueur non nulle et -z teste si le contenu de $ xyz est une chaîne de longueur nulle.

Commentaires

  • man [ne ' t fonctionne pour moi dans GNU bash, version 4.1.2 (1) -release (x86_64- redhat-linux-gnu). Mais +1 pour le test man.
  • Remarque man test (toujours?) Donne la page de manuel pour la version du programme externe, qui (pour la version GNU-coreutils à au moins) avertit explicitement que certains shells (IME most) ont une version intégrée qui peut être différente.

Answer

Pour étendre la réponse de terdon « , jai trouvé que Unix / Linux – Opérateurs de base du shell sur les didacticiels Point inclut également des opérateurs liés aux fichiers (ainsi que dautres utiles).

-b file Checks if file is a block special file; if yes, then the condition becomes true. [ -b $file ] is false. -c file Checks if file is a character special file; if yes, then the condition becomes true. [ -c $file ] is false. -d file Checks if file is a directory; if yes, then the condition becomes true. [ -d $file ] is not true. -f file Checks if file is an ordinary file as opposed to a directory or special file; if yes, then the condition becomes true. [ -f $file ] is true. -g file Checks if file has its set group ID (SGID) bit set; if yes, then the condition becomes true. [ -g $file ] is false. -k file Checks if file has its sticky bit set; if yes, then the condition becomes true. [ -k $file ] is false. -p file Checks if file is a named pipe; if yes, then the condition becomes true. [ -p $file ] is false. -t file Checks if file descriptor is open and associated with a terminal; if yes, then the condition becomes true. [ -t $file ] is false. -u file Checks if file has its Set User ID (SUID) bit set; if yes, then the condition becomes true. [ -u $file ] is false. -r file Checks if file is readable; if yes, then the condition becomes true. [ -r $file ] is true. -w file Checks if file is writable; if yes, then the condition becomes true. [ -w $file ] is true. -x file Checks if file is executable; if yes, then the condition becomes true. [ -x $file ] is true. -s file Checks if file has size greater than 0; if yes, then condition becomes true. [ -s $file ] is true. -e file Checks if file exists; is true even if file is a directory but exists. [ -e $file ] is true. 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *