shell脚本知识点6

Shell-day06

1. 上周知识点回顾


1. Shell的基本介绍

	Shell编程介绍  交互式和非交互式
	
	为什么要学习Shell 
	
	如何学习Shell
	
	Shell能做什么    
	
	Shell的开发规范及习惯 
	
	Shell的执行方式  
	
	登录式和非登录式的区别  
	
2. Shell变量

	Shell变量介绍  
	
	用户自定义变量 
	
	系统环境变量应用   export 
	
	位置变量  脚本的传参   $1  $2 ..
	
	特殊变量 预定义变量
	
	命令的嵌套  $($())
	
	Shell变量的赋值Read
	
	Read的示例语法  
	
	修改主机名脚本
	
	修改IP地址脚本
	
	判断IP地址是否通畅脚本  
	
	监控内存的使用率脚本
	
	备份场景脚本  备份目录  
	
	批量文件名重命名脚本  
	
	判断字符串的长度脚本
	
	Shell的变量运算  + - * / % ^  
	
	整数运算 及 小数运算   expr  $(())  $[]  let  bc awk  python
	
	变量运算的案例   ps aux| grep VSZ 这列的和  虚拟内存集的和  
	
	Shell的变量案例  
	
	系统信息的变量案例
	
	变量替换的案例 

3. 流程控制语句

	流程控制语句介绍  单分支  双分支  多分支   
	
	文件比较  -e  -f  -s  -d  -r  -w  -x
	
	企业级数据库备份脚本  
	
	整数比较  -eq  -ne  -gt  -lt  -ge  -le
	
	监测服务是否运行脚本   
	
	监控磁盘根分区的使用率脚本
	
	创建用户脚本  
	
	函数库的使用  判断URL地址是否能够正常的访问
	
	字符的比较  ==  !=  -z  -n  
	
	多条件比较  -a   -o    &&   ||   [[]]
	
	判断学生成绩优劣的脚本 
	
	正则比较   =~    ^[0-9]+$    ^[a-Z]+$ 
	
	创建用户脚本的案例 输入前缀和后缀 
	
	清空系统日志脚本  
	
	根据系统版本安装不同的Yum源
	
	流程控制语句之Case语句  
	
	安装不同Nginx版本的脚本 
	
	Rsync启动停止脚本  
	
	Nginx启动停止脚本  reload  
	
	加锁机制  防止脚本被同时使用  
	
	加强版Nginx启动停止脚本  判断语法的条件  
	

2. 实现系统管理工具箱


1. 帮助信息
2. 系统版本信息
3. 系统内核信息
4. 磁盘使用情况
5. 内存使用情况
6. 系统负载情况
7. 用户登录情况
8. 所有IP地址
9. 外网IP地址
0. 退出脚本

[root@shell /service/scripts/day06]# cat manager.sh
#!/bin/bash
#定义菜单
Menu() {
cat<<EOF
###################
1. 帮助信息
2. 系统版本信息
3. 系统内核信息
4. 磁盘使用情况
5. 内存使用情况
6. 系统负载情况
7. 用户登录情况
8. 所有IP地址
9. 外网IP地址
0. 退出脚本
###################
EOF
}
#调用函数
Menu
while true
do
#提示用户输入对应的编号来获取对应的系统信息
read -p "请根据菜单输入对应的编号获取对应的系统信息:" Num
#判断用户输入的是否为数字
if [[ ! $Num =~ ^[0-9]$ ]];then
    echo "你输入的不符合条件!请输入数字0-9之间的任意一个!"
    exit
fi
#根据不同的编号进行执行对应的命令
case $Num in
    1)
        clear
        Menu
        ;;
    2)
        clear
        echo "系统版本信息如下:"
        awk '{print $1,$(NF-1)}'  /etc/redhat-release
        ;;
    3)
        clear
        echo "系统内核信息如下:"
        uname -r
        ;;
    4)
        clear
        echo "系统磁盘使用情况如下:"
        df -h
        ;;
    5)
        clear
        echo "系统内存使用情况如下:"
        free -m
        ;;
    6)
        clear
        echo "系统负载情况如下:"
        uptime
        ;;
    7)
        clear
        echo "当前系统用户登录情况如下:"
        w -h
        ;;
    8)
        clear
        echo "系统所有IP地址如下:"
        ifconfig  | awk '/inet /{print $2}'
        ;;
    9)
        clear
        echo "系统外网IP地址如下:"
        curl -s ifconfig.me
        echo
        ;;
    0)
        clear
        echo "你选择了退出程序!"
        exit
        ;;
esac
done



while  true
do
done

3. 实现简单的Jumpserver


1. 执行脚本时,可以看到你所能够管理的主机  主机清单

2. 提示用户要进行管理哪台主机  连接某台主机

3. 需要写个循环,连接完一台主机后,还可以继续连接其他主机  不能退出脚本  

4. 不能让跳板机可以使用Ctrl + c  d  z 等操作

5. 用户不能管理你的跳板机  每次登陆系统,自动执行脚本 

6. 给自己留个后门,自己能够出去,退出脚本,不能告诉别人怎样退出脚本



[root@shell /service/scripts/day06]# cat jumpserver.sh
#!/bin/bash
#定义主机菜单 定义函数
Menu() {
cat<<EOF
######################
1. 显示主机清单
2. Web01-10.0.0.7
3. Web02-10.0.0.8
4. Lb01-10.0.0.5
5. Db01-10.0.0.51
6. 退出脚本程序
######################
EOF
}
#打印主机列表
Menu
#禁止执行Ctrl+c d z 等操作
trap "" HUP INT TSTP    
#进行循环操作
while true
do
    #提示用户需要管理哪台主机
    read -p "请根据菜单,选择你要管理的主机:" Num
    #根据菜单列表进行选择要管理的主机
    case $Num in
        1)
            clear
            Menu
            ;;
        2)
            echo "你选择了要进行管理Web01主机"
            ping -c1 -W1 10.0.0.7  &>/dev/null
            if [ $? -eq 0 ];then
                echo "Web01主机网络是通畅的!"
                Port=$(nmap  -p22  10.0.0.7 | awk '/22/{print $2}')
                if [ $Port == "open" ];then
                    echo "Web01主机的远程连接端口是开放的!正在为您连接这台主机...."
                    ssh root@10.0.0.7
                else
                    echo "Web01主机的远程连接端口没有打开!无法进行连接!"
                    continue   #退出此次循环,继续下一次循环
                fi
            else
                echo "Web01主机的网络是不通畅的!请检查该主机是否启动!"
                continue
            fi
            ;;
        3)
            echo "你选择了要进行管理Web02主机"
            ping -c1 -W1 10.0.0.8  &>/dev/null
            if [ $? -eq 0 ];then
                echo "Web02主机网络是通畅的!"
                Port=$(nmap  -p22  10.0.0.8 | awk '/22/{print $2}')
                if [ $Port == "open" ];then
                    echo "Web02主机的远程连接端口是开放的!正在为您连接这台主机...."
                    ssh root@10.0.0.8
                else
                    echo "Web02主机的远程连接端口没有打开!无法进行连接!"
                    continue
                fi
            else
                echo "Web02主机的网络是不通畅的!请检查该主机是否启动!"
                continue
            fi
            ;;
        4)
            echo "你选择了要进行管理Lb01主机"
            ping -c1 -W1 10.0.0.5  &>/dev/null
            if [ $? -eq 0 ];then
                echo "Lb01主机网络是通畅的!"
                Port=$(nmap  -p22  10.0.0.5 | awk '/22/{print $2}')
                if [ $Port == "open" ];then
                    echo "Lb01主机的远程连接端口是开放的!正在为您连接这台主机...." 
                    ssh root@10.0.0.5
                else                 
                    echo "Lb01主机的远程连接端口没有打开!无法进行连接!"
                    continue  
                fi
            else   
                echo "Lb01主机的网络是不通畅的!请检查该主机是否启动!"
                continue  
            fi
            ;;
        5)
            echo "你选择了要进行管理Db01主机"
            ping -c1 -W1 10.0.0.51  &>/dev/null
            if [ $? -eq 0 ];then
                echo "Db01主机网络是通畅的!"
                Port=$(nmap  -p22  10.0.0.51 | awk '/22/{print $2}')
                if [ $Port == "open" ];then
                    echo "Db01主机的远程连接端口是开放的!正在为您连接这台主机...."
                    ssh root@10.0.0.51
                else                  
                    echo "Db01主机的远程连接端口没有打开!无法进行连接!"
                    continue  
                fi
            else
                echo "Db01主机的网络是不通畅的!请检查该主机是否启动!"
                continue
            fi
            ;;
        6)
            read -s -p "请输入暗号退出脚本!" Anhao
            echo
            if [ $Anhao == "anhao" ];then
                echo "内部管理人员退出脚本操作!切勿将暗号告诉别人!"
                exit
            else
                echo "你输入的暗号不对!请重新输出!"
                continue
            fi
            ;;
        *)
            echo "你输入的不符合要求!请输入数字1-9"
            continue    #跳出本次循环,继续下一次的循环
    esac
done


[root@shell ~]# tail -1 /root/.bashrc 
/bin/bash /service/scripts/day06/jumpserver.sh

4. 实现多级菜单


主菜单    有退出脚本的功能 

两个子菜单

执行脚本时,进入的是主菜单  

根据主菜单进行选择进入子菜单  

子菜单负责具体的命令  

有返回上一级菜单的功能 


安装Nginx 和PHP

########主菜单########
1. 安装Nginx服务
2. 安装PHP服务
3. 退出脚本程序
#####################

########Nginx########
1. 安装Nginx-1.16版本
2. 安装Nginx-1.17版本
3. 安装Nginx-1.18版本
4. 返回上一级菜单
#####################

#########PHP#########
1. 安装PHP-5.6版本
2. 安装PHP-7.1版本
3. 安装PHP-7.2版本
4. 返回上一级菜单
#####################


[root@shell /service/scripts/day06]# cat multistage.sh
#!/bin/bash
#定义函数菜单
Master_Menu() {
cat<<EOF
########主菜单########
1. 安装Nginx服务
2. 安装PHP服务
3. 退出脚本程序
######################
EOF
}
Nginx_Menu() {
cat<<EOF
########Nginx########
1. 安装Nginx-1.16版本
2. 安装Nginx-1.17版本
3. 安装Nginx-1.18版本
4. 返回上一级菜单
#####################
EOF
}
PHP_Menu() {
cat<<EOF
#########PHP#########
1. 安装PHP-5.6版本
2. 安装PHP-7.1版本
3. 安装PHP-7.2版本
4. 返回上一级菜单
#####################
EOF
}
#进入主菜单的循环
while true 
do
    Master_Menu
    read -p "请根据主菜单进行选择安装服务:" Install
    #编辑对应的case语句命令
    case $Install in
        1)
            clear
            echo "你选择了安装Nginx服务...."
            #进入了Nginx菜单的循环
            while true
            do
                Nginx_Menu
                read -p "请输入你要安装的Nginx的版本:" Install_Nginx
                #编辑对应的case语句命令
                case $Install_Nginx in
                    1)
                        clear
                        echo "你选择安装Nginx-1.16版本...."
                        echo "正在安装Nginx-1.16版本,请稍后...."
                        sleep 5
                        echo "Nginx-1.16版本安装成功...."
                        ;;
                    2)
                        clear
                        echo "你选择安装Nginx-1.17版本...."
                        echo "正在安装Nginx-1.17版本,请稍后...."
                        sleep 5
                        echo "Nginx-1.17版本安装成功...."
                        ;;
                    3)
                        clear
                        echo "你选择安装Nginx-1.18版本...."
                        echo "正在安装Nginx-1.18版本,请稍后...."
                        sleep 5
                        echo "Nginx-1.18版本安装成功...."
                        ;;
                    4)
                        clear
                        echo "你选择了返回上一级菜单!"
                        break #跳出当前循环,继续执行循环外面的命令
                        ;;
                    *)
                        clear
                        echo "你输入的不符合要求!请重新输入!"
                esac
            done
            ;;
        2)
            clear
            echo "你选择了安装PHP服务...."
            #进入PHP菜单的循环
            while true
            do
                PHP_Menu
                read -p "请根据菜单选择你要安装PHP的版本:" Install_PHP
                #编辑对应的case语句命令
                case $Install_PHP in
                    1) 
                        clear
                        echo "你选择了安装PHP-5.6版本...."
                        echo "正在安装PHP-5.6版本,请稍后...."
                        sleep 5
                        echo "PHP-5.6版本安装成功....."
                        ;;
                    2)
                        clear
                        echo "你选择了安装PHP-7.1版本...."
                        echo "正在安装PHP-7.1版本,请稍后...."
                        sleep 5
                        echo "PHP-7.1版本安装成功....."
                        ;;
                    3)
                        clear
                        echo "你选择了安装PHP-7.2版本...."
                        echo "正在安装PHP-7.2版本,请稍后...."
                        sleep 5
                        echo "PHP-7.2版本安装成功....."
                        ;;

                    4)
                        clear
                        echo "你选择了返回上一级菜单!"
                        break
                        ;;
                    *)
                        clear
                        echo "你输入的不符合要求!请重新输入!"
                esac
            done
            ;;
        3)
            echo "你选择了退出脚本程序!"
            exit
            ;;
        *)
            echo "你输入的不符合要求!请重新输入!"
    esac
done
[root@shell /service/scripts/day06]# sh multistage.sh
########主菜单########
1. 安装Nginx服务
2. 安装PHP服务
3. 退出脚本程序
######################
请根据主菜单进行选择安装服务:1
你选择了安装Nginx服务....
########Nginx########
1. 安装Nginx-1.16版本
2. 安装Nginx-1.17版本
3. 安装Nginx-1.18版本
4. 返回上一级菜单
#####################
请输入你要安装的Nginx的版本:1
你选择安装Nginx-1.16版本....
正在安装Nginx-1.16版本,请稍后....
Nginx-1.16版本安装成功....
########Nginx########
1. 安装Nginx-1.16版本
2. 安装Nginx-1.17版本
3. 安装Nginx-1.18版本
4. 返回上一级菜单
#####################
请输入你要安装的Nginx的版本:4
你选择了返回上一级菜单!
########主菜单########
1. 安装Nginx服务
2. 安装PHP服务
3. 退出脚本程序
######################
请根据主菜单进行选择安装服务:2
你选择了安装PHP服务....
#########PHP#########
1. 安装PHP-5.6版本
2. 安装PHP-7.1版本
3. 安装PHP-7.2版本
4. 返回上一级菜单
#####################
请根据菜单选择你要安装PHP的版本:1
你选择了安装PHP-5.6版本....
正在安装PHP-5.6版本,请稍后....
PHP-5.6版本安装成功.....
#########PHP#########
1. 安装PHP-5.6版本
2. 安装PHP-7.1版本
3. 安装PHP-7.2版本
4. 返回上一级菜单
#####################
请根据菜单选择你要安装PHP的版本:4
你选择了返回上一级菜单!
########主菜单########
1. 安装Nginx服务
2. 安装PHP服务
3. 退出脚本程序
######################
请根据主菜单进行选择安装服务:3
你选择了退出脚本程序!

5. 循环语句之For循环基本概述


基础语法:

for  变量名   in    取值列表
do
	循环体
done

当条件为真时,执行循环体,当条件为假时,循环体结束

#取值列表  如何进行取值

多种取值方法

#1. 默认取值  in后面的就是取值的内容    默认是以空白字符为分割符 空格  tab键  回车键都属于空白字符

[root@shell /service/scripts/day06]# cat for-1.sh
#!/bin/bash
for i in file1 file2 file3 
do
    echo "$i"
    echo "#########"
done
[root@shell /service/scripts/day06]# sh for-1.sh
file1
#########
file2
#########
file3
#########

#2. 取值列表中出现特殊字符  需要进行转义  列表值出现复杂的值,有空格  

[root@shell /service/scripts/day06]# cat for-2.sh
#!/bin/bash
for i in \$10 \$100 \$100
do
    echo "menoy is $i"
done
[root@shell /service/scripts/day06]# sh for-2.sh
menoy is $10
menoy is $100
menoy is $100

[root@shell /service/scripts/day06]# cat for-2.sh
#!/bin/bash
for i in '$10 $10' '$100' '$100'
do
    echo "menoy is $i"
done
[root@shell /service/scripts/day06]# sh for-2.sh
menoy is $10 $10
menoy is $100
menoy is $100

#3. 通过变量进行获取到对应的值

[root@shell /service/scripts/day06]# cat for-3.sh
#!/bin/bash
List='file1 file2 file3'
for i in $List
do
    echo $i
done
[root@shell /service/scripts/day06]# sh for-3.sh
file1
file2
file3
[root@shell /service/scripts/day06]# vim for-3.sh
[root@shell /service/scripts/day06]# cat for-3.sh
#!/bin/bash
List='$10 $100 $1000'
for i in $List
do
    echo $i
done
[root@shell /service/scripts/day06]# sh for-3.sh
$10
$100
$1000

#4. 从命令中进行取值

[root@shell /service/scripts/day06]# cat for-4.sh
#!/bin/bash
for i in $(head -1 /etc/passwd | cut -d ':' -f1-7| tr ':' ' ')
do
    echo $i
done
[root@shell /service/scripts/day06]# sh for-4.sh
root
x
0
0
root
/root
/bin/bash


[root@shell /service/scripts/day06]# cat for-4.sh
#!/bin/bash
for i in $(cat /etc/hosts)
do
    echo $i
done
[root@shell /service/scripts/day06]# sh for-4.sh
127.0.0.1
localhost
localhost.localdomain
localhost4
localhost4.localdomain4
::1
localhost
localhost.localdomain
localhost6
localhost6.localdomain6

#5. 脚本中,指定分隔符   IFS  指定分隔符

IFS=:       #以:作为分割符

IFS=$'\n'  #以换行符为分割符

IFS=:' '	#指定多个分割符

[root@shell /service/scripts/day06]# cat for-5.sh
#!/bin/bash
IFS=':'
for i in $(head -1 /etc/passwd)
do
    echo $i
done
[root@shell /service/scripts/day06]# sh for-5.sh
root
x
0
0
root
/root
/bin/bash


[root@shell /service/scripts/day06]# cat for-5.sh
#!/bin/bash
IFS=$'\n'
for i in $(cat /etc/hosts)
do
    echo $i
done
[root@shell /service/scripts/day06]# sh for-5.sh
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6


[root@shell /service/scripts/day06]# cat test.txt
root:x:0:0 root:/root /bin/bash
[root@shell /service/scripts/day06]# vim for-5.sh 
[root@shell /service/scripts/day06]# cat for-5.sh
#!/bin/bash
IFS=:' '
for i in $(cat test.txt)
do
    echo $i
done
[root@shell /service/scripts/day06]# sh for-5.sh
root
x
0
0
root
/root
/bin/bash


6. For循环C语言风格


#输出一个变量,属于自增
[root@shell /service/scripts/day06]# cat for-6.sh
#!/bin/bash
for  ((i=0;i<10;i++))
do
    echo $i
done
[root@shell /service/scripts/day06]# sh for-6.sh
0
1
2
3
4
5
6
7
8
9

#输出两个变量 一个自增 自减

[root@shell /service/scripts/day06]# cat for-6.sh
#!/bin/bash
for  ((i=0,j=9;i<10;i++,j--))
do
    echo $i $j
done
[root@shell /service/scripts/day06]# sh for-6.sh
0 9
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
9 0

[root@shell /service/scripts/day06]# cat for-6.sh
#!/bin/bash
for  ((i=0,j=9;i<10;i++,j--))
do
    echo "$i + $j = $(($i+$j))"
done
[root@shell /service/scripts/day06]# sh for-6.sh
0 + 9 = 9
1 + 8 = 9
2 + 7 = 9
3 + 6 = 9
4 + 5 = 9
5 + 4 = 9
6 + 3 = 9
7 + 2 = 9
8 + 1 = 9
9 + 0 = 9

#shell脚本输出的数字

[root@shell /service/scripts/day06]# cat for-6.sh
#!/bin/bash
a=0
b=9
for i in {1..10} 
do
    echo "$a + $b = $(($a+$b))"
    let a++
    let b--
done
[root@shell /service/scripts/day06]# sh for-6.sh
0 + 9 = 9
1 + 8 = 9
2 + 7 = 9
3 + 6 = 9
4 + 5 = 9
5 + 4 = 9
6 + 3 = 9
7 + 2 = 9
8 + 1 = 9
9 + 0 = 9

[root@shell /service/scripts/day06]# cat for-6.sh
#!/bin/bash
for i in {1..10} 
do
    echo $i 
done
[root@shell /service/scripts/day06]# sh for-6.sh
1
2
3
4
5
6
7
8
9
10

[root@shell /service/scripts/day06]# cat for-6.sh
#!/bin/bash
for i in $(seq 10) 
do
    echo $i 
done
[root@shell /service/scripts/day06]# sh for-6.sh
1
2
3
4
5
6
7
8
9
10

7. For循环案例:创建用户


通过读入文件的方式进行创建用户

cat  user.txt
aaa1
aaa2
aaa3


[root@shell /service/scripts/day06]# cat for-7.sh
#!/bin/bash
for i in $(cat user.txt) 
do
    id $i  &>/dev/null
    if [ $? -eq 0 ];then
        echo "${i}用户已经存在!无需再次进行创建!"
    else
        useradd $i &>/dev/null
        if [ $? -eq 0 ];then
            echo "用户${i}创建成功!"
        else
            echo "用户创建失败!"
        fi
    fi
done
[root@shell /service/scripts/day06]# sh for-7.sh
用户aaa1创建成功!
用户aaa2创建成功!
用户aaa3创建成功!
[root@shell /service/scripts/day06]# sh for-7.sh
aaa1用户已经存在!无需再次进行创建!
aaa2用户已经存在!无需再次进行创建!
aaa3用户已经存在!无需再次进行创建!
[root@shell /service/scripts/day06]# echo "aaa4" >> user.txt 
[root@shell /service/scripts/day06]# sh for-7.sh
aaa1用户已经存在!无需再次进行创建!
aaa2用户已经存在!无需再次进行创建!
aaa3用户已经存在!无需再次进行创建!
用户aaa4创建成功!


[root@shell /service/scripts/day06]# cat user.txt
aaa1:ughiruhg 
aaa2:ughiruhg
aaa3:ughiruhg
aaa4:ughiruhg
aaa5:ughiruhg
aaa6:ughiruhg
aaa7:ughiruhg
[root@shell /service/scripts/day06]# vim for-8.sh
[root@shell /service/scripts/day06]# 
[root@shell /service/scripts/day06]# cat for-8.sh
#!/bin/bash
for i in $(cat user.txt)
do
    #User=$(echo $i | awk -F: '{print $1}')
    #Pass=$(echo $i | awk -F: '{print $2}')
    #判断用户是否存在
    id ${i%%:*}  &>/dev/null
    if [ $? -eq 0 ];then
        echo "用户${i%%:*}已经存在!无需再次进行创建!"
    else
        useradd ${i%%:*} &>/dev/null && echo ${i#*:} | passwd --stdin ${i%%:*} &>/dev/null
        if [ $? -eq 0 ];then
            echo "用户${i%%:*}创建成功!密码设置成功!"
        else
            echo "用户${i%%:*}创建失败!"
        fi
    fi
done
[root@shell /service/scripts/day06]# sh for-8.sh
用户aaa1已经存在!无需再次进行创建!
用户aaa2已经存在!无需再次进行创建!
用户aaa3已经存在!无需再次进行创建!
用户aaa4已经存在!无需再次进行创建!
用户aaa5创建成功!密码设置成功!
用户aaa6创建成功!密码设置成功!
用户aaa7创建成功!密码设置成功!
[root@shell /service/scripts/day06]# sh for-8.sh
用户aaa1已经存在!无需再次进行创建!
用户aaa2已经存在!无需再次进行创建!
用户aaa3已经存在!无需再次进行创建!
用户aaa4已经存在!无需再次进行创建!
用户aaa5已经存在!无需再次进行创建!
用户aaa6已经存在!无需再次进行创建!
用户aaa7已经存在!无需再次进行创建!

8. 批量创建用户脚本


1、提示用户输入创建用户的前缀  比如:qls

2、判断这个前缀是否为字母组成

3、提示用户输入创建用户的后缀  后缀为创建用户的数量   比如: 10  就要创建10个用户  qls1..qls10

4. 判断用户的后缀是否为数字

5. 提示用户所要创建的用户列表 询问是否进行创建 yes no

6. yes则进行判断用户是否存在 存在则不进行创建, 不存在则进行创建

7. 创建成功,进行提示创建结果

8. no表示不进行创建


[root@shell /service/scripts/day06]# cat for-9.sh
#!/bin/bash
#提示用户输入创建用户的前缀
read -p "请输入你要创建用户的前缀[前缀必须是字母组成的]:" Qz
#判断用户输入的前缀是否为字母组成的
if [[ ! $Qz =~ ^[a-Z]+$ ]];then
    echo "你输入的不符合要求!前缀必须是由字母组成的!"
    exit
fi
#提示用户输入创建用户后缀,即数量
read -p "请输入你要创建用户的数量:" Num
#判断用户输入的数量是否为数字
if [[ ! $Num =~ ^[0-9]+$ ]];then
    echo "你输入的不符合要求!创建用户的数量必须为正整数!"
    exit
fi
#提示用户接下来要创建的用户列表
echo "接下来你要创建的用户为:${Qz}1..${Qz}${Num}"
read -p "你是否确定要进行创建这些用户[y/n]:" Confirm
#编写case语句
case $Confirm in
    y|Y|Yes|yes)
        echo "你选择了要进行创建这些用户!"
        for i in $(seq $Num)
        do
            User=${Qz}${i}
            #判断用户是否存在
            id $User &>/dev/null
            if [ $? -eq 0 ];then
                echo "用户${User}已经存在!无需再次进行创建!"
            else
                useradd $User &>/dev/null
                if [ $? -eq 0 ];then
                    echo "用户${User}创建成功....."
                else
                    echo "用户${User}创建失败,,,,,"
                fi
            fi
        done
        ;;
    n|no|N|No)
        echo "你选择了不创建这些用户!再见!"
        exit
        ;;
    *)
        echo "你输入的不符合要求!"
        exit
esac
[root@shell /service/scripts/day06]# sh for-9.sh
请输入你要创建用户的前缀[前缀必须是字母组成的]:324v
你输入的不符合要求!前缀必须是由字母组成的!
[root@shell /service/scripts/day06]# sh for-9.sh
请输入你要创建用户的前缀[前缀必须是字母组成的]:bbb
请输入你要创建用户的数量:fe3
你输入的不符合要求!创建用户的数量必须为正整数!
[root@shell /service/scripts/day06]# sh for-9.sh
请输入你要创建用户的前缀[前缀必须是字母组成的]:bbb
请输入你要创建用户的数量:5
接下来你要创建的用户为:bbb1..bbb5
你是否确定要进行创建这些用户[y/n]:n
你选择了不创建这些用户!再见!
[root@shell /service/scripts/day06]# sh for-9.sh
请输入你要创建用户的前缀[前缀必须是字母组成的]:bbb
请输入你要创建用户的数量:5
接下来你要创建的用户为:bbb1..bbb5
你是否确定要进行创建这些用户[y/n]:y
你选择了要进行创建这些用户!
用户bbb1创建成功.....
用户bbb2创建成功.....
用户bbb3创建成功.....
用户bbb4创建成功.....
用户bbb5创建成功.....
[root@shell /service/scripts/day06]# sh for-9.sh
请输入你要创建用户的前缀[前缀必须是字母组成的]:bbb
请输入你要创建用户的数量:5
接下来你要创建的用户为:bbb1..bbb5
你是否确定要进行创建这些用户[y/n]:Y
你选择了要进行创建这些用户!
用户bbb1已经存在!无需再次进行创建!
用户bbb2已经存在!无需再次进行创建!
用户bbb3已经存在!无需再次进行创建!
用户bbb4已经存在!无需再次进行创建!
用户bbb5已经存在!无需再次进行创建!



posted @   zbzSH  阅读(39)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示