1.for 循环
for | 定义变量 |
---|---|
do | 使用变量,执行动作 |
done | 结束标志 |
【1】格式1:
#!/bin/bash
for WESTOS in `seq 2 2 10` 步长为2
do
echo $WESTOS
done
【2】格式2:
在循环运行过程中,是不能把值传递出去的
for WESTOS in 1 2 3
do
echo $WESTOS
done
当在done后加上echo $WESTOS时,使用sh -x进行查看
【3】格式3:
for WESTOS in {10..1} 倒叙,不可直接`seq 10 1`
do
echo $WESTOS
done
【4】格式4:
for ((WESTOS=0;WESTOS<10;WESTOS++)) ++表示递增+1;--表示递减
do
echo $WESTOS
done
两个(())的作用
脚本练习:
check_host.sh
用此脚本检测10台与您当前主机直连主机是否网络通常
如果网络通常请显示主机的ip列表
2.while
while ture | 条件为真 |
---|---|
do | 条件成立所作循环动作 |
done | 结束标志 |
【1】条件成立进行循环
- 脚本
- 结果
3.until
until false | 条件为假 |
---|---|
do | 条件不成立所作循环动作 |
done | 结束标志 |
用法参考上述while true,在此就不赘述了。
4.if
1)用法
if语句判断条件,一个语句完成后,其他的才不再查看
if
then
elif
then
...
else
fi
2)脚本练习:
- 创建check_file.sh
- 要求提示
please input filename: file
- 当文件不存在时,显示:
file is not exist
-当是个文件时,显示file is file
- 当是目录时,显示:
file is direcory
- 此脚本会一直询问直到用户输入exit为止
5.case
1)用法
case $1 in
word1|WORD1)
action1
;;
word2|WORD2)
action2
;;
*)
action3
esac
2)练习:
- -x可看出case只执行一次
脚本:
结果:
- 与if语句实现进行对比
脚本:
结果:
脚本练习3:
system_watch.sh disk memory upload (每秒显示)
- disk 监控磁盘使用情况 (df查看)
- memory 监控内存使用情况 (free)
- upload 监控启动负载 (uptime)
sh system_watch.sh disk
sh system_watch.sh memory
sh system_watch.sh uptime
expect用法
expect | 自动应答命令(用于交互式命令的自动执行) |
---|---|
set timeout 1 | 执行等待1秒,一秒后继续向下执行 |
set NAME [ lindex $argv 0 ] | 定义变量 |
sapwn | 监控程序 |
send | 发送问题答案给交互命令 |
\r | 回车 |
exp_continue | 继续回答下面的 |
expect eof | 表示回答完那些问题后,退出expect环境 |
interact | 问题回答完后留在交互界面 |
1)问题脚本
#!/bin/bash
read -p "what's your name:" NAME
read -p "How old are you: " AGE
read -p "Which objective: " OBJ
read -p "Are you ok? " OK
echo $NAME is $AGE\'s old study $OBJ feel $OK
直接执行,需要手动输入问题的答案
2)应答脚本
-
先
yum install expect -y
进行安装 -
vim answer.exp 此时就不是以.sh结尾了
-
使用expect调用,记住必须
chmod +x ask.sh
给可执行权限
使用expect,即使ask.sh里面包含的内容不全(注释掉年龄),也不会影响正常运行
脚本练习
auto_ssh 192.168.0.1 westos
可以自动连接目标主机当目标主机网络不通时报错
7.break,continue,exit
1)含义
命令 | 作用 |
---|---|
contiue | 终止当此次前循环提前进入下个循环 |
break | 终止当前所在语句所有动作进行语句外的其他动作 |
exit | 脚本退出 |
练习:
【1】continue此次循环退出,提前进入下次循环
当没有continue时 5 也会显示出来;当使用cotinue时,仅退出了显示5,剩下的都继续执行了。
【2】break 所在循环退出
退出了for循环,但是还会执行for循环之外的命令
【3】exit
当条件成立时,脚本自动退出。剩下的命令也就不执行了。我们可以看到没有执行echo end scripts