exit、break、continue的区别:
exit:完全退出当前执行脚本循环语句(整体)
break:提前中断当前,不会影响循环以外的执行
continue:提前进入下一次循环,也不会影响循环以外的执行
[root@desktop mnt]# vim file.sh
[root@desktop mnt]# sh file.sh
[root@desktop mnt]# sh file.sh exit
[root@desktop mnt]# sh file.sh break
[root@desktop mnt]# sh file.sh continue
编辑脚本内容
一·常用语句
1、for语句(循环定义变量,并依次执行)
for做的是批处理
for
do
done
seq与{ }区别:
seq:可设定步长
{ }:里面内容只能是数字,否则不执行
[root@desktop mnt]# vim file.sh
[root@desktop mnt]# sh file.sh
脚本内容
[root@desktop mnt]# vim file.sh
[root@desktop mnt]# sh file.sh
脚本内容
[root@desktop mnt]# vim file.sh
[root@desktop mnt]# sh file.sh
脚本内容
实验一:备份数据库,并且保存到/mnt/mysql_backup
[root@localhost mnt]# yum install mariadb-server -y ##安装数据库
[root@localhost mnt]# systemctl start mariadb ##打开服务器
[root@localhost mnt]# mysql -uroot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.35-MariaDB MariaDB Server
Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database linux;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use linux;
Database changed
MariaDB [linux]> create table linux_user(
-> username varchar(50) not null,
->
-> password varchar(50) not null);
Query OK, 0 rows affected (0.17 sec)
MariaDB [linux]> insert into linux_user values("user1","123");
Query OK, 1 row affected (0.05 sec)
MariaDB [linux]> insert into linux_user values("user2","234");
Query OK, 1 row affected (0.02 sec)
MariaDB [linux]> select * from linux_user;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 123 |
| user2 | 234 |
+----------+----------+
2 rows in set (0.00 sec)
MariaDB [linux]> quit
Bye
[root@localhost mnt]# vim mysql_dump.sh ##编辑脚本
[root@localhost mnt]# sh mysql_dump.sh ##执行
编辑脚本内容
2、while语句
格式(当条件为真时执行do):
while true
do
done
实验二:实施监控/目录,/分区使用量超过80%需要报警
[root@localhost mnt]# df
/dev/vda1 10473900 3318476 7155424 32% /
[root@localhost mnt]# dd if=/dev/zero of=/bigfile bs=1M count=6000
[root@localhost mnt]# df
/dev/vda1 10473900 9462476 1011424 91% /
[root@localhost mnt]# vim checkload.sh
[root@localhost mnt]# sh checkload.sh &
[root@localhost mnt]# mail
[root@localhost mnt]# mail
编辑脚本内容
3、if语句
格式:
if
then
elif
then
else
[root@desktop ~]# cd /mnt/
[root@desktop mnt]# ll
[root@desktop mnt]# vim check_file.sh ##编写脚本
[root@desktop mnt]# sh check_file.sh ##调用(会提示)
Please input a file follow script !!
[root@desktop mnt]# sh check_file.sh /mnt/
/mnt/ is directory ##是目录
[root@desktop mnt]# sh check_file.sh /dev/vdb1
/dev/vdb1 is block ##是块设备
编辑脚本内容:
4、case语句(字符匹配,速度快)
与if在字符匹配不一样
case语句横向同时比较,效率优于if语句
格式:
case
word1)
action1
;;
word2)
action2
;;
….
action_last
esac
(1)输入 cat 显示 dog ;输入 dog 显示 cat
[root@desktop mnt]# vim dog_cat.sh ##编辑脚本
[root@desktop mnt]# sh dog_cat.sh
ERROR ##提示
[root@desktop mnt]# sh dog_cat.sh cat
dog ##调用成功
[root@desktop mnt]# sh dog_cat.sh dog
cat
编辑脚本内容:
实验:智能建立用户
要求:
1.文件数量不对报错。
2.文件不存在报错。
3.文件行数差异报错。
4.用户存在显示用户存在,但是不改变用户密码。
5.当用户不存在建立用户并设定相应密码。
[root@desktop mnt]# cat userfile ##添加用户
user1
[root@desktop mnt]# cat passfile ##添加密码
uaer1123
[root@desktop mnt]# vim user_create.sh ##编辑脚本
[root@desktop mnt]# sh user_create.sh userfile
1.ERROR:Please input userfile and passfile follow scripts!! ##提示
[root@desktop mnt]# sh user_create.sh userfile passF
3.ERROR:passF is not exist!! ##提示
[root@desktop mnt]# sh user_create.sh userfile passfile ##调用成功
user1 create
[root@desktop mnt]# id user1 ##查看用户
脚本内容:
5、expect语句
expect 是自动应答命令用于交互式命令的自动执行
spawn 是expect 中的监控程序,其运行后会监控命令提出的交互问题
send 发送问题答案给交互命令
"\r" 表示回车
exp_continue 表示当问题不存在时继续回答下面的问题
expect eof 表示问题回答完毕退出 expect 环境
interact 表示问题回答完毕留在交互界面
set NAME [ lindex $argv n ] 定义变量
[root@desktop mnt]# vim ask.sh ##编辑shell脚本
[root@desktop mnt]# sh ask.sh ##调用
What's your name: jiong
How old are you: 20
What study: linux
Are you happy: happy
jiong is 20 old study linux and feel happy !!
[root@desktop mnt]# yum install expect -y ##安装(编写问题,脚本编写,自动回答脚本,幻术不一样)
[root@desktop mnt]# chmod +x /mnt/ask.sh ##赋予权限
[root@desktop mnt]# chmod +x /mnt/ask.exp ##赋予权限
[root@desktop mnt]# vim ask.exp ##编辑expect脚本
[root@desktop mnt]# expect /mnt/ask.exp jiong 20 linux happy ##执行
shell脚本内容:
expect脚本内容:
如果在shell脚本中注释掉一个问题,再用expect执行:
当注释掉一个问题后,执行结果中会空出问题的答案
实验:自动ssh连接脚本
[root@desktop mnt]# vim ssh_auto.exp ##编辑脚本
[root@desktop mnt]# expect /mnt/ssh_auto.exp 172.25.254.71 westos ##执行
脚本内容: