Shell szkriptelés: -z és -n opciók if

Van egy shell parancsfájlom, ahol a következő sorok vannak if [ -z "$xyz" ] és if [ -n "$abc" ], de nem vagyok biztos benne, mi a céljuk. Tud valaki magyarázatot adni?

Válasz

Nagyon jó referenciát talál a bash operátorokhoz itt . Ha másik héjat használ, keressen rá a <my shell> operators kifejezésre, és mindent megtalál, amire szüksége van. a következő használatával:

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

Illusztráció:

$ 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 

megjegyzések

  • Ha gondja van a -n munkába állításával, az oka lehet, hogy néhány rossz útmutatót követ az interneten (például GeeksforGeeks vagy TutorialsPoint ), amelyek nem idézik a változókat. Ez a válasz és az ide linkelt útmutató helyesen idézi Ha a -n szót idézés nélkül használja, akkor azt mondja, hogy ' akkor sem üres, ha van! @terdon, nagyon köszönöm!

Válasz

man test vagy man [ megadja a parancs tesztelésének összes lehetőségét. Ebben az esetben az -n teszteli, hogy az $ abc tartalma nem nulla-e, és -z azt teszteli, hogy az $ xyz tartalma nulla hosszúságú karakterlánc-e.

Megjegyzések

  • az ember [nem működik ' nálam a GNU bash 4.1.2 (1) verziójának kiadásában (x86_64- redhat-linux-gnu). De +1 az ember tesztjéhez.
  • A man test megjegyzés (mindig?) Megadja a külső program verziójának man oldalát, amely (a GNU-coreutils verzióhoz a legkevésbé) kifejezetten figyelmeztet arra, hogy egyes (az IME legtöbb) héja rendelkezik beépített verzióval, amely eltérhet.

Válasz

A terdon válaszának kiterjesztése érdekében megállapítottam, hogy Unix / Linux – Shell Basic Operators on Tutorials Point fájlokkal kapcsolatos operátorokat (és más hasznosakat is) tartalmaz.

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük