Shell 脚本实例

Shell 脚本实例

1. 数据库备份

  • 执行db.dump.sh westos(数据库密码)脚本执行后会备份数据库中的所有库到/mnt/mysqldump目录中备份文件名称为“库名称 .sql”当此文件存在时报错并询问动作输入“S”跳过备份,当输入“B”时备份“库名称.sq””文件为“库名称backup.sql” ,当输入“O”时,覆盖源文件

脚本内容如下:

 #!/bin/bash
 Action()    # 定义函数,进行操作指南
 {
         read -p "Please input action like:[S]kip [B]ackup [O]verwrite "  action
         action=`echo $action | tr 'A-Z' 'a-z'`
 }
 Action $1
 Database=`mysql -uroot -p$1 -EN -e "show databases;"|grep -E  "^\*|schema$" -v `
 mkdir -p /mnt/sqldump/
 [ -e  "$database_name".sql ]&& Case $1  

 Case()     # 定义函数,匹配操作
 {
 case $action in
         s) # s 时不做任何操作
         ;;
         b) # b 时,将文件备份为数据库名称bachup.sql
         for database_name in $Database
         do
         mysqldump -uroot -p$1 $database_name > /mnt/sqldump   /${database_name}backup.sql
         done
         echo backup
         ;;
         o) # o 时覆盖原备份
         for database_name in $Database
         do
                 mysqldump -uroot -p$1 $database_name > /mnt/sqldump   /${database_name}.sql 
                 [ "$?" -eq "0" ]&&{
                         echo -e "$database_name is backup."
                 }
         done
         echo overwrite
         ;;
         exit)
         exit 0
         ;;
         *) # 如果错误,提示正确输入
         echo "Error:Please inout [S] [B] [O] or exit!!"
         Action $1
         Case $1
 esac
 }
 Case $1

执行如下:
这里写图片描述

2. 自动登陆脚本

  • 执行 auto_ ssh.sh 172.25.254. 100 westos
    172.25.151.250为ip
    westos为密码
    执行脚本后自动登陆172.25.151.250并保持登陆
 #!/usr/bin/expect 
 set timeout -1          # 设置时间,不退出
 set "IP" [ lindex $argv 0 ]   # 第一个参数为 IP
 set "PASS" [ lindex $argv 1 ]  # 第二个参数为 PASS
 spawn ssh root@$IP      # 执行 ssh 命令
 expect {
         "yes/no" { send "yes\r";exp_continue }
         "password" { send "$PASS\r" }
 }
 interact                 # 登录后可执行操作

执行如下:
脚本内容:
这里写图片描述
执行结果:
这里写图片描述

3. 批处理脚本

  • 检测教室中开启的所有主机,并抓取所有主机的值机名称和 ip 的对应列表,把列表保存在 /mnt/ip. host.list 文件中
 #!/bin/bash
 Auto_Check()  # 定义函数,进行自动连接主机
 {
 /usr/bin/expect << EOF   # 运用 expect 进行交互操作
 set timeout 10 
 spawn ssh root@172.25.151.$IP hostname
 expect {
         "yes/no" { send "yes\r";exp_continue }
         "password" { send "westos\r" }
 }
 expect eof
 EOF
 }
 for IP in {240..250}    # 定义访问主机号,并将信息保存
 do
         ping -c1 -w1 172.25.151.$IP &> /dev/null && {
                 Host_Name=`Auto_Check | grep -E  "authenticity|fingerprint|connecting|password|Waring|spawn" -v`
 }
         echo 172.25.151.$IP $Host_Name  >> /mnt/ip.host.list
 done

脚本内容:
这里写图片描述
执行如下:
这里写图片描述

4. 服务自动部署示例

  • 执行脚本lamp.sh,脚本执行后部署好论坛,并设定apache的网络接口为8080
 #!/bin/bash
 yum install httpd -y &>/dev/null && echo -e "\033[31mhttpd is installed\033[0m" ;
 # 安装 httpd 服务
 yum install mariadb-server -y &>/dev/null && echo -e "\033[31mmariadb is installed\033[0m";
 # 安装 mariadb 服务
 yum install php-mysql -y &>/dev/null && echo -e "\033[31mphp-mysql is installed\033[0m";
 systemctl start httpd &>/dev/null && echo -e "\033[31mhttpd is starting\033[0m";
 # 启动 httpd 服务
 sed "/^Listen/cListen 8080" -i /etc/httpd/conf/httpd.conf &>/dev/null && echo -e "\033[31mhttpd Listen is changed to 8080\033[0m";
 # 修改 httpd 服务端口
 systemctl start mariadb &>/dev/null && echo -e "\033[31mmariadb is starting\033[0m";
 # 启动 mariadb 服务
 firewall-cmd --permanent --add-service=http &>/dev/null;
 firewall-cmd --reload &>/dev/null && echo -e "\033[31mhttpd is permanent to through firewalld\033[0m";
 # 让防火墙允许 httpd 服务
 #进行论坛搭建
 cp /root/Desktop/Discuz_X3.2_SC_UTF8.zip /var/www/html/;
 cd /var/www/html/;
 /usr/bin/expect <<EOF
 set timeout 10
 spawn unzip Discuz_X3.2_SC_UTF8.zip
 expect {
         "changelog.txt" { send "A\r" }
 }
 EOF
 chmod 777 /var/www/html -R;
 firefox $1/upload;

执行如下:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/buster_zr/article/details/80843550