shell脚本题目
1:批量的创建用户
思路:
1)批量就是循环,输入的是否为数字且不能以0开头的数字
2)判断输入的用户是否为空
这个就是循环的次数是固定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 |
解析:
1 2 3 | [[$num =~ ^[0-9]+$ && ! $num =~ ^[0]+ ]] &&匹配 2个全是真就是返回的就是真的 ! 符合匹配的话就返回假的,不符合就返回真的 |
2:批量的删除用户
思路,1)先遍历/etc/passwd中,把可以登陆的shell的用户提取出来,
2)然后展示,是否删除,删除的话就直接删,不删除的话,展示下一位
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/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语句是以行来读取文件,以空格作为分割符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #/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='
'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #/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乘法表
1 2 3 4 5 6 7 8 | for i in `seq 9` do for j in `seq $i` do echo -n -e "$i*$j=$(($i*$j))\t" done echo done |
主打的就是一个思路
外面变量控制的是打印几行,里面的变量输出一行打印几个
5:打印一个等腰三角形
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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:判断哪些主机是启动了的(能通信的)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/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:删除指定目录里面的文件
就是如果一个目录里面有很多的文件,需要删除,一个一个的删除,比较耗时间,一个脚本,用来判断是否为文件,是的话删除
1 2 3 4 5 6 7 8 9 | #!/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:备份指定目录文件拷贝到其他目录下,并且指定的备份目录和其他目录从键盘中读取
1 2 3 4 5 6 7 | #!/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就报警
放在后台,一但超过了就报警,就停止死循环
1 2 3 4 5 6 7 8 9 10 11 | 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和密码通过键盘输入,用户名通过位置化参数来输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #!/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:关于一键部署网络的脚本
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步