for语句
for NUM in 1 2 3 ##NUM是变量,1,2,3是变量的值
for NUM in {1..3} ##变量的值从1到3,{3..1}变量的值从大到小
for NUM in `seq 1 3` ##变量的值从1到3,不可以从大到小
for NUM in `seq 1 2 10` ##变量的值为1-10中的奇数(1,3,5,7,9)
do
echo $NUM ##for所要做的内容
done
for NUM in `seq 1 2 10` ##变量的值为1-10中的奇数(1,3,5,7,9)
do
echo $NUM ##for所要做的内容
done
执行结果
2.
for NUM in `seq 1 10` ##变量的值从1到3,不可以从大到小
do
echo $NUM ##for所要做的内容
done
执行结果
3.
for NUM in {10..1} ##变量的值从10到1,{10..1}变量的值从大到小
do
echo $NUM ##for所要做的内容
done
执行结果
for NUM in 1 2 3 ##NUM是变量,1,2,3是变量的值
do
echo $NUM ##for所要做的内容
done
执行结果
for语句示例
for NAME in westos tom linux
do
echo $NAME
done
执行结果
倒计时10秒
执行效果
将1到20台主机中能连通的主机的主机名采集到/mnt/host_ip中
while语句
while 条件
while 条件
do
done
while true
do
read -p "Please input word: " WORD
echo $WORD
done
until false
do
read -p "please input word: " WORD
echo $WORD
done
倒计时1分10秒
SEC=10
MIN=1
for ((SEC=10;SEC>=0;SEC--))
do
while [ "$MIN" = "0" ] && [ "$SEC" = "0" ] ##当倒计时结束,无错误退出
do
exit 0
done
while [ "$SEC" = "0" ] ##当秒数变为0时,分钟数自减,这个条件时为了实现1:00 到 0:59之间的转换
do
echo -n "After $MIN:$SEC end "
echo -ne "\r"
sleep 1
SEC=60 ##不满足这个条件判定
((MIN--)) ##分钟自减1,进入正常秒的部分倒计时
done
echo -n "After ${MIN}:${SEC} end " ##
echo -ne "\r"
sleep 1
done
if语句(多个条件同时判定)
if [ 条件 ]
then 执行内容
elif
then
......
else
fi
判断文件的类型(创建check.sh, 执行check.sh -a file; 进入文件判定;-a 普通文件,-d 目录 -p软链接 判断可以循环执行并在输入exit的时候退出(exit不限制大小写)
使用sh -x /mnt/check.sh -d /mnt/查看执行了几次比较
case语句
case语句是采用点名制,即匹配到谁谁应答,而if采用的是类比的方式,按顺序依次进行匹配,直到匹配到一致的为止,对于多条件的判定,显然case语句的执行效率比if要高
case $1 in
westos)
echo linux
;;
linux|LINUX)
echo westos
;;
*)
echo "ERROR:input westos or linux following scripts! "
esac
将上述判断文件类型的脚本的比较该为case点名制的比较
使用sh -x /mnt/check.sh -d /mnt/查看执行了几次比较
expect语句
expect是自动应答命令用于交互式命令的自动执行
expect的作用其实和输入重定向EOF有点类似,但是EOF太过机械,如果EOF在应答某个命令的时候出现问题,会导致整个应答出错。但是expect会自动跳过出错的应答,使得其他的命令能正常应答
模拟要应答的内容:
正常情况下
当某个应答出现问题
结果出现混乱
expect环境的配置
yum install expect
命令
作用
spawn
expect中的监控程序,其运行后会监控命令提出的交互问题
send
发送问题答案给交互命令
“\r”
表示回车
exp_continue
标示当问题不存在时继续回答下面的问题
expect eof
标示当问题回答完毕退出
interact
标示问题回答完毕留在交互界面
set NAME[ lindex $argv 0]
定义变量 标示expect脚本的第一串字符
当执行expect脚本时自动登录
脚本中的语句控制器
exit n
脚本退出,退出值为n
break
退出当前循环
continue
提前结束循环内部的命令,但不终止循环(结束本次循环)
示例说明
exit
执行结果
break
执行结果