bash - чтение пользовательской переменной в скрипт bash grep

bash - чтение пользовательской переменной в скрипт bash grep

Я перепробовал все возможные комбинации, чтобы заставить этот скрипт bash работать. Это часть более крупного скрипта, и он в основном запрашивает имя пользователя (чтобы проверить, существует ли он) и возвращает соответствующий ответ:

#! /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

В терминале следующее работает нормально:

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

Я пробовал много комбинаций передачи переменной read в '^${uzer}:'без радости. Есть идеи, что еще я могу попробовать?

решение1

-cозначает, что вы хотите узнать, сколько раз этот пользователь находится в /etc/passwd, а $?это код выхода. Это разные вещи, так как количество раз выводится на stdout. Используйте $()для перевода stdout в переменную

Вторая проблема: все ваши переменные, например, $uzerне будут заменены своими значениями, если они заключены в одинарные кавычки. Используйте двойные кавычки.

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

решение2

Вам нужно grep -q. Если вы не различаете больше кодов выхода, чем "0" и "другие", нет необходимости разделять grep и if:

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

Связанный контент