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
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.
-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!