shell中常用的控制语句及脚本的运行控制
一、for语句
for in
do
done
1)控制语句
exit
脚本直接退出
break
退出当前循环;即退出for后面的还要执行
continue
提前结束循环内部的命令,但不终止循环
【{} 和 `` 的区别】
***`seq 1 2 5`*** **可以设计步长(2为步长),也可以引用变量**
***{1..5}*** **必须是可变长字符**
<一、测试:显示所有开机的主机>
这里的主机必须得在同一网段中,即可测试。
<二、数据库的库都以文件显示并保存在/mnt/mysql_backup>
[root@localhost mnt]# yum install mariadb-server -y
准备工作,建立好westos库和linux表
查看
开始写脚本测试
二、while语句
格式
while
do
done
显示当前时间在一行
[root@localhost mnt]# vim whlie.sh
[root@localhost mnt]# cat whlie.sh
#!/bin/bash
while true
do
echo -n `uptime`
echo -ne "\r\r"
sleep 1
done
传输email
[root@localhost mnt]# mail
No mail for root
[root@localhost mnt]# echo hello world | mail -s warning root
<三、当/下的容量达到80%,发警报email给root>
[root@localhost mnt]# vim mail_file.sh
[root@localhost mnt]# df -H
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 11G 3.5G 7.4G 32% /
devtmpfs 481M 0 481M 0% /dev
tmpfs 497M 87k 497M 1% /dev/shm
tmpfs 497M 14M 484M 3% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 496M 2.5M 463M 1% /home
[root@localhost mnt]# dd if=/dev/zero of=/bigfile bs=1M count=5000
##截取命令保证负载超过80%来进行实验查看
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB) copied, 59.6522 s, 87.9 MB/s
[root@localhost mnt]# df -H ##查看负载已经超过80%
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 11G 8.7G 2.1G 81% /
devtmpfs 481M 0 481M 0% /dev
tmpfs 497M 87k 497M 1% /dev/shm
tmpfs 497M 14M 484M 3% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 496M 2.5M 463M 1% /home
[root@localhost mnt]# sh mail_file.sh
Your / will full !!
Your / will full !!
^C
查看邮件每隔3秒就会以root用户身份发送一份邮件
三、if语句
格式
if
then
elif
then
….
else
fi
<四、测试:编写一个判断文件类型的脚本>
也可以用之前的函数,简化脚本,如下图
四、case语句
格式
case
word1)
action1
;;
word2)
action2
;;
….
action_last
esac
<五、输入 cat 显示 dog ;输入 dog 显示 cat >
先用if语句来做
下面用case语句来实现
if语句与case语句的区别:
if语句中的条件判断是从上到下顺序依次判断 case语句中的条件判断是同步的;
字符匹配常用case语句,因为if语句对于越置后的条件判断越慢,这样效率很低.
五、expect语句
expect
***是自动应答命令用于交互式命令的自动执行;*
安装 yum install expect ,编写问题,脚本编写,自动回答脚本,幻术不一样;
spawn
***是expect中的监控程序,其运行后会监控命令提出的交互问题;*
send
发送问题答案给交互命令
exp_continue
表示当问题不存在时继续回答下面的问题
expect eof
表示问题回答完毕退出expect环境
interact
表示问题回答完毕留在交互界面
set NAME [ lindex $argv n ]
定义变量
1)先编写一个问题脚本,提出四个问题;
2)编写expect 自动交互回答脚本;
3)执行expect查看;
4)现在注释掉一个问题,再次执行查看;
<六、测试:自动ssh连接脚本>