Script de shell: opções -z e -n com if

Eu tenho um script de shell onde temos as seguintes linhas if [ -z "$xyz" ] e if [ -n "$abc" ], mas não tenho certeza de qual é o seu propósito. Alguém pode explicar?

Resposta

Você pode encontrar uma referência muito boa para operadores bash “s aqui . Se você estiver usando um shell diferente, basta pesquisar <my shell> operators e encontrará tudo o que precisa. Em seu caso específico, você está usando:

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

Para ilustrar:

$ 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 

Comentários

  • Se você está tendo problemas para fazer o -n funcionar, pode ser porque você está seguindo alguns guias ruins na web (por exemplo GeeksforGeeks ou TutorialsPoint ) que não citam as variáveis. Esta resposta e o guia vinculado aqui, citam corretamente Se você usar -n sem citar, ele dirá que ' não está vazio mesmo quando está! @terdon, muito obrigado!

Resposta

man test ou man [ lhe dará todas as opções para testar o comando. Nesse caso, -n está testando para ver se o conteúdo de $ abc tem um comprimento diferente de zero e -z está testando para ver se o conteúdo de $ xyz é uma string de comprimento zero.

Comentários

  • man [não ' não funciona para mim no GNU bash, versão 4.1.2 (1) -release (x86_64- redhat-linux-gnu). Mas +1 para teste man.
  • Nota man test (sempre?) Fornece a página man para a versão do programa externo, que (para a versão GNU-coreutils em mínimo) avisa explicitamente que alguns (a maioria IME) shells têm uma versão integrada que pode ser diferente.

Resposta

Para estender a resposta de terdon “, descobri que Unix / Linux – Operadores básicos do shell em tutoriais apontam também inclui operadores relacionados a arquivos (bem como outros úteis).

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *