2017-12-17 23 views
3

편집을 추가하고 사용자를 제거하기 위해 bash 스크립트를 작성하고 있습니다. 나는 그것을 작동시킬 수 없다. 누구든지 내가 잘못 가고있는 것을 볼 수 있습니까? .sh로 저장된 빈 문서를 만들어서 .sh 파일을 지정된 폴더에 추가했습니다. 옵션 1 또는 2를 입력하면 옵션 3에 ERROR가 표시되는 동안 옵션을 다시 입력하라는 메시지가 표시됩니다. 이 문제는 내가 파일을 생성 할 수 있다는 것입니다 내 업그레이드 된 코드는 여전히쉘 스크립트 사용자 관리 프로그램

메인 메뉴 코드

#!/bin/bash 
trap ''2 
title="//////////////////// 
10101010101010101010 
///main user menu/// 
10101010101010101010 
//////////////////// 
" 
clear 
echo "$title" 

PS3='Select option: ' 
choice=("Create User" "Edit User" "Remove User" "Exit") 
select cho in "${choice[@]}" 
do 
    case $cho in 
     "Create User") 
      /home/hiphappy1/Documents/Courseworkfiles/Users.sh 
      ;; 
     "Edit User") 
      /home/hiphappy1/Documents/Courseworkfiles/EditUser.sh 
      ;; 
     "Remove User") 
      /home/hiphappy1/Documents/Courseworkfiles/RemoveUser.sh 
      ;; 
     "Exit") 
      exit 0 
      ;; 
     *) echo "ERROR try again" 
      ;; 
    esac 
done 

추가 사용자 코드

#!/bin/bash 
title="//////////////////////// 
101010101010101010101010 
//Create Multiple Users// 
101010101010101010101010 
//////////////////////// 
" 
clear 
echo "$title" 
password="ArsenalRule" 
for USERNAME in $(cat /home/hiphappy1/Documents/Courseworkfiles/Userlist.txt) 
do 
    useradd $USERNAME -m –s /bin/bash 
    echo -e "${password}\n${password}"! | passwd $USERNAME 
done 
read -r -p "Return to menu? [Y/N] " response 
case $response in 
    [yY]) 
     /home/hiphappy1/Documents/Courseworkfiles/Menulist.sh 
     ;; 
    [nN]) 
     exit 0 
     ;; 
    *) 
     echo "ERROR try again" 
     ;; 
esac 
exit 

사용자 편집 코드

#!/bin/bash 
title2="////////////////// 
10101010101010101010 
/////Edit User////// 
10101010101010101010 
//////////////////// 
" 
clear 
echo "$title2" 
echo "Enter username:" 
read username 
echo"" 

id $username &> /dev/null 
if [ $? -eq 0 ]; then 
    echo "$username exists... changing Password." 
else 
    echo "$username does not exist! Password was not changed for $username" 
    exit 0 
fi 

passwd $username 
read -r -p "Return to menu? [Y/N] " response 
case $response in 
    [yY]) 
     /home/hiphappy1/Documents/Courseworkfiles/Menulist.sh 
     ;; 
    [nN]) 
     exit 0 
     ;; 
    *) 
     echo "ERROR try again" 
     ;; 
esac 
exit 0 

사용자 코드 제거

#!/bin/bash 
title="/////////////////// 
10101010101010101010 
////Remove User///// 
10101010101010101010 
//////////////////// 
" 
clear 
echo "$title" 
echo -e "Users: " 
cat /etc/passwd | grep “[1][0-9][0-9][0-9]” | cut -d “:” -f1 
echo "" 
echo -e "Select user to remove: " 
read username 
sudo deluser --remove-home $username 
echo "" 
echo " Removing" 
sleep 2 
echo "" 
echo " $username REMOVED" 
read -r -p "Return to menu? [Y/N] " response 
case $response in 
    [yY]) 
     /home/hiphappy1/Documents/CourseworkFiles/Menulist.sh 
     ;; 
    [nN]) 
     exit 0 
     ;; 
    *) 
     echo "ERROR try again" 
     ;; 
esac 
+0

메인 메뉴 코드,'선택 = ("사용자 편집" "사용자 제거"를 ","사용자 만들기 " Exit ")'하지만 귀하의 사례 진술은"사용자 삭제 "를 찾고 있습니다. –

+0

각 파일의 내용을 명확하게 표시 할 수 있습니까? 예 : 당신의 메뉴는'/ home/hiphappy1/Documents/Courseworkfiles/Users.sh'를 "Create User"로 실행하지만 사용자 코드를 생성하는 것은 스스로를 읽는 것처럼 보입니다 ...? 'for $ (cat /home/hiphappy1/Documents/Courseworkfiles/Users.sh)' 로컬 변수에 소문자 변수를 사용해야합니다. 특히 USERNAME 변수가 bash에 의해 환경 변수로 사용되기 때문에 –

+0

큰 따옴표는 실제로는 큰 따옴표 (' "')가 아니라 큰 따옴표 ('" "')입니다. –

답변

0

좀 더 자세한 예제가 필요하며 다른 실행 파일을 호출 할 때 일반적인 설계 고려 사항이므로이 비트를 대답에 써야했습니다.

하위 메뉴에서 기본 메뉴로 돌아갈 지 여부를 묻습니다. 다른 레이어 또는 하위 프로세스를 추가하기 때문에 Menu.sh으로 다시 전화하지 않아야합니다. 대신 예를 들어 CreateMenu.sh은 정상적으로 종료되고 Menu.sh으로 다시 전달됩니다.이 시점에서 루프가 있고 while 루프를 사용하여 다시 돌아와 메뉴를 다시 표시합니다. 여기에 코드입니다 :

Menu.sh는

#!/bin/bash 
trap ''2 
title="//////////////////// 
10101010101010101010 
///main user menu/// 
10101010101010101010 
//////////////////// 
" 
clear 
echo "$title" 
courseworkfiles="/home/hiphappy1/Documents/CourseworkFiles" 
PS3='Select option: ' 
choice=("Create User" "Edit User" "Remove User" "Exit") 
finished=0 
while ((!finished)); do 
    select cho in "${choice[@]}" 
    do 
     case $cho in 
      "Create User") 
       "$courseworkfiles/CreateUser.sh" 
       break 
       ;; 
      "Edit User") 
       "$courseworkfiles/EditUser.sh" 
       break 
       ;; 
      "Delete User") 
       "$courseworkfiles/RemoveUser.sh" 
       break 
       ;; 
      "Exit") 
       finished=1 
       break 
       ;; 
      *) 
       echo "ERROR try again" 
       ;; 
     esac 
    done 
done 

CreateUser.sh

#!/bin/bash 
# ...code to create user... 
# 
# ..echo some sort of confirmation message 
# 
# then do nothing, no read, no case, just let if flow back to Menu.sh 
+0

미안하지만, 나는'CreateUser.sh' 비트에서 게으르다.하지만 잘하면 당신은 아이디어를 얻는다. –

+0

또한,'Menu '를 멈추게했던'break'를 놓쳤다.sh'를 종료합니다. 이것은 이제 추가되었습니다. –

+0

농담 해? 귀하의 도움을 크게 주셨습니다. 내 메뉴에서 몇 가지 작은 문제까지 함께하지 않았습니다. 나는 거의 거기에 있다고 생각한다. –