使用linux的shell编程实现对用户的增删改查

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

用shell编程来实现对系统用户的增删改查
目录结构

目录结构说明
1.txt文件是用来存储错误的命令或者正确的命令的,用来保持控制台的美观
add.sh是用来添加用户的,这里可以简单的添加,也可以复杂的添加,可以指定用户组家目录,使用的shell和描述信息
del.sh是用来删除用户的
hasUser.sh是用来判断用户是否存在的
import.sh是用来批量导入用户的
passwd.sh是用来存储用户的密码的,在进行其他操作时,用户的相关值也会发生改变
select.sh是用来显示用户的
update.sh是用来修改用户的信息的,可以修改密码或者其他的信息
user.txt是用来批量导入用户的,在进行其他操作时,用户的相关值也会发生改变

一、代码展示

main文件

#!/bin/bash
#判断是否还有用户的函数
function isEmpty(){
      string=`sed -n 'p' user.txt`
      if [ -z "${string}" ]
      then
         echo "还没有用户,请添加用户"
         continue
      fi
}

if [ $(whoami) = "root" ]
then
   while true
   do
      echo  "请输入数字:1为增加用户,2为删除用户,3为修改用户信息,4为查询所有用户,5为批量导入数据,6为退出bash"
      read  num
   case ${num} in
      1)
      read -p "请输入要增加的用户名:" username
      bash hasUser.sh ${username}
      #$?=1表示用户不存在,$?=0表示用户存在
      if [ $? -eq 0  ]
      then
         echo "用户名已经存在!" 
         continue
      fi
      read -p "请输入用户名密码:" password
      read -n 1 -p "是否要指定其他用户信息y/n:" flag 
      bash add.sh ${username} ${password} ${flag}
      ;;
      2)
      isEmpty
      read -p "请输入要删除的用户:" username
      bash hasUser.sh ${username}
      #$?=1表示用户不存在,$?=0表示用户存在
      if [ $? -eq 1  ]
      then
         echo "用户不存在!" 
         continue
      fi
      bash del.sh ${username}
      ;;
      3)
      isEmpty
      read -p "请输入要修改的用户名:" username
      bash hasUser.sh ${username}
      #$?=1表示用户不存在,$?=0表示用户存在
      if [ $? -eq 1  ]
      then
         echo "用户不存在!" 
         continue
      fi
      read -n 1 -p "是要修改用户密码还是其他用户信息,1为修改密码,2为修改用户其他信息" flag 
      bash update.sh  ${username} ${flag}
      ;;
      4)
      bash select.sh
      ;;
      5)
      bash import.sh
      ;;
      6)
      exit
      ;;
      *)
      echo "请输入正确的数字"
      ;;
   esac
   done
else
   echo "需要切换到root用户,请输入root用户密码" 
   su root
fi


1.添加用户

#!/bin/bash
function add()
{
    #简单添加用户
    if [ $3 = n ]
    then
        homeDir="/home/"${1}
        shell="/bin/bash"
        echo
        useradd $1
    elif [ $3 = y ]
    then
        #完整添加用户
        echo
        read -p "请输入所属组名:" group
        read -p "请输入家目录:" homeDir
        read -p "请输入用户使用的shell:" shell 
        read -p "请输入用户描述信息:" message 
        #判断输入的group组是存在,不存在,则添加用户输入的用户组
        string=$(sed -n "/^${group}/p" /etc/group)
        if [ -z ${string} ]
        then
            groupadd ${group}
        fi
        echo
        useradd -d ${homeDir} -s ${shell} -g ${group} -c ${message} $1 
    fi

    #利用变量获取到用户输入的密码,方便后面文件可直观的查看用户密码
    echo $2 | passwd --stdin $1 &>>1.txt

    #找出uid
    uid=$(awk -F ":" '$1=="'${1}'" {print $3}' /etc/passwd)
    #找到gid
    gid=$(awk -F ":" '$1=="'${1}'" {print $4}' /etc/passwd)
    #追加到相应的文件中
    echo "${1}:${2}" >> passwd.txt
    echo "${1}::${uid}:${gid}:${message}:${homeDir}:${shell}" >> user.txt
    echo "添加用户成功"
    echo
}
add $1 $2 $3

2.用户删除

#!/bin/bash
function del()
{
    #防止误操作
    read -n 1 -p "确认是否要删除该用户y/n:" flag 
    if [ ${flag} = y ]
    then
        userdel -r $1 &>>1.txt
        #从文件中删除对应的数据
        sed -i "/$1/d" passwd.txt
        sed -i "/$1/d" user.txt
        echo 
        echo -e "删除用户成功\n" 
    else
        #用户误操作时,选择n,退出删除
        echo ""
        exit
    fi
}
del $1

3.用户修改

#!/bin/bash
#修改用户密码
function updatePassword()
{    
    #利用变量获取到用户输入的密码,方便后面文件可直观的查看用户密码
    echo 
    read -p "请输入需要修改的密码:" password
    echo ${password} | passwd --stdin $1 &>>1.txt
   
    #替换passwd.txt中的数据
    sed -i "/^${1}/c${1}:${password}" passwd.txt 
    echo "修改用户密码成功"
    echo   
}
#修改用户其他信息
function updateOther()
{
    #找出uid
    uid=$(awk -F ":" '$1=="'${1}'" {print $3}' /etc/passwd)
    #找出gid
    gid=$(awk -F ":" '$1=="'${1}'" {print $4}' /etc/passwd)

    #定义一些变量
    homeDir="/home/"$1
    shell="/bin/bash"
    #找出组名
    group=$(awk -F ":" '$3=="'${gid}'" {print $1}' /etc/group)
    #找出用户描述信息
    message=$(awk -F ":" '$1=="'${1}'" {print $5}' /etc/passwd)
    #获取用户密码
    password=$(awk -F ":" '$1=="'${1}'" {print $2}' passwd.txt)

    echo
    read -n 1 -p "是否修改所属组名y/n:" i1
    if [ ${i1} = y ]
    then
        echo 
        read -p "请输入所属组名:" group
        #判断输入的group组是存在,不存在,则添加用户输入的用户组
        string1=$(awk -F ":" '$1=="'${group}'" {print $1}' /etc/group)
        if [ -z "${string1}" ]
        then
            groupadd ${group}
            gid=$(awk -F ":" '$1=="'${group}'" {print $3}' /etc/group)
        fi
    fi

    echo
    read -n 1 -p "是否修改目录y/n:" i2
    if [ ${i2} = y ]
    then
        echo 
        read -p "请输入目录:" homeDir
    fi

    echo
    read -n 1 -p "是否修改用户使用的shelly/n:" i3 
    if [ ${i3} = y ]
    then
        echo 
        read -p "请输入用户使用的shell" shell
    fi

    echo
    read -n 1 -p "是否修改用户描述信息y/n:" i4
    if [ ${i4} = y ]
    then
        echo 
        read -p "请输入用户描述信息:" message
    fi
    echo

    #判断用户是否全选了n
    if [ "${i1}${i2}${i3}${i4}" = "nnnn" ]
    then
        exit
    fi

    #先删除
    userdel -r $1 
    #后添加
    #判断自身的group组是否在删除时删除掉,如果删除掉了,那么则添加
    string2=$(awk -F ":" '$1=="'${group}'" {print $1}' /etc/group)
    if [ -z "${string2}" ]
    then
        groupadd ${group}
        #改变新增用户组后新增的用户组id的值
        gid=$(awk -F ":" '$1=="'${group}'" {print $3}' /etc/group)
    fi
    
    #防止message在添加时为空,导致这里添加时为空报错
    useradd -d ${homeDir} -s ${shell} -g ${group} -c ${message} $1 &>>1.txt
    #如果上面的出错了,就使用下面的useradd
    if [ $? -eq 2 ]
    then
        useradd -d ${homeDir} -s ${shell} -g ${group}  $1
    fi

    #添加密码
    echo ${password} | passwd --stdin $1 &>>1.txt
    echo "修改成功"
    echo
    #当用户修改用户组时,该用户组存在,获取该用户组的id
    gid=$(awk -F ":" '$1=="'${group}'" {print $3}' /etc/group)
    #替换相关文件的内容
    sed -i "/^${1}/c${1}::${uid}:${gid}:${message}:${homeDir}:${shell}" user.txt    
    sed -i "/^${1}/c${1}:${password}" passwd.txt 
}

if [ $2 -eq 1 ]
then
    updatePassword $1   
else
    updateOther $1
fi

4.用户查询

#!/bin/bash
#先从/etc/passwd中更新数据
awk 'NR>19{print $0}' /etc/passwd > user.txt
awk -F ":" 'BEGIN{print"用户名\t    UID\t      GID\t描述信息\t家目录\t\t     shell"}{printf "%-12s%-10s%-10s%-15s%-20s%-20s\n", $1,$3,$4,$5,$6,$7}' user.txt

二、结果显示

请添加图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在相应文件中添加信息来使用批量增加
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、使用步骤

使用bash main.sh 运行,在根据提示输入数字来执行相应的功能

代码获取

链接:https://pan.baidu.com/s/1pB9bIiqfKqtmA6MFeY6OgQ?pwd=1122
提取码:1122

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ksysjwqd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值