Shell scripting: -z și -n opțiuni cu if

Am un script shell unde avem următoarele linii if [ -z "$xyz" ] și if [ -n "$abc" ], dar nu sunt sigur care este scopul lor. Vă poate explica cineva?

Răspuns

Puteți găsi o referință foarte frumoasă pentru operatorii bash aici . Dacă utilizați un shell diferit, căutați doar <my shell> operators și veți găsi tot ce aveți nevoie. În cazul dvs. particular, sunteți folosind:

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

Pentru a ilustra:

$ 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 

Comentarii

  • Dacă întâmpinați probleme pentru ca -n să funcționeze, ar putea fi pentru că urmați niște ghiduri proaste pe web (de exemplu GeeksforGeeks sau TutorialsPoint ) care nu citează variabilele. Acest răspuns și ghidul legat aici, cită corect Dacă utilizați -n fără a cita, acesta vă va spune că ' nu este gol chiar și atunci când este! @terdon, mulțumesc mult!

Răspunde

man test sau man [ vă va oferi toate opțiunile pentru a testa comanda. În acest caz, -n testează pentru a vedea dacă conținutul lui $ abc are o lungime diferită de zero și -z testează pentru a vedea dacă conținutul lui $ xyz este un șir de lungime zero.

Comentarii

  • man [doesn ' nu funcționează pentru mine în GNU bash, versiunea 4.1.2 (1) -release (x86_64- redhat-linux-gnu). Dar +1 pentru testul man.
  • Notă man test (întotdeauna?) Oferă pagina man pentru versiunea programului extern, care (pentru versiunea GNU-coreutils la minimum) avertizează în mod explicit că unele shell-uri (cele mai multe IME) au o versiune încorporată care poate fi diferită. > Pentru a extinde răspunsul terdon , am constatat că Unix / Linux – Shell Basic Operators on Tutorials Point include, de asemenea, operatori legați de fișiere (precum și alți utili).

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *