Não encontrando comandos bash

5

Eu me pergunto com alguém que pode me ajudar:

if [ -z $1 ]; then                                                                                                                                                                                                                                                             
  user=$(whoami)                                                                                                                                                                                                                                                         
else                                                                                                                                                                                                                                                                           
  if [ ! -d "/home/$1" ]; then                                                                                                                                                                                                                                           
    echo "Requested $1 user home directory doesn't exist."                                                                                                                                                                                                         
    exit 1                                                                                                                                                                                                                                                         
  fi                                                                                                                                                                                                                                                                     
  user=$1                                                                                                                                                                                                                                                                
fi 

Eu estava estudando alguns comandos bash quando vi dois comandos: -z e -d . Eu sei o que eles fazem (primeiro verifique a variável em branco e a segunda verificação do diretório de existência). Minha pergunta é como eu posso encontrar descrições sobre esses comandos (por exemplo, man page -d / -z). Eles podem ser usados apenas com instruções if-else?

    
por Pedro Gabriel Lima 01.06.2018 / 14:36

1 resposta

8

Os -d e -z não são comandos, mas opções para os utilitários test e [ . Esses utilitários são criados em bash e documentados no manual bash . Esses utilitários e esses flags também são padronizados pelo POSIX, então eles estão disponíveis em qualquer shell POSIX, não apenas bash .

Se você estiver em uma sessão bash interativa, poderá obter a documentação das variantes incorporadas desses utilitários digitando help test ( help [ também funciona, mas seu texto apenas se refere à documentação de test ).

man test e man [ também devem funcionar. Estes manuais descrevem os utilitários externos , provavelmente /bin/test e /bin/[ , não os que você usa por padrão em bash .

Então,

! test -z "$dir" && test -d "$dir" && printf '%s is a directory' "$dir"

é exatamente equivalente a

! [ -z "$dir" ] && [ -d "$dir" ] && printf '%s is a directory' "$dir"

ou, se você quiser,

if ! test -z "$dir" && test -d "$dir"; then
    printf '%s is a directory' "$dir"
fi

e

if ! [ -z "$dir" ] && [ -d "$dir" ]; then
    printf '%s is a directory' "$dir"
fi

( ! [ -z "$dir" ] provavelmente seria mais comumente escrito [ ! -z "$dir" ] ou [ -n "$dir" ] , e eu usei somente o teste -z acima porque foi mencionado na pergunta, o teste -d em uma string vazia falharia de qualquer maneira).

Veja também:

por 01.06.2018 / 15:31

Tags