1.循环语句之for循环基本概述

for  变量  in   取值列表
do
    循环体
done

当条件为真,则执行循环体,如果条件为假,则结束循环。

#取值列表,很多种取值方法,默认以空白字符为分割符

[root@shell /scripts/shell07]# cat for-1.sh
#!/bin/bash
for i in file1 file2 file3
do
    echo "$i"
    echo "########################"
done
[root@shell /scripts/shell07]# sh for-1.sh
file1
########################
file2
########################
file3
########################

#当取值列表中值出现空格的情况下,需要使用引号进行括起来
[root@shell /scripts/shell07]# cat for-2.sh
#!/bin/bash
for i in 'file1 test' file2 file3
do
    echo "$i"
    echo "########################"
done
[root@shell /scripts/shell07]# sh for-2.sh
file1 test
########################
file2
########################
file3
########################


#取值列表中出现特殊字符,则使用转义字符进行转义
[root@shell /scripts/shell07]# cat for-2.sh
#!/bin/bash
for i in file1 \( file2 file3
do
    echo "$i"
    echo "########################"
done
[root@shell /scripts/shell07]# sh for-2.sh
file1
########################
(
########################
file2
########################
file3
########################

#根据变量进行取值

[root@shell /scripts/shell07]# cat for-3.sh
#!/bin/bash
List="file1 file2 file3"
for i in  $List
do
    echo "$i"
    echo "########################"
done
[root@shell /scripts/shell07]# sh for-3.sh
file1
########################
file2
########################
file3
########################


#通过命令中取值

[root@shell /scripts/shell07]# cat for-4.sh
#!/bin/bash
for i in  $(cat /etc/hosts)
do
    echo "$i"
    echo "########################"
done
[root@shell /scripts/shell07]# sh for-4.sh
127.0.0.1
########################
localhost
########################
localhost.localdomain
########################
localhost4
########################
localhost4.localdomain4
########################
::1
########################
localhost
########################
localhost.localdomain
########################
localhost6
########################
localhost6.localdomain6
########################

#自定义分隔符

IFS=:        #以冒号为分隔符

[root@shell /scripts/shell07]# cat for-5.sh
#!/bin/bash
IFS=:
for i in  $(cat /etc/passwd | head -1)
do
    echo "$i"
done
[root@shell /scripts/shell07]# sh for-5.sh
root
x
0
0
root
/root
/bin/bash

#指定多个分隔符

IFS=':;/'


[root@shell /scripts/shell07]# cat for-6.sh
#!/bin/bash
IFS=':;/'
for i in $(cat test.txt)
do
    echo $i
done
[root@shell /scripts/shell07]# sh for-6.sh
root
oldboy
qiudao
admin

#以换行符作为分隔符

IFS=$'\n'

[root@shell /scripts/shell07]# cat for-7.sh
#!/bin/bash
IFS=$'\n'
for i in $(cat  /etc/hosts)
do
    echo $i
done
[root@shell /scripts/shell07]# sh for-7.sh
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6


#C语言风格的for

[root@shell /scripts/shell07]# cat for-8.sh
#!/bin/bash
for i in {1..10}
do
    echo $i
done
[root@shell /scripts/shell07]# sh for-8.sh
1
2
3
4
5
6
7
8
9
10

[root@shell /scripts/shell07]# cat for-8.sh
#!/bin/bash
for ((i=0;i<10;i++))
do
    echo $i
done
[root@shell /scripts/shell07]# sh for-8.sh
0
1
2
3
4
5
6
7
8
9

#定义多个变量,输出1-9的升序和降序

C语言风格

[root@shell /scripts/shell07]# cat for-8.sh
#!/bin/bash
for ((a=1,b=9;a<10;a++,b--))
do
    echo $a $b
done
[root@shell /scripts/shell07]# sh for-8.sh
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
9 1


正常怎么写

[root@shell /scripts/shell07]# cat for-9.sh
#!/bin/bash
a=0
b=10
for i in {1..9}
do
    let a++
    let b--
    echo $a $b
done
[root@shell /scripts/shell07]# sh for-9.sh
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
9 1

2. For循环场景示例

1. 通过一个文件,进行批量创建用户

    1. for循环根据文件内容进行取值

    2. 判断该用户是否存在,存在则提示已存在,无需创建

    3. 不存在则创建

    4. 提示创建结果

[root@shell /scripts/shell08]# cat for-2.sh
#!/bin/bash
for i in $(cat user.txt)
do
    #判断用户是否存在
    id $i &>/dev/null
    if [ $? -eq 0 ];then
        echo "用户${i}已经存在该系统!无需再次创建!"
    else
        useradd $i &>/dev/null
        if [ $? -eq 0 ];then
            echo "用户${i}创建成功!"
        else
            echo "用户${i}创建失败!"
        fi
    fi
done
[root@shell /scripts/shell08]# sh for-2.sh
用户abc创建成功!
用户abd创建成功!
用户abe创建成功!
用户abf创建成功!
[root@shell /scripts/shell08]# id abc
uid=1005(abc) gid=1005(abc) groups=1005(abc)
[root@shell /scripts/shell08]# sh for-2.sh
用户abc已经存在该系统!无需再次创建!
用户abd已经存在该系统!无需再次创建!
用户abe已经存在该系统!无需再次创建!
用户abf已经存在该系统!无需再次创建!

[root@shell /scripts/shell08]# echo "abg" >> user.txt 
[root@shell /scripts/shell08]# sh for-2.sh
用户abc已经存在该系统!无需再次创建!
用户abd已经存在该系统!无需再次创建!
用户abe已经存在该系统!无需再次创建!
用户abf已经存在该系统!无需再次创建!
用户abg创建成功!

2. 根据读入文件内容,进行批量创建用户,user:pass  创建用户并创建相对应的密码

    1. 从文件中进行取值

    2. 先把用户调用出来,判断用户是否存在

    3. 存在则提示已经存在,不要再去设置密码

    4. 不存在则进行创建,再创建密码

    5. 显示创建结果

[root@shell /scripts/shell08]# cat user.txt
aaa:thjoirt
bbb:rgtgtrh
ccc:khguth
ddd:fuihhg

[root@shell /scripts/shell08]# cat for-3.sh
#!/bin/bash
for i in  $(cat user.txt)
do
    #1.需要把用户和密码进行分开
    User=$(echo $i | awk -F: '{print $1}')
    Pass=$(echo $i | awk -F: '{print $2}')
    #2.判断用户是否存在
    id $User &>/dev/null
    if [ $? -eq 0 ];then
        echo "用户${User}已经存在!"
    else
        useradd  $User &>/dev/null && echo $Pass |passwd --stdin $User  &>/dev/null
        if [ $? -eq 0 ];then
            echo "用户${User}创建成功!并且密码初始化成功!"
        else
            echo "用户${User}创建失败!"
        fi
    fi
done
[root@shell /scripts/shell08]# sh for-3.sh
用户aaa创建成功!并且密码初始化成功!
用户bbb创建成功!并且密码初始化成功!
用户ccc创建成功!并且密码初始化成功!
用户ddd创建成功!并且密码初始化成功!
[root@shell /scripts/shell08]# sh for-3.sh
用户aaa已经存在!
用户bbb已经存在!
用户ccc已经存在!
用户ddd已经存在!

3. 批量创建用户,首先需要用户输入前缀,前缀由字母组成如:oldboy  后缀为数字,同时也为创建用户的数量 如果是:10,那么就需要创建10个用户:如:oldboy1 oldboy2....oldboy10.

    1. 提示用户输入前缀,且为字母

    2. 判断用户输入的是否是字母

    3. 提示用户输入数字,创建用户的数量,必须是整数

    4. 判断用户输入的是否是整数

    5. 提示用户接下来要创建哪些用户

    6. 提示用户是否确认创建这些用户

    7. 判断这个用户是否存在,存在则不创建

    8. 不存在则进行创建

    9. 输出创建结果

[root@shell /scripts/shell08]# cat for-4.sh
#!/bin/bash
#1.提示用户输入要创建用户的前缀
read -p "请输入你要创建用户的前缀:" Qz
#2.判断用户的前缀是否为字母
if [[ ! $Qz =~ ^[a-Z]+$ ]];then
    echo "你输入的前缀不符合要求!前缀必须是字母组成的!"
    exit
fi
#3.提示用户输入要创建用户的数量
read -p "请输入你要创建用户的数量:" Num
#4.判断用户输入的数量是否是整数
if [[ ! $Num =~ ^[0-9]+$ ]];then
    echo "你输入的不符合要求!必须要输入整数!"
    exit
fi
#5.提示用户接下来要创建哪些用户,并是否确认要进行创建
echo "你接下来要创建的用户为:${Qz}1..${Qz}${Num}"
read -p "是否确认要创建上方的这些用户[Yes|No]:" Qr
#6.根据用户输入进行选择要执行的命令
case $Qr in
    Yes|y|Y|yes)
            for i in $(seq ${Num})
            do
                #判断用户是否存在
                User=${Qz}${i}
                id $User &>/dev/null
                if [ $? -eq 0 ];then
                    echo "用户${User}已经存在!"
                else
                    useradd $User &>/dev/null 
                    if [ $? -eq 0 ];then
                        echo "用户${User}创建成功.............."
                    else
                        echo "用户${User}创建失败.............."
                    fi
                fi
            done
            ;;
    No|n|N|no)
            echo "你想好了再创建!"
            exit
            ;;
    *)
            echo "你输入的不符合要求!请按照要求输入!"
            exit
esac

[root@shell /scripts/shell08]# sh for-4.sh
请输入你要创建用户的前缀:ad3
你输入的前缀不符合要求!前缀必须是字母组成的!
[root@shell /scripts/shell08]# sh for-4.sh
请输入你要创建用户的前缀:aaa
请输入你要创建用户的数量:g
你输入的不符合要求!必须要输入整数!
[root@shell /scripts/shell08]# sh for-4.sh
请输入你要创建用户的前缀:oldboy
请输入你要创建用户的数量:10
你接下来要创建的用户为:oldboy1..oldboy10
是否确认要创建上方的这些用户[Yes|No]:n
你想好了再创建!
[root@shell /scripts/shell08]# sh for-4.sh
请输入你要创建用户的前缀:oldboy
请输入你要创建用户的数量:10
你接下来要创建的用户为:oldboy1..oldboy10
是否确认要创建上方的这些用户[Yes|No]:y
用户oldboy1创建成功..............
用户oldboy2创建成功..............
用户oldboy3创建成功..............
用户oldboy4创建成功..............
用户oldboy5创建成功..............
用户oldboy6创建成功..............
用户oldboy7创建成功..............
用户oldboy8创建成功..............
用户oldboy9创建成功..............
用户oldboy10创建成功..............
[root@shell /scripts/shell08]# sh for-4.sh
请输入你要创建用户的前缀:oldboy
请输入你要创建用户的数量:10
你接下来要创建的用户为:oldboy1..oldboy10
是否确认要创建上方的这些用户[Yes|No]:y
用户oldboy1已经存在!
用户oldboy2已经存在!
用户oldboy3已经存在!
用户oldboy4已经存在!
用户oldboy5已经存在!
用户oldboy6已经存在!
用户oldboy7已经存在!
用户oldboy8已经存在!
用户oldboy9已经存在!
用户oldboy10已经存在!

4. 创建用户,首先需要用户输入前缀,前缀由字母组成如:oldboy  后缀为数字,同时也为创建用户的数量 如果是:10,那么就需要创建10个用户:如:oldboy1 oldboy2....oldboy10. 创建用户必须要有root权限才能执行,创建的用户设置一个随机10位密码,将用户对应的随机密码统一保存到一个密码文件中,密码文件生成成功之后,密码文件的权限是400.  

测试用户和密码是否可以登录

1. 只有root用户才有权限执行脚本

2. 随机的10位密码

3. 把用户和相对应的密码统一的追加到一个文件中

4. 密码文件的权限是400

[root@shell /scripts/shell08]# cat for-5.sh
#!/bin/bash
#0.判断当前用户是否为超级管理员
if [ ! $USER == "root" -a ! $UID -eq 0 ];then
    echo "该用户${USER}对此脚本没有执行权限!只有超级管理员才有执行权限!"
    exit
fi
#1.提示用户输入要创建用户的前缀
read -p "请输入你要创建用户的前缀:" Qz
#2.判断用户的前缀是否为字母
if [[ ! $Qz =~ ^[a-Z]+$ ]];then
    echo "你输入的前缀不符合要求!前缀必须是字母组成的!"
    exit
fi
#3.提示用户输入要创建用户的数量
read -p "请输入你要创建用户的数量:" Num
#4.判断用户输入的数量是否是整数
if [[ ! $Num =~ ^[0-9]+$ ]];then
    echo "你输入的不符合要求!必须要输入整数!"
    exit
fi
#5.提示用户接下来要创建哪些用户,并是否确认要进行创建
echo "你接下来要创建的用户为:${Qz}1..${Qz}${Num}"
read -p "是否确认要创建上方的这些用户[Yes|No]:" Qr
#6.根据用户输入进行选择要执行的命令
case $Qr in
    Yes|y|Y|yes)
            for i in $(seq ${Num})
            do
                #判断用户是否存在
                User=${Qz}${i}
                id $User &>/dev/null
                if [ $? -eq 0 ];then
                    echo "用户${User}已经存在!"
                else
                    Pass=$(echo $RANDOM |md5sum |cut -c 1-10)
                    useradd $User &>/dev/null && echo "$Pass" |passwd --stdin $User &>/dev/null
                    if [ $? -eq 0 ];then
                        echo "用户${User}创建成功,并且密码也设置成功!" 
                        echo -e "User:$User \tPass:$Pass" >>pass.txt
                        chmod 400  pass.txt
                    else
                        echo "用户${User}创建失败.............."
                    fi
                fi
            done
            echo "用户名及密码都保存在pass.txt文件中!需要密码时,可查看此文件!"
            ;;
    No|n|N|no)
            echo "你想好了再创建!"
            exit
            ;;
    *)
            echo "你输入的不符合要求!请按照要求输入!"
            exit
esac

午休作业:



5. 编写一个脚本:批量删除用户。根据之前创建的用户,进行删除

    1. 提示用户输入用户的前缀,

    2. 判断用户的前缀是否为字母

    3. 提示要删除输入用户的数量

    4. 判断用户输入的后缀是否为整数

    5. 提示用户接下来要删除哪些用户

    6. 提示用户是否确认删除用户

    7. 如果用户存在则删除

    8. 不存在则提示退出。


[root@shell /scripts/shell08]# cat for-6.sh
#!/bin/bash
#1.提示用户输入用户的前缀
read -p "请输入你要删除用户的前缀:" Qz
#2.判断用户输入的前缀是否为字母
if [[ ! $Qz =~ ^[a-Z]+$ ]];then
    echo "你输入的前缀不符合要求!前缀必须是字母组成!"
    exit
fi
#3.提示用户输入要删除用户的数量
read -p "请输入你要删除用户的数量:" Num
#4.判断用户输入的后缀数字是否为整数
if [[ ! $Num =~ ^[0-9]+$ ]];then
    echo "你输入的数字不是整数!"
    exit
fi
#5.提示用户接下来要删除的用户是什么
echo "你要删除的用户为${Qz}1...${Qz}${Num}"
#6.询问用户是否确认删除这些用户
read -p "你是否确认删除以上的这些用户:" Qr
#7.根据用户的输入进行执行相关的命令
case $Qr in 
    Y|Yes|y|yes)
            for i in  $(seq $Num)
            do
                User=${Qz}${i}
                id $User &>/dev/null
                if [ $? -eq 0 ];then
                    userdel -r $User &>/dev/null
                    if [ $? -eq 0 ];then
                        echo "用户$User 删除成功!"
                    else
                        echo "用户$User 删除失败!"
                    fi
                else
                    echo "用户$User 不存在!无需进行删除!"
                fi
            done
            ;;
    N|No|n|no)
            echo "你选择不删除这些用户!你可以手动删除!"
            exit
            ;;
    *)
            echo "请按照要求进行输入!"
            exit
esac

[root@shell /scripts/shell08]# sh for-6.sh
请输入你要删除用户的前缀:aaa
请输入你要删除用户的数量:5
你要删除的用户为aaa1...aaa5
你是否确认删除以上的这些用户:y
用户aaa1 删除成功!
用户aaa2 删除成功!
用户aaa3 删除成功!
用户aaa4 删除成功!
用户aaa5 删除成功!
[root@shell /scripts/shell08]# sh for-6.sh
请输入你要删除用户的前缀:aaa
请输入你要删除用户的数量:5
你要删除的用户为aaa1...aaa5
你是否确认删除以上的这些用户:y
用户aaa1 不存在!无需进行删除!
用户aaa2 不存在!无需进行删除!
用户aaa3 不存在!无需进行删除!
用户aaa4 不存在!无需进行删除!
用户aaa5 不存在!无需进行删除!

6. 批量的探测主机是否在存活状态及22端口是否开放

    1. 使用到循环,进行批量探测1..254的主机位

    2. 将能连通的主机追加到一个文件中

    3. 根据这个文件中可连通的IP地址,再次进行测试22的远程端口是否开放

    4. 将22端口开放的主机也追加到一个文件中,以备查看



[root@shell /scripts/shell08]# cat for-7.sh
#!/bin/bash
#1.调用函数库
[ -f /etc/init.d/functions ] && source /etc/init.d/functions || echo "函数库文件不存在!"
#2.清空之前所探测的结果存放的文件
Ip_log=/tmp/ip.log
Port_log=/tmp/port.log
>$Ip_log
>$Port_log
#3.进入循环探测
for i in {1..254}
do
    {
    Ip=10.0.0.$i
    #测试IP地址的连通性
    ping -c1 -W1 $Ip &>/dev/null
    if [ $? -eq 0 ];then
        action  "$Ip is OK!" /bin/true
        echo "$Ip is OK!" >>$Ip_log
    fi
} &
sleep 0.03
done
wait
echo "IP地址扫描完毕......................"
echo "端口扫描开始........................"

for i in  $(awk '{print $1}' $Ip_log)
do
    State=$(nmap -p22 $i |grep -w 22 | awk '{print $2}')
    if [ $State == "open" ];then
        action "$i 的22端口是开放的................."  /bin/true
        echo "$i Port 22 is Open!" >>$Port_log
    else
        action "$i 的22端口是没有开放的..............." /bin/false
    fi
done
[root@shell /scripts/shell08]# sh for-7.sh
10.0.0.51 is OK!                                          [  OK  ]
10.0.0.52 is OK!                                          [  OK  ]
10.0.0.170 is OK!                                         [  OK  ]
10.0.0.254 is OK!                                         [  OK  ]
IP地址扫描完毕......................
端口扫描开始........................
10.0.0.51 的22端口是没有开放的...............              [FAILED]
10.0.0.52 的22端口是开放的.................                [  OK  ]
10.0.0.170 的22端口是开放的.................               [  OK  ]
10.0.0.254 的22端口是没有开放的...............             [FAILED]

3. 数据库分库分表备份

#备份库
[root@shell /scripts/shell09]# mysqldump -uroot -p123 -B world >world.sql
#备份表
[root@shell /scripts/shell09]# mysqldump -uroot -p123  world city  >world_city.sql
#备份到哪里
/backup/数据库名/        #备份目录
#备份之后表名称

库名_时间.sql

库名_表名_时间.sql

#命令行中进行取库名
[root@shell /scripts/shell09]# mysql -uroot -p123 -e "show databases;" |sed 1d | grep -v ".*_schema"
mysql
test
wordpress
world

#取表名
[root@shell /scripts/shell09]# mysql -uroot -p123 -e "use wordpress;show tables;" |sed 1d
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_term_relationships
wp_term_taxonomy
wp_termmeta
wp_terms
wp_usermeta
wp_users

1. 定义变量   用户名 密码  时间  数据库名  表名

2. 判断备份的目录是否存在

3. 备份数据库 

4. 判断是否备份成功

5. 备份表

6. 判断是否备份成功

[root@shell /scripts/shell09]# cat for-2.sh 
#!/bin/bash
#1.定义变量
Db_User=root
Db_Pass=123
Date=$(date +%F)
Db_name=$(mysql -u$Db_User  -p$Db_Pass -e "show databases;" |sed 1d | grep -v ".*_schema")
for Database_Name in $Db_name
do
    #2.判断单独的数据库备份目录是否存在
    Back_Dir=/backup/$Database_Name
    [ -d $Back_Dir ] || mkdir -p $Back_Dir
    #3.备份数据库
    mysqldump -u$Db_User  -p$Db_Pass --single-transaction -B $Database_Name >$Back_Dir/${Database_Name}_${Date}.sql
    if [ $? -eq 0 ];then
        echo -e "\033[42;37m${Database_Name}数据库备份成功!\033[0m"
    else
        echo -e "\033[41;37m${Database_Name}数据库备份失败!\033[0m"
    fi
    #开始备份表
    Tb_name=$(mysql -u$Db_User  -p$Db_Pass -e "use $Database_Name;show tables;" |sed 1d)
    for Table_Name in $Tb_name
    do
        mysqldump -u$Db_User  -p$Db_Pass --single-transaction $Database_Name $Table_Name >$Back_Dir/${Database_Name}_${Table_Name}_${Date}.sql
        if [ $? -eq 0 ];then
            echo -e "\033[42;37m${Database_Name}数据库下的${Table_Name}表备份成功!\033[0m"
        else
            echo -e "\033[41;37m${Database_Name}数据库下的${Table_Name}表备份失败!\033[0m"
        fi
    done
done

[root@shell /scripts/shell09]# sh for-2.sh 
mysql数据库备份成功!
mysql数据库下的columns_priv表备份成功!
mysql数据库下的db表备份成功!
mysql数据库下的event表备份成功!
mysql数据库下的func表备份成功!
mysql数据库下的general_log表备份成功!
mysql数据库下的help_category表备份成功!
mysql数据库下的help_keyword表备份成功!
mysql数据库下的help_relation表备份成功!
mysql数据库下的help_topic表备份成功!
mysql数据库下的host表备份成功!
mysql数据库下的ndb_binlog_index表备份成功!
mysql数据库下的plugin表备份成功!
mysql数据库下的proc表备份成功!
mysql数据库下的procs_priv表备份成功!
mysql数据库下的proxies_priv表备份成功!
mysql数据库下的servers表备份成功!
mysql数据库下的slow_log表备份成功!
mysql数据库下的tables_priv表备份成功!
mysql数据库下的time_zone表备份成功!
mysql数据库下的time_zone_leap_second表备份成功!
mysql数据库下的time_zone_name表备份成功!
mysql数据库下的time_zone_transition表备份成功!
mysql数据库下的time_zone_transition_type表备份成功!
mysql数据库下的user表备份成功!
test数据库备份成功!
wordpress数据库备份成功!
wordpress数据库下的wp_commentmeta表备份成功!
wordpress数据库下的wp_comments表备份成功!
wordpress数据库下的wp_links表备份成功!
wordpress数据库下的wp_options表备份成功!
wordpress数据库下的wp_postmeta表备份成功!
wordpress数据库下的wp_posts表备份成功!
wordpress数据库下的wp_term_relationships表备份成功!
wordpress数据库下的wp_term_taxonomy表备份成功!
wordpress数据库下的wp_termmeta表备份成功!
wordpress数据库下的wp_terms表备份成功!
wordpress数据库下的wp_usermeta表备份成功!
wordpress数据库下的wp_users表备份成功!
world数据库备份成功!
world数据库下的city表备份成功!
world数据库下的country表备份成功!
world数据库下的countrylanguage表备份成功!
[root@shell /scripts/shell09]# ll /backup/
total 8
drwxr-xr-x 2 root root 4096 2020-03-02 09:39 mysql
drwxr-xr-x 2 root root   33 2020-03-02 09:39 test
drwxr-xr-x 2 root root 4096 2020-03-02 09:39 wordpress
drwxr-xr-x 2 root root  147 2020-03-02 09:39 world
[root@shell /scripts/shell09]# ll /backup/wordpress/
total 940
-rw-r--r-- 1 root root 462530 2020-03-02 09:39 wordpress_2020-03-02.sql
-rw-r--r-- 1 root root   2081 2020-03-02 09:39 wordpress_wp_commentmeta_2020-03-02.sql
-rw-r--r-- 1 root root   3301 2020-03-02 09:39 wordpress_wp_comments_2020-03-02.sql
-rw-r--r-- 1 root root   2483 2020-03-02 09:39 wordpress_wp_links_2020-03-02.sql
-rw-r--r-- 1 root root  19399 2020-03-02 09:39 wordpress_wp_options_2020-03-02.sql
-rw-r--r-- 1 root root  38251 2020-03-02 09:39 wordpress_wp_postmeta_2020-03-02.sql
-rw-r--r-- 1 root root 394390 2020-03-02 09:39 wordpress_wp_posts_2020-03-02.sql
-rw-r--r-- 1 root root   2051 2020-03-02 09:39 wordpress_wp_termmeta_2020-03-02.sql
-rw-r--r-- 1 root root   2208 2020-03-02 09:39 wordpress_wp_term_relationships_2020-03-02.sql
-rw-r--r-- 1 root root   2200 2020-03-02 09:39 wordpress_wp_terms_2020-03-02.sql
-rw-r--r-- 1 root root   2366 2020-03-02 09:39 wordpress_wp_term_taxonomy_2020-03-02.sql
-rw-r--r-- 1 root root   4743 2020-03-02 09:39 wordpress_wp_usermeta_2020-03-02.sql
-rw-r--r-- 1 root root   2831 2020-03-02 09:39 wordpress_wp_users_2020-03-02.sql

4. 随机点名脚本

1. 要有名单

2. 随机的打印这些名单

3. 打印出最后一个人员出现的名单

4. 找一个随机数,随机数是整数,且不能小于1和大于人员总数

[root@shell /scripts/shell09]# echo $((25 % 26 + 1))
26

[root@shell /scripts/shell09]# cat random.sh
#!/bin/bash
#1.定义变量,人员总数
Number=$(wc -l student.txt |awk '{print $1}')
#2.进行循环,循环多少次,自定义循环多少次
read -p "请输入你要对及脚本进行循环多少次:" Num
#3.进行循环
for i in $(seq $Num)
do
    #4.随机取得一个数字,但是此数字不能大于文件的总行数。
    Stu_Num=$((RANDOM % $Number + 1))
    #5.循环一次,就打印一次人员的名单
    sed -n "${Stu_Num}p"  student.txt
    #6.等待0.5秒之后,继续打印
    sleep 0.5
done
#7.打印出最后一次循环的人员名单
Stu_Name=$(sed -n "${Stu_Num}p"  student.txt)
echo -e   "天选子:\033[32m$Stu_Name\033[0m"

5. 判断数据库的主从复制的脚本

1. 主从复制的环境

2. 进行判断主从

3. 主从正常,输出

4. 不正常发邮件报警

5. 简单处理一些故障

[root@db02 ~]# cat mysql_zhucong.sh
#!/bin/bash
#1.定义变量
IO_Status=$(mysql -uroot -p123 -e "show slave status\G" | grep "Slave_IO_Running" | awk '{print $2}')
SQL_Status=$(mysql -uroot -p123 -e "show slave status\G" | grep "Slave_SQL_Running" | awk '{print $2}')
#2.判断主从异常情况
if [[ $IO_Status == "Yes" && $SQL_Status == "Yes" ]];then
    echo "数据库主从复制正常!"
else
    #3.判断IO线程
    if [ ! $IO_Status == "Yes" ];then
        mysql -uroot -p123 -e "show slave status\G" | grep "Last_IO" >/tmp/mysql_io_err.log
        mail -s "数据库主从复制IO线程出错!$(date +%F-%H:%M) " 1176494252@qq.com < /tmp/mysql_io_err.log
        if [ $? -eq 0 ];then
            echo "数据库主从复制IO线程报错邮件发送成功!"
        else
            echo "数据库主从复制IO线程报错邮件发送失败!"
        fi 
    fi
    #4.判断SQL线程出错细致化
        if [ ! $SQL_Status == "Yes" ];then
        SQL_Err_State=$(mysql -uroot -p123 -e "show slave status\G" | grep "Last_SQL_Errno"  | awk '{print $2}')
        case $SQL_Err_State in
            1007)
                echo "数据库主从复制SQL线程出现1007错误!脚本尝试跳过这次错误!"
                mysql -uroot -p123 -e "stop slave;set global sql_slave_skip_counter=1;start slave;"
                sleep 3
                SQL_Status=$(mysql -uroot -p123 -e "show slave status\G" | grep "Slave_SQL_Running" | awk '{print $2}')
                if [ $SQL_Status == "Yes" ];then
                    echo "尝试跳过了一次错误!数据库主从复制恢复正常!"
                else
                    mysql -uroot -p123 -e "show slave status\G" | grep "Last_SQL" >/tmp/mysql_sql_err.log
                    mail -s "数据库主从复制SQL线程出错!$(date +%F-%H:%M) " 1176494252@qq.com  < /tmp/mysql_sql_err.log
                    if [ $? -eq 0 ];then
                        echo "数据库主从复制SQL线程报错邮件发送成功!"
                    else
                        echo "数据库主从复制SQL线程报错邮件发送失败!"
                    fi
                fi
                ;;
            1032)
                mysql -uroot -p123 -e "show slave status\G" | grep "Last_SQL" >/tmp/mysql_sql_err.log
                mail -s "数据库主从复制SQL线程出错!$(date +%F-%H:%M) " 1176494252@qq.com  < /tmp/mysql_sql_err.log
                if [ $? -eq 0 ];then
                    echo "数据库主从复制SQL线程报错邮件发送成功!"
                else
                    echo "数据库主从复制SQL线程报错邮件发送失败!"
                fi
                ;;
            *)
                mysql -uroot -p123 -e "show slave status\G" | grep "Last_SQL" >/tmp/mysql_sql_err.log
                                mail -s "数据库主从复制SQL线程出错!$(date +%F-%H:%M) " 1176494252@qq.com  < /tmp/mysql_sql_err.log
                                if [ $? -eq 0 ];then
                                        echo "数据库主从复制SQL线程报错邮件发送成功!"
                                else
                                        echo "数据库主从复制SQL线程报错邮件发送失败!"
                                fi
                                exit
        esac
    fi    
fi
Copyright © 高程程 all right reserved,powered by Gitbook修订于: 2021-06-30 09:16:06

results matching ""

    No results matching ""