一、批量创建用户脚本
1.业务需求
1. 必须是root超级管理员才能执行这个脚本
2. 设置24位随机密码,最后将用户和密码信息保存到一个文件中 User: xxx Pass: xxxxx
3. 密码文件权限只有管理员可读,其他人没有任何权限
2.脚本代码
[root@xian /server/scripts]# cat useradd.sh #!/bin/bash # File Name: useradd.sh # Author: lixian ####################### #调用函数 [ -f /etc/init.d/functions ] && source /etc/init.d/functions #判断用户是否是超级管理员 if [ ! $USER == "root" ] && [ ! $UID -eq 0 ];then action "您不是超级管理员,没有权限执行脚本!" /bin/false exit fi #提示用户输入创建用户的前缀 read -p "请输入你要创建用户的前缀(必须为字母):" Qz #判断用户输入的前缀是否为字母 if [[ ! $Qz =~ ^[a-Z]+$ ]];then action "错误:您输入的内容不符合要求!" /bin/false exit fi #提示用户输入创建用户的数量 read -p "请输入创建用户的数量:" Num #判断用户输入的数量是否为数字 if [[ ! $Num =~ [0-9]+$ ]];then action "错误:您输入的数字不符合要求" /bin/false exit fi #提示用户需要创建用户列表 echo "你创建用户为:${Qz}1..${Qz}${Num}" read -p "你是否要创建这些用户?[yes/no]:" Confirm #判断用户输入的选择 case $Confirm in Yes|yes|Y|y) action "收到指令!即将为您创建用户!" /bin/true for i in $(seq $Num) do User=${Qz}${i} id $User &>/dev/null if [ $? -eq 0 ];then action "用户${User}已经存在!" /bin/false else useradd $User &>/dev/null Password=$(echo $((RANDOM))|md5sum |cut -c 1-8) echo "$Password" | passwd --stdin $User &>/dev/null if [ $? -eq 0 ];then action "${User}用户创建成功!" /bin/true echo "User: $User Pass: $Password" >> user_password.txt else action "${User}用户创建失败!" /bin/false fi fi done ;; No|no|N|n) action "收到指令!拒绝创建用户!" /bin/true exit ;; *) action "错误:您输入的内容不符合要求!" /bin/false exit esac chmod 400 user_password.txt &>/dev/null
3.执行结果
二、批量删除用户脚本
1.脚本代码
[root@xian /server/scripts]# cat userdel.sh #!/bin/bash # File Name: userdel.sh # Author: lixian ####################### if [ ! $UID -eq 0 ] && [ ! $USER == "root" ];then echo "无权限执行此脚本!" exit fi read -p "请输入你要删除的用户前缀: " del_qz if [ -z $del_qz ];then echo "输入的内容不正确!" exit fi read -p "请输入你要删除的用户数量: " user_num if [[ ! $user_num =~ ^[0-9]+$ ]];then echo "请输入整数" exit fi echo "你删除的用户是 ${del_qz}1 ..${del_qz}${user_num}" read -p "你确定要删除以上用户吗?[ y/n ] " readly case $readly in y|yes|YES) for i in $(seq $user_num) do user=${del_qz}${i} id $user &>/dev/null if [ $? -eq 0 ];then userdel -r $user echo "$user 用户删除成功!" else echo "$user 用户不存在!" fi done ;; n|no|NO) echo "你选择了不删除!" exit ;; *) echo "输入内容不正确!" exit esac
2.执行结果
[root@xian /server/scripts]# sh userdel.sh 请输入你要删除的用户前缀: lx 请输入你要删除的用户数量: 5 你删除的用户是 lx1 ..lx5 你确定要删除以上用户吗?[ y/n ] y lx1 用户删除成功! lx2 用户删除成功! lx3 用户删除成功! lx4 用户删除成功! lx5 用户删除成功! [root@xian /server/scripts]# sh userdel.sh 请输入你要删除的用户前缀: lx 请输入你要删除的用户数量: 5 你删除的用户是 lx1 ..lx5 你确定要删除以上用户吗?[ y/n ] y lx1 用户不存在! lx2 用户不存在! lx3 用户不存在! lx4 用户不存在! lx5 用户不存在!
三、批量探测10.0.0.0/24网段主机
1.业务需求
批量的进行探测10.0.0.0/24网段内的所有主机的存活状态
存活的主机,在进行判断远程连接端口是否开放
1. 使用循环进行批量探测 254 1 ..254
2. 怎么进行探测 ping 通则说明主机存活 不通说明主机不存活
3. 存活的主机再进行探测远程连接端口是否开放
4. 将探测结果进行返回
2.脚本代码
[root@xian /server/scripts]# cat tance.sh #!/bin/bash # File Name: tance.sh # Author: lixian ####################### #引用函数库 [ -f /etc/init.d/functions ] && source /etc/init.d/functions >ip.log >ip_err.log #批量探测 echo "-------------存活扫描--------------" action "开始对IP1-254范围进行存活扫描...请稍后..." /bin/true for i in $(seq 254) do { IP=10.0.0.$i ping -c1 -W1 $IP &>/dev/null if [ $? -eq 0 ];then action "主机-$IP-是存活的!" /bin/true echo "主机-$IP-是存活的!" >>ip.log else echo "主机-$IP-是死的!" >>ip_err.log fi }& sleep 0.1 done #端口扫描 >port.log ip_live=$(cat ip.log |wc -l) ip_dead=$(cat ip_err.log |wc -l) action "IP地址扫描完毕,共有${ip_live}台主机存活!${ip_dead}台主机死的!" /bin/true echo "-------------端口扫描--------------" action "开始对存活的主机进行端口扫描...请稍后..." /bin/true for j in $(awk -F- '{print $2}' ip.log) do { Status=$(nmap -p22 $j | awk '/22/{print $2}') if [ $Status == "open" ];then action "$j 端口是开放的!" /bin/true echo "$j 端口是开放的!" >>port.log else action "$j 端口是关闭的!" /bin/false fi }& sleep 0.5 done
3.执行结果
四、随机点名脚本
[root@xian /server/scripts]# ls -d stdent.txt #名单文件 stdent.txt [root@xian /server/scripts]# cat stdent.sh #!/bin/bash # File Name: stdent.sh # Author: lixian ####################### Count=$(cat stdent.txt |wc -l) read -p "请输入需要循环名单的次数:" Num #判断输出的次数是否为整数 if [[ ! $Num =~ ^[0-9]+$ ]];then echo "你输入的不正确" exit fi for i in $(seq $Num) do Ran=$(( $RANDOM % $Count + 1 )) #循环打印人员名单 sed -n "${Ran}p" stdent.txt sleep 0.5 done Name=$(sed -n "${Ran}p" stdent.txt) echo -e "幸运儿:\033[42;37m $Name \033[0m"
五、批量创建不同日期的文件
1.脚本代码
[root@xian /server/scripts/mkdir_date]# cat mkdir_date.sh #!/bin/bash # File Name: mkdir_date.sh # Author: lixian ####################### for i in {1..10} do Date=$(date +%F) touch ${Date}.txt date -s "+1 day" +%F &>/dev/null echo "创建${Date}.txt 成功" done ntpdate ntp.aliyun.com &>/dev/null
2.执行结果
[root@xian /server/scripts/mkdir_date]# sh mkdir_date.sh 创建2020-04-27.txt 成功 创建2020-04-28.txt 成功 创建2020-04-29.txt 成功 创建2020-04-30.txt 成功 创建2020-05-01.txt 成功 创建2020-05-02.txt 成功 创建2020-05-03.txt 成功 创建2020-05-04.txt 成功 创建2020-05-05.txt 成功 创建2020-05-06.txt 成功 [root@xian /server/scripts/mkdir_date]# ls -l total 4 -rw-r--r-- 1 root root 0 Apr 27 22:46 2020-04-27.txt -rw-r--r-- 1 root root 0 Apr 28 2020 2020-04-28.txt -rw-r--r-- 1 root root 0 Apr 29 2020 2020-04-29.txt -rw-r--r-- 1 root root 0 Apr 30 2020 2020-04-30.txt -rw-r--r-- 1 root root 0 May 1 2020 2020-05-01.txt -rw-r--r-- 1 root root 0 May 2 2020 2020-05-02.txt -rw-r--r-- 1 root root 0 May 3 2020 2020-05-03.txt -rw-r--r-- 1 root root 0 May 4 2020 2020-05-04.txt -rw-r--r-- 1 root root 0 May 5 2020 2020-05-05.txt -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.脚本代码
[root@xian /server/scripts]# cat mysql_backup.sh #!/bin/bash # File Name: mysql_backup.sh # Author: lixian ####################### #引用函数 [ -f /etc/init.d/functions ] && source /etc/init.d/functions #定义变量 Date=$(date +%F) Db_User=root Db_Pass=123456 #编写循环 for Db_Name in $(mysql -u$Db_User -p$Db_Pass -e "show databases;" | sed 1d |grep -v '.*_schema') do #准备备份目录 Db_Dir=/data/backup/$Db_Name [ -d $Db_Dir ] || mkdir -p $Db_Dir #备份数据库 mysqldump -u${Db_User} -p${Db_Pass} --single-transaction -R -B $Db_Name >$Db_Dir/${Date}_${Db_Name}.sql if [ $? -eq 0 ];then action "数据库${Db_Name}备份成功!" /bin/true else action "数据库${Db_Name}备份失败!" /bin/false fi #备份数据库中的表 for Table_Name in $(mysql -u$Db_User -p$Db_Pass -e "use $Db_Name;show tables;" | sed 1d) do #备份表 mysqldump -u${Db_User} -p${Db_Pass} --single-transaction -R $Db_Name >$Db_Dir/${Dtae}_${Db_Name}_${Table_Name}.sql if [ $? -eq 0 ];then action "数据库${Db_Name}中的${Table_Name}表备份完成!" /bin/true else action "数据库${Db_Name}中的${Table_Name}表备份失败!" /bin/false fi done done