Сценарий оболочки пользовательская программа администратора

Я пишу bash-скрипт для добавления правки и удаления пользователей. Я не могу заставить его работать. Кто-нибудь может увидеть, где я иду не так? Я добавил.sh файлы в указанную папку, создав пустые документы, сохраненные в.sh. Когда я набираю опции 1 или 2, он просто просит меня ввести опцию снова, а опция 3 читает ОШИБКА. Это мой обновленный код. Проблема в том, что я не могу создать файл до сих пор

Код главного меню

#!/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

1 ответ

Пришлось написать этот бит в ответе, так как он требует более подробного примера и является общим соображением при вызове других исполняемых файлов.

В ваших подменю вы спрашиваете, хотите ли вы вернуться в главное меню. Вы не должны перезванивать Menu.sh потому что вы добавляете другой слой или подпроцесс. Вместо этого вы должны разрешить, например, CreateMenu.sh просто выйти нормально, который будет течь обратно в Menu.shв какой момент вы break от select цикл и вернуться наверх, используя 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
Другие вопросы по тегам