IMO case
é uma correspondência melhor para essa tarefa do que se / elif / else / fi. Por exemplo:
case "$group" in
teacher) echo teacher ; sudo usermod -aG teachers ;;
student) echo student ; sudo usermod -aG students ;;
*) echo "Sorry, this group doesn't exist" ; exit 1 ;;
esac
Observe que curingas podem ser usados:
te*) echo teacher ; sudo usermod -aG teachers ;;
st*) echo student ; sudo usermod -aG students ;;
que corresponderá a qualquer grupo inserido a partir de te
ou st
.
BTW, em vez de executar sudo
várias vezes no script, é melhor escrever o script para que primeiro receba a entrada do usuário, depois o valide / higienize e só depois execute sudo
uma vez para executar as ações necessárias. Se necessário, escreva um segundo script que faça APENAS o material adduser e usermod baseado nos argumentos passados na linha de comando, e permita somente que o script seja executado pelo sudo.
Por exemplo:
#! /bin/sh
read -p "Type in your username in lowercase letters: " user
grep -q "^$user:" /etc/passwd && echo "Sorry, that user already exists" && exit 1
read -p "Are you a student or teacher? " group
[[ "$group" ~ student|teacher ]] || echo "Sorry, no such group" && exit 1
sudo useradd "$user" -G "$group"
mas é difícil ver o ponto desse script quando você pode fazer tudo na linha de comando com sudo useradd user -G group
sem perder tempo com prompts e respondendo perguntas.