一、批量创建用户脚本
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




