Linux系统中shell脚本的常用控制语句

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

调用:

[root@localhost mnt]# sh autossh.sh  
[root@localhost mnt]# cat /mnt/host  ##查看可以登陆的主机ip列表文件

猜你喜欢

转载自blog.csdn.net/l675655077/article/details/80779347