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
-c
significa 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 $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
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