• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

Shell脚本编程学习——For循环简单脚本案例【显哥出品,必为精品】

Shell编程 lixian 5年前 (2020-04-27) 2006次浏览 2个评论 扫描二维码
文章目录[隐藏]

一、批量创建用户脚本

1.业务需求

1. 必须是root超级管理员才能执行这个脚本

2. 设置24位随机密码,最后将用户和密码信息保存到一个文件中 User: xxx Pass: xxxxx

3. 密码文件权限只有管理员可读,其他人没有任何权限

2.脚本代码

  1. [root@xian /server/scripts]# cat useradd.sh
  2. #!/bin/bash
  3. # File Name: useradd.sh
  4. # Author: lixian
  5. #######################
  6. #调用函数
  7. [ -f /etc/init.d/functions ] && source /etc/init.d/functions
  8. #判断用户是否是超级管理员
  9. if [ ! $USER == "root" ] && [ ! $UID -eq 0 ];then
  10. action "您不是超级管理员,没有权限执行脚本!" /bin/false
  11. exit
  12. fi
  13. #提示用户输入创建用户的前缀
  14. read -p "请输入你要创建用户的前缀(必须为字母):" Qz
  15. #判断用户输入的前缀是否为字母
  16. if [[ ! $Qz =~ ^[a-Z]+$ ]];then
  17. action "错误:您输入的内容不符合要求!" /bin/false
  18. exit
  19. fi
  20. #提示用户输入创建用户的数量
  21. read -p "请输入创建用户的数量:" Num
  22. #判断用户输入的数量是否为数字
  23. if [[ ! $Num =~ [0-9]+$ ]];then
  24. action "错误:您输入的数字不符合要求" /bin/false
  25. exit
  26. fi
  27. #提示用户需要创建用户列表
  28. echo "你创建用户为:${Qz}1..${Qz}${Num}"
  29. read -p "你是否要创建这些用户?[yes/no]:" Confirm
  30. #判断用户输入的选择
  31. case $Confirm in
  32. Yes|yes|Y|y)
  33. action "收到指令!即将为您创建用户!" /bin/true
  34. for i in $(seq $Num)
  35. do
  36. User=${Qz}${i}
  37. id $User &>/dev/null
  38. if [ $? -eq 0 ];then
  39. action "用户${User}已经存在!" /bin/false
  40. else
  41. useradd $User &>/dev/null
  42. Password=$(echo $((RANDOM))|md5sum |cut -c 1-8)
  43. echo "$Password" | passwd --stdin $User &>/dev/null
  44. if [ $? -eq 0 ];then
  45. action "${User}用户创建成功!" /bin/true
  46. echo "User: $User Pass: $Password" >> user_password.txt
  47. else
  48. action "${User}用户创建失败!" /bin/false
  49. fi
  50. fi
  51. done
  52. ;;
  53. No|no|N|n)
  54. action "收到指令!拒绝创建用户!" /bin/true
  55. exit
  56. ;;
  57. *)
  58. action "错误:您输入的内容不符合要求!" /bin/false
  59. exit
  60. esac
  61. chmod 400 user_password.txt &>/dev/null

3.执行结果

Shell脚本编程学习——For循环简单脚本案例【显哥出品,必为精品】

二、批量删除用户脚本

1.脚本代码

  1. [root@xian /server/scripts]# cat userdel.sh
  2. #!/bin/bash
  3. # File Name: userdel.sh
  4. # Author: lixian
  5. #######################
  6. if [ ! $UID -eq 0 ] && [ ! $USER == "root" ];then
  7. echo "无权限执行此脚本!"
  8. exit
  9. fi
  10.  
  11.  
  12. read -p "请输入你要删除的用户前缀: " del_qz
  13. if [ -z $del_qz ];then
  14. echo "输入的内容不正确!"
  15. exit
  16. fi
  17.  
  18.  
  19. read -p "请输入你要删除的用户数量: " user_num
  20. if [[ ! $user_num =~ ^[0-9]+$ ]];then
  21. echo "请输入整数"
  22. exit
  23. fi
  24.  
  25.  
  26. echo "你删除的用户是 ${del_qz}1 ..${del_qz}${user_num}"
  27. read -p "你确定要删除以上用户吗?[ y/n ] " readly
  28.  
  29.  
  30. case $readly in
  31. y|yes|YES)
  32. for i in $(seq $user_num)
  33. do
  34. user=${del_qz}${i}
  35. id $user &>/dev/null
  36. if [ $? -eq 0 ];then
  37. userdel -r $user
  38. echo "$user 用户删除成功!"
  39. else
  40. echo "$user 用户不存在!"
  41. fi
  42. done
  43. ;;
  44. n|no|NO)
  45. echo "你选择了不删除!"
  46. exit
  47. ;;
  48. *)
  49. echo "输入内容不正确!"
  50. exit
  51. esac

2.执行结果

  1. [root@xian /server/scripts]# sh userdel.sh
  2. 请输入你要删除的用户前缀: lx
  3. 请输入你要删除的用户数量: 5
  4. 你删除的用户是 lx1 ..lx5
  5. 你确定要删除以上用户吗?[ y/n ] y
  6. lx1 用户删除成功!
  7. lx2 用户删除成功!
  8. lx3 用户删除成功!
  9. lx4 用户删除成功!
  10. lx5 用户删除成功!
  11. [root@xian /server/scripts]# sh userdel.sh
  12. 请输入你要删除的用户前缀: lx
  13. 请输入你要删除的用户数量: 5
  14. 你删除的用户是 lx1 ..lx5
  15. 你确定要删除以上用户吗?[ y/n ] y
  16. lx1 用户不存在!
  17. lx2 用户不存在!
  18. lx3 用户不存在!
  19. lx4 用户不存在!
  20. lx5 用户不存在!

三、批量探测10.0.0.0/24网段主机

1.业务需求

批量的进行探测10.0.0.0/24网段内的所有主机的存活状态

存活的主机,在进行判断远程连接端口是否开放

1. 使用循环进行批量探测 254 1 ..254

2. 怎么进行探测 ping 通则说明主机存活 不通说明主机不存活

3. 存活的主机再进行探测远程连接端口是否开放

4. 将探测结果进行返回

2.脚本代码

  1. [root@xian /server/scripts]# cat tance.sh
  2. #!/bin/bash
  3. # File Name: tance.sh
  4. # Author: lixian
  5. #######################
  6. #引用函数库
  7. [ -f /etc/init.d/functions ] && source /etc/init.d/functions
  8. >ip.log
  9. >ip_err.log
  10. #批量探测
  11. echo "-------------存活扫描--------------"
  12. action "开始对IP1-254范围进行存活扫描...请稍后..." /bin/true
  13. for i in $(seq 254)
  14. do
  15. {
  16. IP=10.0.0.$i
  17. ping -c1 -W1 $IP &>/dev/null
  18. if [ $? -eq 0 ];then
  19. action "主机-$IP-是存活的!" /bin/true
  20. echo "主机-$IP-是存活的!" >>ip.log
  21. else
  22. echo "主机-$IP-是死的!" >>ip_err.log
  23. fi
  24. }&
  25. sleep 0.1
  26. done
  27.  
  28. #端口扫描
  29. >port.log
  30. ip_live=$(cat ip.log |wc -l)
  31. ip_dead=$(cat ip_err.log |wc -l)
  32. action "IP地址扫描完毕,共有${ip_live}台主机存活!${ip_dead}台主机死的!" /bin/true
  33. echo "-------------端口扫描--------------"
  34. action "开始对存活的主机进行端口扫描...请稍后..." /bin/true
  35. for j in $(awk -F- '{print $2}' ip.log)
  36. do
  37. {
  38. Status=$(nmap -p22 $j | awk '/22/{print $2}')
  39. if [ $Status == "open" ];then
  40. action "$j 端口是开放的!" /bin/true
  41. echo "$j 端口是开放的!" >>port.log
  42. else
  43. action "$j 端口是关闭的!" /bin/false
  44. fi
  45. }&
  46. sleep 0.5
  47. done

3.执行结果

Shell脚本编程学习——For循环简单脚本案例【显哥出品,必为精品】

四、随机点名脚本

  1. [root@xian /server/scripts]# ls -d stdent.txt #名单文件
  2. stdent.txt
  3. [root@xian /server/scripts]# cat stdent.sh
  4. #!/bin/bash
  5. # File Name: stdent.sh
  6. # Author: lixian
  7. #######################
  8. Count=$(cat stdent.txt |wc -l)
  9. read -p "请输入需要循环名单的次数:" Num
  10. #判断输出的次数是否为整数
  11. if [[ ! $Num =~ ^[0-9]+$ ]];then
  12. echo "你输入的不正确"
  13. exit
  14. fi
  15. for i in $(seq $Num)
  16. do
  17. Ran=$(( $RANDOM % $Count + 1 ))
  18. #循环打印人员名单
  19. sed -n "${Ran}p" stdent.txt
  20. sleep 0.5
  21. done
  22. Name=$(sed -n "${Ran}p" stdent.txt)
  23. echo -e "幸运儿:\033[42;37m $Name \033[0m"

五、批量创建不同日期的文件

1.脚本代码

  1. [root@xian /server/scripts/mkdir_date]# cat mkdir_date.sh
  2. #!/bin/bash
  3. # File Name: mkdir_date.sh
  4. # Author: lixian
  5. #######################
  6. for i in {1..10}
  7. do
  8. Date=$(date +%F)
  9. touch ${Date}.txt
  10. date -s "+1 day" +%F &>/dev/null
  11. echo "创建${Date}.txt 成功"
  12. done
  13. ntpdate ntp.aliyun.com &>/dev/null

2.执行结果

  1. [root@xian /server/scripts/mkdir_date]# sh mkdir_date.sh
  2. 创建2020-04-27.txt 成功
  3. 创建2020-04-28.txt 成功
  4. 创建2020-04-29.txt 成功
  5. 创建2020-04-30.txt 成功
  6. 创建2020-05-01.txt 成功
  7. 创建2020-05-02.txt 成功
  8. 创建2020-05-03.txt 成功
  9. 创建2020-05-04.txt 成功
  10. 创建2020-05-05.txt 成功
  11. 创建2020-05-06.txt 成功
  12. [root@xian /server/scripts/mkdir_date]# ls -l
  13. total 4
  14. -rw-r--r-- 1 root root 0 Apr 27 22:46 2020-04-27.txt
  15. -rw-r--r-- 1 root root 0 Apr 28 2020 2020-04-28.txt
  16. -rw-r--r-- 1 root root 0 Apr 29 2020 2020-04-29.txt
  17. -rw-r--r-- 1 root root 0 Apr 30 2020 2020-04-30.txt
  18. -rw-r--r-- 1 root root 0 May 1 2020 2020-05-01.txt
  19. -rw-r--r-- 1 root root 0 May 2 2020 2020-05-02.txt
  20. -rw-r--r-- 1 root root 0 May 3 2020 2020-05-03.txt
  21. -rw-r--r-- 1 root root 0 May 4 2020 2020-05-04.txt
  22. -rw-r--r-- 1 root root 0 May 5 2020 2020-05-05.txt
  23. -rw-r--r-- 1 root root 0 May 6 2020 2020-05-06.txt

六、数据库的分库分表备份

1.脚本思路

1. 数据库如何备份

mysqldump -uroot -pqls.123 –single-transaction -R -B world >world.sql

2. 如何备份数据库表

mysqldump -uroot -pqls.123 –single-transaction -R wordpress wp_users >wordpress_wp_users.sql

3. 备份到哪里

/data/backup/datebases 每个库的目录

4. 备份周期 定时任务

5. 不能手动的输入数据库名,如何获取到所有的数据库名称 表的名称

mysql -uroot -pqls.123 -e “show databases;” | sed 1d | grep -v ‘.*_schema’

mysql -uroot -pqls.123 -e “use world; show tables;” | sed 1d

2.脚本代码

  1. [root@xian /server/scripts]# cat mysql_backup.sh
  2. #!/bin/bash
  3. # File Name: mysql_backup.sh
  4. # Author: lixian
  5. #######################
  6. #引用函数
  7. [ -f /etc/init.d/functions ] && source /etc/init.d/functions
  8. #定义变量
  9. Date=$(date +%F)
  10. Db_User=root
  11. Db_Pass=123456
  12. #编写循环
  13. for Db_Name in $(mysql -u$Db_User -p$Db_Pass -e "show databases;" | sed 1d |grep -v '.*_schema')
  14. do
  15. #准备备份目录
  16. Db_Dir=/data/backup/$Db_Name
  17. [ -d $Db_Dir ] || mkdir -p $Db_Dir
  18. #备份数据库
  19. mysqldump -u${Db_User} -p${Db_Pass} --single-transaction -R -B $Db_Name >$Db_Dir/${Date}_${Db_Name}.sql
  20. if [ $? -eq 0 ];then
  21. action "数据库${Db_Name}备份成功!" /bin/true
  22. else
  23. action "数据库${Db_Name}备份失败!" /bin/false
  24. fi
  25. #备份数据库中的表
  26. for Table_Name in $(mysql -u$Db_User -p$Db_Pass -e "use $Db_Name;show tables;" | sed 1d)
  27. do
  28. #备份表
  29. mysqldump -u${Db_User} -p${Db_Pass} --single-transaction -R $Db_Name >$Db_Dir/${Dtae}_${Db_Name}_${Table_Name}.sql
  30. if [ $? -eq 0 ];then
  31. action "数据库${Db_Name}中的${Table_Name}表备份完成!" /bin/true
  32. else
  33. action "数据库${Db_Name}中的${Table_Name}表备份失败!" /bin/false
  34. fi
  35. done
  36. done

3.执行结果

Shell脚本编程学习——For循环简单脚本案例【显哥出品,必为精品】


本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:Shell脚本编程学习——For循环简单脚本案例【显哥出品,必为精品】
喜欢 (0)

您必须 登录 才能发表评论!

(2)个小伙伴在吐槽
  1. 写得不错
    匿名2020-10-11 00:01