Linux之shell脚本学习(三)——常用的语句(for、while、if、expect等)

一、for语句

for NUM in 1 2 3		## 1 2 3 分别赋给变量NUM
for NUM in {1..3}		##1..3所有的数分别赋给变量NUM
for NUM in `seq 1 3` 或者 for NUM in `seq 1 2 10`		##for NUM in `seq 1 2 10`设置循环步长为2。
do
	可执行的语句
done

for语句示例:

vim test.sh

#!/bin/bash
for NUM in 1 2 3
do
        echo $NUM
done

在这里插入图片描述
设置步长:

vim test.sh

#!/bin/bash
for NUM in `seq 1 2 10`
do
        echo $NUM
done

在这里插入图片描述

二、while语句

while 条件	| until 条件		##条件为真,则执行循环语句|直到条件为假,否则一直执行
do
	循环语句
done

while示例:

vim test

#!/bin/bash
while true				##while 当条件为真则执行,这里true默认一直循环
do
        read -p "Please input a word: " WORD
        while [ "$WORD" = "exit" ]		##while用户输入为exit是则输出bye并且退出脚本。
        do
                echo bye
                exit
        done
        echo $WORD
done

在这里插入图片描述

#!/bin/bash
until false
do
        read -p "Please input a word: " WORD
        while [ "$WORD" = "exit" ]
        do
                echo bye
                exit
        done
        echo $WORD
done

在这里插入图片描述

三、if语句

if语句结构:

if 条件一			##如果条件一满足,执行语句一。如果条件二满足,执行语句二。如果都不满足,执行语句n
then 语句一
elif 条件二
then 语句二
。。。
else
语句n
fi

if语句示例:

vim test.sh
#!/bin/bash
if
[ "$1" = "a" ]
then
        echo apache
elif
[ "$1" = "b" ]
then
        echo backup
elif [ "$1" = "c" ]
then
        echo chronyd
else
        echo "Don't no"
fi

在这里插入图片描述

四、case语句

1、case语句结构

case 变量 in			##变量的值如果为word1,则执行action1。如果为word2,则执行action2,都不满足则执行action3。
		word1)
		action1
		;;
		word2)
		action2
		;;
		*)
		action3
esac

2、case语句示例

vim test.sh

#!/bin/bash
case $1 in
        a)  
        echo apache
        ;;  
        b)  
        echo backup
        ;;  
        c)  
        echo chronyd
        ;;  
        *)  
        echo "error: input a or b or c!!!"
esac

在这里插入图片描述

五、expect

expect 是自动应答命令用于交互式命令的自动执行
spawn 是 expect 中的监控程序,其运行后会监控命令提出的
交互问题

send 			发送问题答案给交互命令
"\r" 			表示回车
exp_continue 	标示当问题不存在时继续回答下面的问题
expect eof 		标示问题回答完毕退出 expect 环境
interact 		标示问题回答完毕留在交互界面
set NAME [ lindex $argv n ] 定义变量

示例:

首先:
下载expect软件:
在这里插入图片描述
先写一个需要键入信息的简单脚本:

vim ask.sh
#!/bin/bash
read -p "what's your name: " NAME
read -p "How old are you: " AGE
read -p "Which class you study: " CLASS
read -p "You feel happy or terrible ?" FEEL
echo $NAME is $AGE\'s old and $NAME is feel $FEEL

chmod +x ask.sh

在这里插入图片描述
再写一个自动应答此脚本问题的脚本:

vim auto_ask.sh
#!/bin/bash
expect <<EOF
spawn /mnt/ask.sh
expect {
        "name" { send "zhao\r" ; exp_continue }
        "old" { send "20\r" ; exp_continue }
        "study" { send "Linux\r" ; exp_continue }
        "feel" { send "happy\r" }
}
expect eof
EOF

在这里插入图片描述
如何经过更改可以将信息跟在脚本后,回答问题?

vim auto_ask.sh
#!/bin/bash				##脚本环境为/bin/bash
expect <<EOF			##利用输入重定向将在expect环境运行的语句输入到expect中
spawn /mnt/ask.sh
expect {
        "name" { send "$1\r" ; exp_continue }
        "old" { send "$2\r" ; exp_continue }
        "study" { send "$3\r" ; exp_continue }
        "feel" { send "$4\r" }
}
expect eof				##标示问题回答完毕退出 expect 环境
EOF

在这里插入图片描述
当然,也可以直接用expect环境写脚本:

vim auto_ask.sh
#!/usr/bin/expect
set NAME [ lindex $argv 0 ]			##类似于/bin/bash环境中的$1
set AGE [ lindex $argv 1 ]			##类似于/bin/bash环境中的$2
set OBJ [ lindex $argv 2 ]			##类似于/bin/bash环境中的$3
set FEEL [ lindex $argv 3 ]			##类似于/bin/bash环境中的$4
spawn /mnt/ask.sh
expect {
	"name" { send "$NAME\r" ; exp_continue }
	"old" { send "$AGE\r" ; exp_continue }
	"study" { send "$OBJ\r" ; exp_continue }
	"feel" { send "$FEEL\r" }
}
expect eof

在这里插入图片描述

六、脚本中的语句控制器

exit n	脚本退出,退出值为 n
break	退出当前循环
continue	提前结束循环内部的命令,但不终止循环

1、exit

#!/bin/bash
echo "study linux!!!"
exit 66

在这里插入图片描述
2、break

vim test.sh
#!/bin/bash
for i in `seq 0 2 8`
do
	echo $i
	[ "$i" = "4" ] && {
	break
	}
done

在这里插入图片描述
3、continue

vim test.sh
#!/bin/bash
for i in `seq 0 2 8`
do
        [ "$i" = "4" ] && {
        continue
        } || {
        echo $i
        }
done

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值