Я перепробовал все возможные комбинации, чтобы заставить этот скрипт 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