Shell-skripting: -z og -n alternativer med hvis

Jeg har et skallskript der vi har følgende linjer if [ -z "$xyz" ] og if [ -n "$abc" ], men jeg er ikke sikker på hva formålet deres er. Kan noen vennligst forklare?

Svar

Du kan finne en veldig fin referanse for bashs operatører her . Hvis du bruker et annet skall, er det bare å søke etter <my shell> operators, så finner du alt du trenger. I ditt spesielle tilfelle er du bruker:

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

For å illustrere:

$ 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 

Kommentarer

  • Hvis du har problemer med å få -n til å fungere, kan det være fordi du følger noen dårlige guider på nettet (for eksempel GeeksforGeeks eller TutorialsPoint ) som ikke siterer variablene. Dette svaret, og guiden som er lenket her, siterer riktig Hvis du bruker -n uten å sitere, vil den fortelle deg at den ' ikke er tom selv når den er! @terdon, tusen takk!

Svar

man test eller man [ gir deg alle alternativene for å teste kommandoen. I dette tilfellet tester -n for å se om innholdet på $ abc har en lengde som ikke er null, og -z tester for å se om innholdet av $ xyz er en streng med null lengde.

Kommentarer

  • mann [fungerer ikke ' t fungerer for meg i GNU bash, versjon 4.1.2 (1) -release (x86_64- redhat-linux-gnu). Men +1 for manntest.
  • Merk man test (alltid?) Gir mansiden for den eksterne programversjonen, som (for GNU-coreutils versjon kl. minst) advarer eksplisitt at noen (IME most) skjell har en innebygd versjon som kan være annerledes.

Svar

For å utvide terdons svar , fant jeg ut at Unix / Linux – Shell Basic Operators on Tutorials Point inkluderer også filrelaterte operatører (så vel som andre nyttige).

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *