Bash: Testando strings

Para testar se uma string é vazia:

test -z "string" # testa string
echo $? # retorna 1 para string não vazia
1 # valor de retorno, indica que a string não é vazia

test -n "string" # testa se a string é "não vazia"

Podemos usar um par de colchetes "[ ]" substituindo assim o nome 'test' e um opcional "||"

[ -z "string" ] || echo "string não vazia"

# ou a pasta existe ou será criada dinamicamente, no final acabamos dentro dela.
[ -d casa ] || mkdir casa ; cd casa


uma lista bem completa de opções que peguei aqui:
Testes em variáveis:

-lt Número é menor que (LessThan)
-gt Número é maior que (GreaterThan)
-le Número é menor igual (LessEqual)
-ge Número é maior igual (GreaterEqual)
-eq Número é igual (EQual)
-ne Número é diferente (NotEqual)
= String é igual
!= String é diferente
-n String não é nula
-z String é nula


Testes em arquivos:

-d É um diretório
-f É um arquivo normal
-s O tamanho do arquivo é maior que zero
-r É arquivo tem permissão de leitura
-w O arquivo tem permissão de escrita
-nt O arquivo é mais recente (NewerThan)
-ot O arquivo é mais antigo (OlderThan)
-ef O arquivo é o mesmo (EqualFile)


este recurso é bom para o caso em que você quer testar uma variável e caso não exista
tal valor você pode defini-lo, no caso abaixo fazemos melhoramentos no ~/.bashrc de modo
a habilitar o "ignore-case" bash completion, a possibilidade de usar apenas um [TAB] na complementação de comandos bem como a correção do nome de pastas digitados com pequenos erros
no comando cd.

No script abaixo, se o grep retornar vazio ele colocará as opções
no ~/.bashrc


Evitando erros no comando teste - sempre coloque sua string entre aspas
avoid erros.
Always put your string between quotation marks

Observe que a string que está sendo testada deve estar dento de aspas duplas ou simples, já que o comando test, veja que o comando grep está envolvido em crases fazendo o que chamamos de
`substituição de processos`, retornando na sua posição a saida do comando propriamente dito, tudo isto é então envolvido em aspas duplas.

Vejamos um exemplo em que a falta de apas gerou um erro:
http://www.mail-archive.com/redhat-list@redhat.com/msg69853.html

O erro citado no link acima foi:
./test.sh: [: too many arguments

O motivo é simples o comando test recebe apenas um parâmetro e o camarada estava fazendo assim:

if [ -n `mount |grep "/mnt/root/cschomeserver/e"` ] #if it's already mounted don't
mount it
then PREMOUNTED='YES' && echo "is mounted" #If it's already mounted set a var
else echo "mount /mnt/root/cschomeserver/e is not mounted" #if it's not mounted,
mount it.
fi

Note que o comando 'mount' jundo com o redirecionamento provavelmente retornará várias colunas
e que as mesmas não estão englobadas entre aspas. Compare com o nosso exemplo acima.

Nenhum comentário:

Postar um comentário

Insira seu comentário - O mesmo será submetido à aprovação!

linux-cookbook

Grupos do Google
Participe do grupo linux-cookbook
E-mail:
Visitar este grupo