#!/bin/bash
echo "Type in your username in lowercase letters"
read user
#sudo adduser $user
echo "Are you a student or teacher?"
read group
if (("$group"=="teacher"));
then
#sudo usermod -aG teachers
echo "teacher"
elif (("$group"=="student"));
then
#sudo usermod -aG students
echo "students"
else
echo "Sorry this group doesn't exist"
fi
我正在尝试做一个外壳脚本这让我能够创造A用户然后自动将其添加到团体他们想加入其中。输入是一个学生或一个老师虽然我想包括上面的这些陈述,但我似乎无法使它工作,因为它只是转到“如果”语句并忽略我是否使用输入学生。
你能帮我解决这个问题吗?
答案1
尝试
if [ "$group" = teacher ]
头脑
- 周围空间
[
和]
- =(不需要==)
- 没有分号
代替
if (("$group"=="teacher"));
答案2
IMOcase
比 if/elif/else/fi 更适合此任务。例如:
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
请注意,可以使用通配符:
te*) echo teacher ; sudo usermod -aG teachers ;;
st*) echo student ; sudo usermod -aG students ;;
它将匹配以te
或开头输入的任何组st
。
sudo
顺便说一句,您最好编写脚本,以便它首先从用户那里获取输入,然后验证/清理它,然后只运行sudo
一次以执行所需的操作,而不是在脚本中运行多次。如有必要,编写第二个脚本,该脚本仅根据命令行上传递的参数执行 adduser 和 usermod 操作,并且仅允许该脚本由 sudo 运行。
例如:
#! /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"
sudo useradd user -G group
但是,当您可以在命令行上完成所有操作而不浪费时间在提示和回答问题上时,很难看出该脚本的意义。
答案3
在 bash 中,这样:
if (("$group"=="teacher"));
是变量的数值检验。变量被计算为数字,如果它们仅包含文本,则它们的计算结果为0
。
bash 中文本的正确测试是:
if [[ $group == teacher ]];
在这种情况下不需要引号(并非总是如此),您可以使用==
or =
(在 内部是等效的[[
)。
对于 POSIX shell,您需要使用:
if [ "$group" = "teacher" ];
您确实需要使用 simple [
,引用变量,然后使用=
.
答案4
#! /bin/bash
echo "Type your username in lowercase letters"
read user
echo "Are you a student or teachers or other"
read group
if [ $group == student ]
then
useradd $user && usermod -aG student $user
echo "sucessfully added to student"
elif [ $group == teachers ]
then
useradd $user && usermod -aG teachers $user
echo "sucessfully added to teachers"
else [ $group == other ]
echo " sorry "
fi