for循环
for 定义变量
do 使用变量,执行动作
done 结束标志
格式1:
for LYUEYUE in `seq 1 2 10` (1-10,步长为2)或 seq 2 2 10(2-10,步长为2)
do
echo $LYUEYUE
done
格式2:
for LYUEYUE in 1 2 3
do
echo $LYUEYUE
done
格式3: 可以倒序
for LYUEYUE in {3··1}
do
echo $LYUEYUE
done
格式4:
shell中的运算要使用双括号来表示
for ((LYUEYUE=0;LYUEYUE<10;LYUEYUE++))
do
echo $LYUEYUE
done
补充:展示双括号的作用
for命令练习
check_host.sh
用此脚本检测10台与您当前主机直连主机是否网络通畅
while循环
while ture:条件为真
do :条件成立所作循环动作
done
until
until false:条件为假
do:条件不成立所作循环动作
done
if命令
if
then
elif
then
else
fi
if命令练习
check_file.sh
please input filename: file
file is not exist
file is file
file is direcory
此脚本会一直询问直到用户输入exit为止
自己:
改进:
case命令(点名语句)
case $1 in
word1|WORD1)
action1
;;
word2|WORD2)
action2
;;
*)
action3
esac
case命令练习
system_watch.sh disk memory upload (每秒显示)
disk 监控磁盘使用情况
memory 监控内存使用情况
upload 监控启动负载
改进:
expect命令
可以通过检测问题关键字进行应答,如果一条问题被注释掉了,except检测不到相应的关键字就会一直等待,我们可以设置等待时间来解决这个问题。
问题脚本:ask.sh
#!/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
应答脚本:answer.exp
#!/usr/bin/expect
set timeout 1
set NAME [ lindex $argv 0 ](表示expect脚本后跟的第一串字符,依此类推)
set AGE [ lindex $argv 1 ]
set OBJ [ lindex $argv 2 ]
set FEEL [ lindex $argv 3 ]
spawn ./ask.sh(监控)
expect {
“name” { send " $NAME\r”;exp_continue }
“old” { send " $AGE\r”;exp_continue }
“objective” { send " $OBJ\r”;exp_continue }
“ok” { send " $FEEL\r" }
}
expect eof
实验步骤:
(1)新建anser.sh脚本
(2)安装expect
(3)新建anser.exp文件
(4)测试
expect命令练习
auto_ssh 192.168.9.100 red
可以自动连接目标主机当目标主机网络不通时报错
自己:
改进:
continue break exit命令
contiue:终止当前此次循环提前进入下个循环
break:终止当前所在语句所有动作进行语句外的其他动作
exit:脚本退出
实验步骤:
1.continue
发现当lyueyue等于5时执行完echo “hello”后直接退出这次的循环,没有执行echo $lyueyue命令。
2.break
发现直接退出循环
3.exit
这次使用sh执行jump.sh脚本,否则会直接退出当前shell。