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;
执行如下: