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