shell——4.5执行流的控制

目录

一.for语句 :

二.条件语句 :

一.while...do语句

二.until...do 语句

三.if...then...elif...then...else...fi 语句,多次判定条件执行动作

四.case  选择语句

五.expect    自动应答

六.break,continue,exit :

七.显示退出值 :

八.练习:


一.for语句 :

一.作用:

  为循环执行动作

二.for语句结构:

  for                定义变量
  do                使用变量,执行动作
  done            结束标志

三.for语句的基本格式:

格式一 :

#!/bin/bash
for NAME in westos lq root test	##name变量 , westos lq root test 变量的值
do
id $NAME &> /dev/null &&{
echo $NAME is exist		##利用变量操作的任务,有多少个变量任务就会重复多岁次
}||{
echo $NAME is not exist
}sleep 1			##使for语句1s循环一次
done

 格式二:

#!/bin/bash
for NAME in $(seq 1 2 10)
do
    echo $NAME
done

 格式三 :

#!/bin/bash
for WESTOS in {10..1}
do
     echo $WESTOS
done

格式四 :

#!/bin/bash
for ((WESTOS=0;WESTOS<10;WESTOS++))
do
    echo $WESTOS
done

二.条件语句 :

一.while...do语句

1.作用

条件为真执行动作

2.语句结构

while true		<!--条件为真-->
do			<!--条件成立所作循环动作-->
read -p "Please input word : " WORD
echo $WORD
done			<!--结束-->

二.until...do 语句

1.作用:

条件为假执行动作

2.语句结构

until false		<!--条件为假-->
do			<!--条件不成立所作循环动作-->
read -p "please input word : " WORD	
echo $WORD
done			<!--结束-->

三.if...then...elif...then...else...fi 语句,多次判定条件执行动作

1.代码结构 :

`if`					<!--首次判断定-->
`then`					<!--条件成立执行动作-->
`elif`					<!--当首次判定不成立时再次判定-->
`then`					<!--条件成立执行动作-->
`...`					<!--elif可以书写多次-->
`else`					<!--所有条件不成立执行动作-->
`fi`					<!--结束-->

四.case  选择语句

case $1 in
linux)
echo westos
;;
westos)
echo redhat
;;
redhat)
echo linux
;;
*)
echo error
esac

  tips:   sh -x shiyan.sh westos    ##选择语句在对于选择信息判断具有平定执行过程,那么对于选择条件的执行只需要判定一次即可

五.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

应答脚本:

dnf install expect -y         ##下载回答脚本所需工具

vim answer.exp                ##回答脚本以exp结尾

expect answer.exp           ##运行回答脚本

#!/usr/bin/expect
set timeout 1
set NAME [ lindex $argv 0 ]    #脚本后跟的第一串字符
set AGE  [ lindex $argv 1 ]
set OBJ  [ lindex $argv 2 ]
set FEEL [ lindex $argv 3 ]
spawn /mnt/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       ##问题回答完毕后退出expect,或者换成interact保留expect环境,二选一  

六.break,continue,exit :

continue        #终止当此次前循环提前进入下个循环
break           #终止当前所在语句所有动作进行语句外的其他动作
exit            #脚本退出

 

 

 

 

 

 七.显示退出值 :

$?        #表示退出值,退出值为0表示命令无任何报错,退出值非0表示有相应报错,退出值可以设定,exit 66 ,退出值的范围为0~255

 

 

八.练习:

一.

脚本练习check_host.sh ip
检测输入的IP是否开启,如果网络正常请输出主机名称

 Auto_Ssh()
 {
 /usr/bin/expect <<EOF
 spawn ssh -l root $1 hostname
 expect {
 "yes/no" { send "yes\r";exp_continue }
 "password:" {send "westos\r"}
 }
 expect eof
 EOF
 }
 [ -z "$1" ] && {
   echo "Please input check ipaddress"
   exit
 }
 ping -c1 -w1 $1 &> /dev/null && {
    Auto_Ssh $1 | tail -n 1
 }||{
   echo $1 is down
 }

 二.书写脚本计算当前cpu总占用率是多少

echo "`ps ax -o %cpu | awk 'BEGIN{N=0}!/0.0|%cpu/{N+=$1}END{print N}'`%"

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值