Как завершить цикл с помощью grep во временном файле?

Я застрял!

У меня есть сценарий. Я хочу проверить, является ли пользователь системным пользователем (спасибо @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
2
задан 26 July 2019 в 17:17

1 ответ

Второе 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
1
ответ дан 2 December 2019 в 04:36

Другие вопросы по тегам:

Похожие вопросы: