LINUX.ORG.RU

bash и команда read

 ,


0

1

Здравствуйте, гуру bash скриптов))

Продолжаю осваивать написание скриптов на bash, теперь новая проблема, не могу найти в интернете решение, может тут кто подскажет. Написал такой скрипт:

cat ./list | while read line
do

	USERNAME=$(echo $line | cut -f1 -d ' ')
	GROUPNAME=$(echo $line | cut -f2 -d ' ')
	
	cut -d: -f1 /etc/passwd | grep -w $USERNAME &> /dev/null
	user_chek=$?
	cut -d: -f1 /etc/group | grep -w $GROUPNAME &> /dev/null
	group_chek=$?
	if [[ $user_chek -eq 1 && $group_chek -eq 1 ]]
		then
			echo "$USERNAME и $GROUPNAME не существует хотите создать группу yes no"
			read ff
			echo $ff
	fi
done

когда if True, оно не даёт мне записать, а просто подставляет в read следующую строчку с пользователем и группой, а как сделать чтобы с мог записать свой вариант? Типа yes или no, может конечно красивее будет через read -p, но проблему это не решает.

Второй вопрос как лучше дальше решить с вариантами ответ, я думал сделать через case - esac, или есть более простое решение?

  1. Запусти в дебаг-режиме (bash -x scriptname.sh)

  2. Используй getent passwd $USERNAME+ getent group $GROUP вместо ужаса с грепами и катами.

PunkoIvan ★★★★
()

Вы правильно поняли проблему, но не прочитали man bash. Для возможности чтения из разных источников сделан ключ -u. Так даже удобнее читать, так как не в новом процессе через pipe, а будет в том же процессе:

exec 9< "./list"

while read -u 9 line

vodz ★★★★★
()
Ответ на: комментарий от vodz

спасибо большое, использовал такой код и всё заработало

while read -u 9 line

do

	USERNAME=$(echo $line | cut -f1 -d ' ')
	GROUPNAME=$(echo $line | cut -f2 -d ' ')
	
	cut -d: -f1 /etc/passwd | grep -w $USERNAME &> /dev/null
	user_chek=$?
	cut -d: -f1 /etc/group | grep -w $GROUPNAME &> /dev/null
	group_chek=$?
	if [[ $user_chek -eq 1 && $group_chek -eq 1 ]]
		then
			echo "$USERNAME и $GROUPNAME не существует хотите создать группу yes no"
			read ff
			echo $ff
			echo $rr
	fi
done 9<./list

supp0rtmail2019
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.