一、for语句
for NUM in 1 2 3
for NUM in {1..3}
for NUM in `seq 1 3`
for NUM in `seq 1 2 10`
do
done
示例:使用for语句打印数字1-10
方法一:
方法二:
方法三:
seq的功能比较强大,它的后面不仅可以接常量,也可以接变量,同时它也可以设置步长。
设置步长
练习:使用for语句编写脚本,判断主机172.25.254.1-172.25.254.10中,有哪些主机是可以ping通的。
二、while循环
while 条件 | until 条件 ##条件为真,则执行循环语句|直到条件为假,否则一直执行
do
循环语句
done
示例:while true
示例:until false
练习:每3秒执行一次uptime(查看负载使用情况),并显示到屏幕上
三、if语句
if 条件一 ##如果条件一满足,则执行语句一,不满足,则执行下一个判断
then 语句一
elif 条件二
then 语句二
...
else
语句n
fi
示例:
练习:编写一个脚本,用来自动创建用户,用户名及用户密码从userfile和passwdfile中取,同时运行脚本时,可自动判断文件是否存在,及用户是否输入文件名
运行结果如下
四、case语句
case 变量 in ##变量值若为word1,则执行action1.否则,继续判断
word1)
action1
;;
word2)
action2
;;
*)
action3
esac
示例:
五、expect
expect ##自动应答命令用于交互式命令的自动执行
spawn ##expect中的监控程序,其运行后会监控命令提出的交互问题
send ##发送问题答案给交互命令
"\r" ##表示回车
exp_continue ##表示当问题不存在时继续回答下面的问题
expect eof ##表示问题回答完毕退出expect环境
interact ##表示问题回答完毕留在交互界面
set NAME[ lindex $argv n ] ##定义变量
创建一个问答脚本,使用【sh】命令,执行该脚本,根据问题,我们可以进行回答。那么我们该如何自动的进行脚本的应答?
方法一:使用定向输入法,将所有问题的答案写在一个脚本中,通过执行该脚本,可以自动的回答问题。这种方法的回答比较固定且如果问题更改或不存在,则会导致回答的错乱
方法二:使用expect自动应答语句,如下是expect的基本用法,它也存在许多弊端,问题不存在则会导致回答的错乱或者是命令一直卡在某一位置,无法继续进行。
yum install expect -y ##安装软件
方法三:expect自动应答,用户可以跳过某些问题,比较方便
练习1:编写一个自动应答文件,命令行输入ip和passwd,可以自动登录该主机
练习2:显示10主机中为打开状态的主机名
六、脚本中的语句控制器
exit n ##脚本退出,退出值为n
break ##退出当前循环(循环外的命令继续执行)
continue ##提前结束循环内部的命令,但不终止循环
1.exit n
2.break
3.continue