shell脚本用户管理程序

Posted

技术标签:

【中文标题】shell脚本用户管理程序【英文标题】:shell script user admin program 【发布时间】:2018-05-31 02:07:51 【问题描述】:

我正在编写一个 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

【问题讨论】:

您的主菜单代码 choice=("Create User" "Edit User" "Remove User" "Exit") 但您的案例语句正在寻找“删除用户”。 能否把每个文件的内容也说清楚?例如您的菜单执行/home/hiphappy1/Documents/Courseworkfiles/Users.sh 以“创建用户”,但您的创建用户代码似乎读取了自己...? for USERNAME in $(cat /home/hiphappy1/Documents/Courseworkfiles/Users.sh) 确保使用小写变量作为局部变量,尤其是当 bash 使用 USERNAME 变量作为环境变量时 确保您的双引号实际上是双引号 ("),而不是 Window 的双引号 (“”)。 “删除用户代码”中 grep 中的正则表达式缺少 [。见"get all users whose gid is greater than or equals 1000" 感谢您的帮助。没有注意到我写的是删除而不是删除。好地方。而缺失的 [.最小的东西似乎是看不见的。我现在设法将菜单连接到方法。但我仍在努力添加用户。它只是说返回菜单 Y/N。 【参考方案1】:

必须在答案中写下这一点,因为它需要更详细的示例,并且是调用其他可执行文件的一般设计考虑因素。

在您的子菜单中,您询问是否要返回主菜单。您不应该回电Menu.sh,因为您正在添加另一个层或子流程。相反,您应该允许例如CreateMenu.sh 正常退出,这将流回Menu.sh,此时您从select 循环中break 并使用while 循环返回顶部以再次显示菜单。代码如下:

菜单.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

创建用户.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

【讨论】:

抱歉,我在 CreateUser.sh 位上有点懒,但希望你能明白 另外,我错过了一个break,它阻止了Menu.sh 退出。现在已添加。 你在开玩笑吗?非常感谢您的帮助。我已经从我的菜单中走了出来,甚至没有加入一些较小的问题。我想我快到了。 @NeilPettifer 很高兴它有帮助。当您说“仍然无法创建文件”时,您要创建什么文件以及如何创建?目前,您似乎正在阅读 Userlist.txt,为该文件中的每个用户创建一个新用户,然后退出。 我不知道如何添加用户。我想使用该程序添加用户,然后需要保存以供以后使用。我尝试添加到 .sh 但它不起作用,然后我想也许我可以将它保存到文本文件中。

以上是关于shell脚本用户管理程序的主要内容,如果未能解决你的问题,请参考以下文章

案例八:shell自动化管理账本脚本

linux__shell脚本编程

第9章:Shell脚本进程管理

linux12shell编程 --> systemctl管理脚本

linux学习18 shell脚本基础-bash变量和逻辑运行

写一个简单的配置文件和日志管理(shell)