IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 使用linux的shell编程实现对用户的增删改查 -> 正文阅读

[系统运维]使用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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-14 22:57:06  更:2022-06-14 22:58:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 1:30:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码