Skriptování prostředí: Možnosti -z a -n s if

Mám shell skript, kde máme následující řádky if [ -z "$xyz" ] a if [ -n "$abc" ], ale nejsem si jistý, jaký je jejich účel. Může mi někdo vysvětlit?

Odpověď

Můžete najít velmi pěkný odkaz pro operátory bash zde . Pokud používáte jiný shell, stačí vyhledat <my shell> operators a najdete vše, co potřebujete. V konkrétním případě jste pomocí:

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

Pro ilustraci:

$ 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 

Komentáře

  • Pokud máte potíže se spuštěním -n, může to být proto, že na webu sledujete špatné průvodce (například GeeksforGeeks nebo TutorialsPoint ), které proměnné necitují. Tato odpověď a zde odkazovaný průvodce správně citují it. Pokud používáte -n bez uvedení uvozovek, řekne vám, že ' není prázdný, i když je! @terdon, moc děkuji!

odpověď

man test nebo man [ vám poskytne všechny možnosti k testování příkazu. V tomto případě testuje -n, zda má obsah $ abc nenulovou délku, a -z testuje, zda je obsah $ xyz řetězec s nulovou délkou.

Komentáře

  • muž [nepracuje ' pro mě nepracuje v GNU bash, verze 4.1.2 (1) -release (x86_64- redhat-linux-gnu). Ale +1 pro test člověka.
  • Poznámka man test (vždy?) Dává manuálovou stránku pro verzi externího programu, která (pro verzi GNU-coreutils na nejméně) výslovně varuje, že některé (nejvíce IME) skořápky mají vestavěnou verzi, která se může lišit.

Odpověď

Abych rozšířil terdonovu odpověď , zjistil jsem, že Unix / Linux – Shell Basic Operators on Tutorials Point zahrnuje také operátory související se soubory (stejně jako další užitečné).

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *