Я застрял!
У меня есть сценарий. Я хочу проверить, является ли пользователь системным пользователем (спасибо @pLumo).
Я извлекаю своего системного пользователя во временный файл и проверяю, находится ли моя переменная во временном файле. Проблема в том, что я не могу выйти из цикла, когда нажимаю q, потому что команда grep не находит пользователя «q» во временном файле.
read -p "Enter the username you want to delete (q to quit) " name
user=$( cut -d: -f1 /etc/passwd | grep -w "^$name$" ) 2>>/dev/null
awk -F: '$3 >= 1000 && $3 <= 60000 && $6 ~ /^\/home/ {print $1}' /etc/passwd >/tmp/testuser
if [ "$name" != "q" ]
then
until [ $(grep -w "$user" /tmp/testuser) ] && [[ "$name" =~ $regex ]] && [[ ! -z "$name" ]] && [ "$name" != "q" ]
do
read -p "User system or nonexistant, try again (q to quit) " name
user=$( cut -d: -f1 /etc/passwd | grep -w "^$name$" ) 2>>/dev/null
done
if [ "$name" = "q" ]
then
echo "You quit the program"
exit
fi
fi
Второе if
- блок должен быть включен в until
- цикл. Проверка на введенное имя имеет к добавленному после первого read
- команда.
read -p "Enter the username you want to delete (q to quit) " name
if [ "$name" = "q" ]
then
echo "You quit the program"
exit
fi
user=$( cut -d: -f1 /etc/passwd | grep -w "^$name$" ) 2>>/dev/null
awk -F: '$3 >= 1000 && $3 <= 60000 && $6 ~ /^\/home/ {print $1}' /etc/passwd >/tmp/testuser
if [ "$name" != "q" ]
then
until [ $(grep -w "$user" /tmp/testuser) ] && [[ "$name" =~ $regex ]] && [[ ! -z "$name" ]] && [ "$name" != "q" ]
do
read -p "User system or nonexistant, try again (q to quit) " name
if [ "$name" = "q" ]
then
echo "You quit the program"
exit
fi
user=$( cut -d: -f1 /etc/passwd | grep -w "^$name$" ) 2>>/dev/null
done
fi