Cria um script que usa uma palavra como argumento do usuário

-1
echo "Enter your string"  
read str;

Como posso verificar se o usuário transmitiu uma palavra, exibindo uma declaração de uso se uma palavra não foi passada como argumento.

    
por qwerty 31.10.2014 / 21:29

3 respostas

1

Caso você queira forçar o usuário a digitar uma string, não um valor numérico, e continuar perguntando até que a entrada preencha o requisito, eu definitivamente usaria um teste em um loop while, como:

#!/bin/bash

while true; 
do
  echo "Enter your string"
  read str;
  echo "${str}" | grep -q '[0-9]'
  if [ $? != 0 ] && [ "$str" != "" ] ; then
    break
  else 
    echo 'Invalid input' 
  fi
done
# use the input for further processing
echo $str

(usando o teste de este post )

    
por Jacob Vlijm 31.10.2014 / 22:32
2
[ "$str" ] || { echo "This is my usage statement"; exit 1; }

Isso usa test , denotado por [...] . Em sua forma mais simples, como usado aqui, ele apenas testa se a string não está vazia (retornando sucesso / true) ou vazia (retornando falha / false). O operador de controle, || , executa a instrução que segue somente se a instrução anterior retornou false.

Presumi que, se o usuário não inserisse um str não vazio, você desejaria sair com um código de falha depois de emitir a instrução de uso. Caso contrário, remova o exit 1 .

Se você tiver algo mais complexo para fazer, use uma instrução if mais formal:

if [ "$str" ]
then
    echo "This is my usage statement"
    # do other stuff....
    exit 1
fi

O acima deve funcionar em qualquer shell POSIX incluindo dash ( /bin/sh ) e bash .

Outros testes

Aqui estão dois testes relacionados (ambos exigem bash ):

[ "${str//[^[:digit:]]/}" ] || { echo "You entered no numbers"; exit 1; }

E

[ "${str//[^[:alpha:]]/}" ] || { echo "You entered no letters"; exit 1; }
    
por John1024 31.10.2014 / 21:31
0

Você poderia tentar usar a string $ e digitar no terminal:

echo "digite seu nome"; string $    leia string $

e pode funcionar bem assim.

    
por Michael 31.10.2014 / 23:57