
Fiquei pensando se alguém 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 verifique o diretório de existência). Minha pergunta é como posso encontrar descrições sobre esses comandos (ig man page -d/-z). Eles só podem ser usados com a instrução if-else?
Responder1
Os -d
e -z
não são comandos, mas opções para os utilitários test
e [
. Esses utilitários estão integrados bash
e documentados no bash
manual. Esses utilitários e sinalizadores também são padronizados pelo POSIX, portanto, estão disponíveis em qualquer shell POSIX, não apenas no bash
.
Se você estiver em uma bash
sessão interativa, poderá obter documentação para as variantes integradas desses utilitários digitando help test
( help [
também funciona, mas seu texto refere-se apenas à documentação de test
).
man test
e man [
deve funcionar também. Esses manuais descrevemexternoutilitários, provavelmente /bin/test
e /bin/[
, não aqueles que você usa por padrão no bash
.
Então, por exemplo,
! 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 preferir,
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 só usei o -z
teste acima porque foi mencionado na pergunta, o -d
teste em uma string vazia falharia de qualquer maneira).
Veja também: