1.for 循环
for 定义变量
do 使用变量,执行动作
done 结束标志
- 格式1:
for WESTOS in `seq 2 2 10` 第二个2是跨度
- 格式2:
最后一行表示 for 语句不可以将参数传到外界。 - 格式3:
4. 格式4:
5. 合格式:
#!/bin/bash
#pod_list=()
for i in "appbe_a" "appbe_b" "appbe_c" #注意这里后面不需要冒号
do
echo "it is ${i}"
done
2.while 循环
如果条件成立,就做什么动作
while不同于 && 的地方在于while是循环的。
用法:
while ture 条件为真
do 条件成立所作循环动作
done
sh while.sh 0
3.until
和 while 相反,当条件不成立时,执行什么动作。
用法:
until false 条件为假
do
条件不成立所作循环动作
done
4.if
多条件判断,用法:
if
then
elif
then
... ...表示可以有很多个 elif
else
fi
5.case
用法:
case $1 in
word1|WORD1) 匹配这些字符
action1
;; 分隔符
word2|WORD2) 匹配这些字符
action2
;;
*) 匹配剩下所有的
action3
esac
效果:
6.expect
问题脚本
#!/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 \转译单引号特殊字符
应答脚本
vim /mnt/answer.exp
#!/usr/bin/expect
set timeout 1 设置最长等待时间为1s
set NAME [ lindex $argv 0 ] 后面跟的第一串字符为NAME值
set AGE [ lindex $argv 1 ] 后面跟的第二串字符为AGE值
set OBJ [ lindex $argv 2 ] 后面跟的第三串字符为OBJ值
set FEEL [ lindex $argv 3 ] 后面跟的第四串字符为FEEL值
spawn /mnt/ask.sh 监控/mnt/ask.sh脚本,找出其中的问题
expect { 包含
"name" { send "$NAME\r";exp_continue } 包含 name 字符时发送$NAME的值
"old" { send "$AGE\r";exp_continue }
"objective" { send "$OBJ\r";exp_continue }
"ok" { send "$FEEL\r" }
}
expect eof 结尾
效果:
7.break,continue,exit
contiue ##终止当此次前循环提前进入下个循环
break ##终止循环,终止当前所在语句所有动作,进行其他语句动作
exit ##脚本退出
脚本:
hello 和 5 都打印出来了,当我们在脚本中加入continue时:
显示 5 的这条命令 ( echo $WESTOS ) 直接就中断了,开始了下一轮的循环。
当为 break 时:
循环就终止了,值显示到5,但执行了循环外的 echo 动作。
当为exit时
直接退出脚本,循环外的命令也不执行了。