bash - lendo a variável de usuário no script bash grep

0

Eu tentei todas as combinações possíveis para fazer este script funcionar. Faz parte de um script maior e basicamente solicita um nome de usuário (para verificar se ele existe) e retorna a resposta apropriada:

#! /bin/bash
# Script to see if User exists

clear
echo -n "Enter user to check: "
read $uzer

grep -c '^${uzer}:' /etc/passwd

if [ $? -eq 0 ]; then
  echo "User does exist :)"
else
  echo "No such user"
fi

No terminal, o seguinte funciona bem:

grep -c '^devuser1:' /etc/passwd
RETURNS: 1
grep -c '^devuser1234:' /etc/passwd
RETURNS: 0

Eu tentei muitas combinações de passar a variável de leitura para '^${uzer}:' sem alegria. Alguma idéia do que mais eu posso tentar?

    
por maGz 29.04.2013 / 15:35

2 respostas

3

-c significa que você deseja saber o número de vezes que esse usuário está em /etc/passwd , enquanto $? é o código de saída. São diferentes, já que o número de vezes é impresso no stdout. Use $() para obter stdout em uma variável

Segundo problema: todas as suas variáveis, como $uzer , não serão substituídas por seus valores quando estiverem entre aspas simples. Use aspas duplas.

number=$(grep -c "^${uzer}:" /etc/passwd)
if [ $number -gt 0 ]; then
  echo "User does exist :)"
else
  echo "No such user"
fi
    
por 29.04.2013 / 15:41
2

Você precisa de grep -q . Se você não distinguir entre mais códigos de saída que "0" e "outro", não há necessidade de separar o grep e se:

if grep -q "^${uzer}:" /etc/passwd; then
  echo "User does exist :)"
else
  echo "No such user"
fi
    
por 29.04.2013 / 15:44