shell脚本题目

1:批量的创建用户

思路:

1)批量就是循环,输入的是否为数字且不能以0开头的数字

2)判断输入的用户是否为空

这个就是循环的次数是固定

read -p "请输入批量创建多少个用户;" num
if [[ $num =~ ^[0-9]+$ && ! $num =~ ^[0]+ ]];then
        read -p "请输入添加用户:" username
                if [ ! -z $username ];then
                        for i in `seq $num`
                        do
                                user=$username$i
                                useradd $user
                                echo "123456" | passwd --stdin $user &> /dev/null
                                if [ $? -eq 0 ];then
                                        echo "$user is created"
                                else
                                        echo "未知错误"
                                fi
                        done
                else
                        echo "输入的用户名为空"
                fi

else
        echo "输入的不是数字或者是以0开头的"
fi 

 解析:

[[$num =~ ^[0-9]+$ && ! $num =~ ^[0]+ ]]
&&匹配 2个全是真就是返回的就是真的
! 符合匹配的话就返回假的,不符合就返回真的

  

2:批量的删除用户

思路,1)先遍历/etc/passwd中,把可以登陆的shell的用户提取出来,

2)然后展示,是否删除,删除的话就直接删,不删除的话,展示下一位

#!/bin/bash
#展示用户,是否删除,不删除,则展下一位,删除的话,就删
for i in `grep bash /etc/passwd | cut -d : -f 1`
do
        echo "$i用户"
        read -p "是否删除:" q
        while true
        do
                if [ -z $q ];then
                        echo "没有输入"
                else
                        if [ $q == "y" ];then
                                userdel -r $i
                                echo "$i 删除成功"
                                break
                        else
                                echo "展示下一位用户"
                                break
                        fi
                fi
                read -p "是否删除:" q
        done
done

  

 

3:从文件中批量创建用户

使用while语句来完成,因为for语句是以空格来读取文件的,遇见空格就执行,while语句是以行来读取文件,以空格作为分割符

#/bin/bash
#判断是否输入参数
if [ $# -eq 0 ];then
        echo "没有输入参数"
        exit 10
fi
#判断文件是否为空
if [ ! -f $1 ];then
        echo "不是文件"
        exit 2
fi

while read line
do
        username=`echo $line | awk '{print $1}'`
        passwd=`echo $line | awk '{print $2}'`
        #判断用户是否存在
        id $username &> /dev/null
        if [ ! $? -eq 0 ];then
                useradd $username
                echo "$passwd" | passwd --stdin $username >/dev/null
                if [ $? -eq 0 ];then
                        echo "$username创建成功"
                fi
        else
                echo "用户已经存在了"
        fi
done < $1
           

 

for 语句也能完成,只不过是要定义分隔符,IFS='

'

#/bin/bash
#首先判断有没有输入参数

if [ $# -eq 0 ];then
	echo "没有输入参数"
	exit 10
fi

# 判断是否是文件
 
if [ ! -f $1 ];then
	echo "不是文件"
	exit 5
fi

IFS='
'

for i in `cat $1`
do
	username=`echo "$i"|awk '{print $1}'`
	password=`echo "$i"|awk '{print $2}'`
	# 判断用户是否存在
	id $username &> /dev/null
	if [ ! $? -eq 0 ];then
		useradd $username
		echo "$password" | passwd --stdin $username &> /dev/null
		if [ $? -eq 0 ];then
			echo "$username is created"
		else
			echo "未知错误"
		fi
	else
		echo "$username is exist"
		
	fi
done

  

 4:打印一个99乘法表

for i in `seq 9`
do
        for j in `seq $i`
        do
                echo -n -e "$i*$j=$(($i*$j))\t"
        done
        echo
done

 

主打的就是一个思路

外面变量控制的是打印几行,里面的变量输出一行打印几个

 

5:打印一个等腰三角形

read -p "请输入等腰三角形的高" h
for ((i=1;i<=h;i++))
do
        #输出2边的空格 就是高-当前行数
        a=$(($h-$i))
        for j in `seq $a`
        do
                echo -n " "
        done
        #输出一行打印几个(奇数)2$i-1
        b=$((2*$i-1))
        for k in `seq $b`
        do
                echo -n "*"
        done
        echo 
done

 6:判断哪些主机是启动了的(能通信的)

#!/bin/bash
#检测ip地址是否通的问题
#2种情况,第一种就是手动的输入ip地址,第二种就是没有手动的输入,检查一个范围内的ip地址
#判断是否输入了,第一种,用$#来判断 第二种,用-z来判断


if [ $# -eq 0 ];then
        #没有输入参数
        for i in {1..5}
        do
                ping -W2 -c2 192.168.20.$i &>  /dev/null  && echo "192.168.20.$i is success" || echo "192.168.20.$i is error"
        done
        #输入了参数,测试
else
        ping -W2 -c2 192.168.20.$1  &> /dev/null && echo "192.168.20.$1 is success" || echo "192.168.20.$1 is error"
fi

7:删除指定目录里面的文件  

就是如果一个目录里面有很多的文件,需要删除,一个一个的删除,比较耗时间,一个脚本,用来判断是否为文件,是的话删除

#!/bin/bash
for i in `ls /tmp`
do
        if [ -f /tmp/$i ];then
                rm -rf /tmp/$i
        else
                echo "$i is dir" >> /opt/dir.txt
        fi
done  

8:备份指定目录文件拷贝到其他目录下,并且指定的备份目录和其他目录从键盘中读取

#!/bin/bash
read -p "yuan dir:" yuan_dir
read -p "dest dir:" dest_dir
for i in `ls $yuan_dir`
do
        cp -a $yuan_dir/$i $dest_dir
done

9:判断负载均衡,磁盘的占用率大于80就报警

放在后台,一但超过了就报警,就停止死循环

disk_l=`df -h /|grep /|awk '{print $5}'| tr -d %`
while true
do
        if [ $disk_l -gt 80 ];then
                echo "disk:$disk_l% is full" 
                break
        else
                echo "disk:$disk_l% is free" &> /dev/null
        fi
        disk_l=`df -h /|grep /|awk '{print $5}'| tr -d %`
done

 

10:添加用户,指定uid,输入密码

使用位置化参数来添加用户,为root就退出,退出码为10,uid重复就提示重新输入uid,密码输入12345就直接退出,退出码为100,

注意:uid和密码通过键盘输入,用户名通过位置化参数来输入

#!/bin/bash
#先输入用户名,再来输入uid,最后输入密码,然后退出脚本
while true
do
        if [ $# -eq 0 ];then
                echo "没有输入参数(用户名)"
                exit 10
        else
                #输入root就退出
                if [ $1 == "root" ];then
                        echo "输入root退出"
                        exit 10
                else
                        read -p "input your uid:" num
                        while true
                        do      #判断uid是否重复
                                id $num &> /dev/null
                                if [ $? -eq 0 ];then
                                        echo "$u 已经存在,请重新输入"
                                #uid不重复的操作        
                                else
                                        read -p "input your password:" password
                                        #输入12345就直接退出
                                        if [ $password == "12345" ];then
                                               echo "密码输入有误"
                                               exit 100
                                       else
                                               useradd -u $num $1
                                               echo "$password" | passwd --stdin $1 &> /dev/null
                                               break
                                        fi
                                fi
                                #当有重复的时候,再次输入uid
                                read -p "input your uid:" num
                        done
                        break

                fi
        fi
done

  

 

11:关于一键部署网络的脚本

 

posted @ 2023-11-09 09:25  q_7  阅读(13)  评论(0编辑  收藏  举报