LINUX.ORG.RU

bash scripting

 ,


0

1

Привет Лор! Хочу накидать небольшой скриптец по добавлению юзеров в систему, самбу, профтп, квоту... Скрипт уже накидал, даже есть проверка на существующих юзеров, но хотелось бы еще одну опцию, теперь если проверка проходит неудачно, то скрипт переходит к следующему этапу в любом случае, как сделать так, чтобы скрипт снов запрашивал юзернэйм? пока это работает так:

function get_variables
{
   echo "welcome"
         echo -n "Enter user name:"
          read user
        if [ -z  "$(getent passwd $user)" ]
        then echo "$n User is not used, next step"
        else
            echo "$n User is used"
            echo "Try a different username";
        fi
     echo ""
     echo -n "Enter Password:"
          read -s pass
     echo ""
     echo -n "Verify Password:"
          read -s passv
          if [ "$pass" != "$passv" ]
               then echo "Passwords do not match" >&2; exit 1
          fi
     echo ""
     echo -n "User Quota, please:"
          read quota
}

★★★

Костыльно:

while true
do
   ...
   if[ $broken ]; then continue; fi
   ...
   if[ $need_exit ]; then break; fi
   ...
   break
done
sergv
()
Ответ на: комментарий от sergv

Если его внутри считывают, то чему его сначала ставить?

такой цикл никогда не выполнится. нет гарантии, что удастся подобрать такое начальное значение $user, чтобы выхлоп getent passwd $user был гарантированно пустым

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

нет гарантии, что удастся подобрать такое начальное значение $user

Да хоть
user=¿

redgremlin ★★★★★
()

даже есть проверка на существующих юзеров, но хотелось бы еще одну опцию, теперь если проверка проходит неудачно, то скрипт переходит к следующему этапу в любом случае, как сделать так, чтобы скрипт снов запрашивал юзернэйм?

while true; do
 read
 if [ "$REPLY" != "yes" -a "$REPLY" != "no" ]; then
  echo "только да/нет, ещё раз"
  continue
 fi
 break
done
echo "ответ $REPLY"

как-то так (не проверил)

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

ну и зачем?

do{
  //body
}while(условие);
такого в bash нет. Потому, что-бы вы не придумали, получится костыль. Ну так запишите по человечески, что вы хотите...

drBatty ★★
()
Ответ на: комментарий от drBatty
pfile=/etc/passwd
function get_input() {
  local output
  if [ "`echo $BASH_VERSION | cut -b1`" = "1" ]; then
    echo -n "${1} " >&2 # fudge for use with bash v1
    read output
  else # this should work with any other /bin/sh
    read -ep "${1} " output
  fi
  echo $output
}
function display () {
  local goose
  goose="$(echo $2 | cut -d ' ' -f 2-)"  # lop off the prefixed argument useradd needs
  echo -n "$1 "
  # If it's null then display the 'other' information
  if [ -z "$goose" -a ! -z "$3" ]; then
    echo "$3"
  else
    echo "$goose"
  fi
}
function get_variables
{
   echo "welcome"
	needinput=yes
		while [ ! -z $needinput ]; do
  	if [ -z "$LOGIN" ]; then
    		while [ -z "$LOGIN" ]; do LOGIN="$(get_input "Enter creation username:")" ; done
  	fi
  		grep "^${LOGIN}:" $pfile >/dev/null 2>&1  # ensure it's not already used
  	if [ $? -eq 0 ]; then
    		echo "- User '$LOGIN' already exists; please choose another"
    		unset LOGIN
  	elif [ ! -z "$( echo $LOGIN | grep "^[0-9]" )" ]; then
    		echo "- User names cannot begin with a number; please choose another"
    		unset LOGIN
  	elif [ ! "$LOGIN" = "`echo $LOGIN | tr A-Z a-z`" ]; then # useradd does not allow uppercase
    		echo "- User '$LOGIN' contains illegal characters (uppercase); please choose another"
    		unset LOGIN
  	elif [ ! -z "$( echo $LOGIN | grep '\.' )" ]; then
    		echo "- User '$LOGIN' contains illegal characters (period/dot); please choose another"
    		unset LOGIN
  	else
    		unset needinput
  	fi
	done
     echo ""
     echo -n "Enter Password:"
          read -s pass
     echo ""
     echo -n "Verify Password:"
          read -s passv
          if [ "$pass" != "$passv" ]
               then echo "Passwords do not match" >&2; exit 1
          fi
     echo ""
     echo -n "User Quota, please:"
	  read quota
}
init_ ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.