Linux系统中shell脚本的常用控制语句
程序员文章站
2022-06-24 19:40:35
...
1.几个常用的语句
- for 语句
- while 语句
- if 语句
- case 语句
- expect 语句
2.几个退出命令的比较
exit直接退出当前脚本
break仅仅退出本次循环
continue 退出本次循环进行下一次循环
测试:
vim test.sh
调用:
3.for语句
- 基本结构
for
do
done
- 说明
`seq 1 5`可以设置步长,可以有变量{1..5}不可以设置步长
for语句参数可以传到循环以外,是嵌套关系,总共执行m*n次
for语句的变量仅仅最后变量被使用,循环定义变量依次执行,进行批处理
测试:
vim test.sh
调用:
vim test.sh
调用:
vim test.sh ##for语句的嵌套
调用:
编写脚本:利用for语句查看能同网段可ping通的主机ip
vim check_ip.sh
调用:
编写脚本:实现数据库的备份,且每个库生成一个备份文件
#!/bin/bash
TABASE_MESSAGE=`mysql -uroot -predhat -EN -e "show databases;" | grep -E "^\*|schema$" -v`
mkdir -p /mnt/mysql_dump
for DATABASE_NAME in $DATABASE_MESSAGE
do
mysqldump -uroot $DATABASE_NAME > /mnt/mysql_dump/${DATABASE_NAME}.sql
[ "$?" -eq "0" ]&&{
echo -e "\033[32m$DATABASE_NAME is backuped !!\033[0m"
}
done
4.while语句
编写脚本:实现对cpu负载的动态监控
vim scan.sh
调用:
编写脚本:根分区容量超过10%时给root用户发邮件报警
vim hello.sh
调用:
5.if语句
- 基本结构
if
then
elif
then
else
fi
编写脚本:用if判断文件是否存在并判断文件类型
vim check_file.sh
调用:
编写脚本:用if语句和函数判断文件是否存在并判断文件类型
vim check_file.sh
调用:
编写脚本:
a) 运行 test.sh dog 输出结果为 cat
b) 运行 test.sh cat 输出结果为 dog 除此以外都输出结果为 error
vim test.sh
调用:
编写脚本:通过文件建立用户,要求如下
a) 文件数量不对报错
b) 文件不存在报错
c) 文件行数差异报错
d) 用户存在显示用户存在,但是不改变用户密码
e) 当用户不存在建立用户并设定相应密码
vim create_user.sh
调用:
6.case语句
优点:可以进行多个同步的检测,避免cpu资源浪费
vim test.sh
调用:
编写脚本:利用case语句实现用户的删除和建立
vim user_ctl.sh
编写脚本:自动建立分区、删除分区
fdisk /dev/vdb ##查看已有分区
vim dev.sh
- 新建分区
调用:
- 删除分区
vim dev.sh
调用:
7.expect语句
expect是自动应答命令用于交互式命令的自动执行。spawn是expect中的监控程序,其运行后会监控命令提出的交互问题。send:发送问题答案给交互命令。"\r"表示回车。
exp_continue ##标示当问题不存在时继续回答下面的问题
expect eof ##标示问题回答完毕退出 expect 环境
interact ##标示问题回答完毕留在交互界面
set NAME [ lindex $argv n ] ##定义变量
read交互式脚本和expect自动应答脚本的对比:
read脚本:
vim test.sh
调用:
expect脚本:
yum install expect -y ##安装该服务后才能创建expect自动应答脚本
vim answer.exp ##设置时间间隔为2秒
调用:
常见的问题及解决方法:
- 当exp自动应答文件中的回答在脚本中找不到对应的问题时,会报错,例如注释掉脚本中的一行
调用:
- 解决方法:使用exp_continue命令
vim answer.exp
调用:
- 自主调用问题答案
vim answer.sh
调用:
应用:
编写脚本:登陆指定主机
vim ssh.exp
调用:
编写脚本:直接登陆指定主机
vim autossh.sh
调用:
编写脚本:查看可以登陆的主机IP
vim test.sh
调用:
[aaa@qq.com mnt]# sh autossh.sh
[aaa@qq.com mnt]# cat /mnt/host ##查看可以登陆的主机ip列表文件