shell中的语句(for,while,if,case,expect,exit,break,continue)

1.for语句

格式:

for i in 1 2 3		//i一次取值1,2,3
for i in {1..3}		//i一次取值1,2,3
for i in `seq 1 10`		//i从1到10,每次加1(默认值)
for i in `seq 1 2 10`	//i从1到10,每次加2
for((i=1;i<10;i++))	//与c语言类似,只是变成了(())
do 
	echo $i
done

for语句示例:

for NAME in westos linux 666
do
	echo $NAME
done

在这里插入图片描述

2.while语句

格式:

while 条件
do
done

例1:与c语言类似

#!/bin/bash
read -p "please input a data: " WORD
while(("$WORD"<3))
do
	echo "$WORD<3"
	((WORD=$WORD+1))
done

在这里插入图片描述
例2:

#!/bin/bash
while true		//成立--不成立(false)
do
	clear		//清屏
	uptime
	sleep 5		//睡眠5秒;每5秒执行一次uptime
done

在这里插入图片描述在这里插入图片描述
每5秒执行一次,while后的条件一直成立

3.if 语句

格式: 类比c语言

if			//条件1
then
elif		//条件2
then
else		//其他条件
fi

例1:

if [ "$1" == "linux" ]
then
	echo linux
elif [ "$1" == "westos" ]
then
	echo westos
else
	echo bey
fi

在这里插入图片描述
例2:
建立文件userfile中的用户,密码在文件passwdfile中

#!/bin/bash
if [ $# -lt 2 ]
then
	echo "Error: please input tow files following srcipt!"
elif [ ! -e $1 ]
then
	echo "Error: $1 is not exits!"
elif [ ! -e $2 ]
then
	echo "Error: $2 is not exits!"
else
	Num=`awk 'BEGINN=0}{N++}END{print N}' userfile`
	for I in `seq 1 $Num`
	do 
		USERNAME=`sed -n ${I}p userfile`
		PASSWD=`sed -n ${I}p passwdfile`
		useradd $USERNAME
		echo $PASSWD | passwd --stdin $USERNAME > /dev/null
		echo $USERNAME is created
	done
fi

在这里插入图片描述

4.case 语句

格式:

case
word1 )
action1
;;
word2)
action2
;;
........
*)
action_last
esac

列1:

#!/bin/bash
case $1 in
        1)			//$1=1时,输出a
        echo a
        ;;
        2)			//$1=2时,输出b
        echo b
        ;;
        *)			//$1不等于1或2时,输出c
        echo c
esac

在这里插入图片描述

5.expect

expect是自动应答命令用于交互式命令的自动执行
spawn是 expect 中的监控程序,其运行后会监控命令提出的交互问题
send发送问题答案给交互命令
“\r”表示回车
exp_continue标示当问题不存在时继续回答下面的问题
expect eof标示问题回答完毕退出 expect 环境
interact标示问题回答完毕留在交互界面
set NAME [ lindex $argv n ]定义变量

expect命令需要安装expect
在这里插入图片描述
例1:
vim ask.sh

#!/bin/bash	
read -p "What's your name: " NAME
read -p "How old are you: " AGE 
read -p "Which object you study: " OBJ 
read -p "Are you happy: " FEEL
echo $NAME is $AGE\'s old study $OBJ feel $FEEL

//执行时:输入一次执行一次,不能实现自动执行
在这里插入图片描述

例2: 例1交互时每次都需要输入,比较麻烦,为实现自动交互,使用expect

vim ask.sh

#!/bin/bash
read -p "What's your name: " NAME
read -p "How old are you: " AGE 
read -p "Which object you study: " OBJ 
read -p "Are you happy: " FEEL
echo $NAME is $AGE\'s old study $OBJ feel $FEEL

vim answer.exp

#!/usr/bin/expect
spawn sh /mnt/ask.sh
expect "name"
send "ylz\r"
expect "old"
send "21\r"
expect "object"
send "linux\r"
expect "happy"
send "sad\r"
expect eof 

在这里插入图片描述

例3: 例2的交互时固定的,在文件中,不方便更改

vim answer.exp

#!/usr/bin/expect
set NAME [ lindex $argv 0 ] 
set AGE [ lindex $argv 1 ] 
set OBJ [ lindex $argv 2 ] 
set FEEL [ lindex $argv 3 ] 
spawn sh /mnt/ask.sh
expect {
	"name" { send "$NAME\r" ; exp_continue }
	"old" { send "$AGE\r" ; exp_continue }
	"object" { send "$OBJ\r" ; exp_continue }
    "happy" { send "$FEEL\r" }
}
expect eof 

在这里插入图片描述

6.脚本中的语句控制器

exit脚本退出
break退出当前循环
continue结束当前循环,进入下一次循环

结合c语言理解,基本一样

(1)exit
在这里插入图片描述
在这里插入图片描述
(2)break
在这里插入图片描述
在这里插入图片描述
(3)continue
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值