#!/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
나는쉘 스크립트이를 통해 다음을 수행할 수 있습니다.만들다ㅏ사용자그런 다음 자동으로 추가합니다.그룹그들은 그것의 일부가 되기를 원합니다.입력하다는학생또는선생님위에 이러한 진술을 포함하고 싶지만, 그냥 진행되는 대로 작동하게 할 수는 없는 것 같습니다."if" 문입력을 사용하면 무시됩니다.학생.
이 문제를 해결하는 데 도움을 주실 수 있나요?
답변1
노력하다
if [ "$group" = teacher ]
정신
- 주변 공간
[
과]
- = (== 필요하지 않음)
- 세미콜론 없음
바꾸다
if (("$group"=="teacher"));
답변2
IMO는 case
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 ]];
==
이 경우에는 따옴표가 필요하지 않습니다(항상 그런 것은 아님). 또는 =
(내부적으로 동일함 [[
) 을 사용할 수 있습니다 .
POSIX 쉘의 경우 다음을 사용해야 합니다.
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