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

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

Eu tentei todas as combinações possíveis para fazer esse script bash funcionar. Faz parte de um script maior e basicamente solicita um nome de usuário (para verificar se 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 read '^${uzer}:'sem nenhuma alegria. Alguma idéia do que mais posso tentar?

Responder1

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

Segundo problema: todas as suas variáveis, como $uzernã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

Responder2

Você precisa grep -q. Se você não distinguir entre mais códigos de saída além de "0" e "outros", 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

informação relacionada