shell的执行流控制

news2024/11/13 23:57:03

目录

1.for语句

2.条件语句

while...do语句

 until...do 语句

if...then...elif...then...else...fi 语句 

3.case语句

4.expect

5.break,continue,exit


1.for语句

作用:为循环执行动作

for语句结构

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

for语句的基本格式

格式1:

for WESTOS in `seq 2 2 10`
do
echo $WESTOS
done

 

格式2:

for WESTOS in 1 2 3
do
echo $WESTOS
done

格式3:

for WESTOS in {10..1}
do
echo $WESTOS
done

格式4:

for ((WESTOS=0;WESTOS<10;WESTOS++))
do
echo $WESTOS
done

练习

check_host.sh
用此脚本检测 10 台与您当前主机直连主机是否网络通常
如果网络通常请显示主机的 ip 列表
for name in 10 20 30
do
  ping -c1 -w1 192.168.81.$name  &> /dev/null && echo 192.168.81.$name is up  ||echo 192.168.81.$name is down
done

2.条件语句

while...do语句

作用 : 条件为真执行动作
语句结构
while ture         //条件为真
do                         //条件成立所做循环动作

done                        //会一直判断循环

 until...do 语句

作用 : 条件为假执行动
语句结构
until false                         //条件为假
do                         //条件不成立所做循环动作

done

if...then...elif...then...else...fi 语句 

作用:多次判定条件执行动作

代码结构
if        //首次判断定
then        //条件成立执行动作
elif        //当首次判定不成立时再次判定
then            //条件成立执行动作
...                //elif可以书写多次
else                //所有条件不成立执行动作
fi                //    结束

脚本练习:

check_file.sh
please input filename: file
file is not exist
file is file
file is direcory
此脚本会一直询问直到用户输入 exit 为止
while true
read -p "please input filename: " FILENAME
do
  if [ "$FILENAME" = "exit" ]
  then
    echo exit
    exit
  elif [ ! -e "$FILENAME" ]
  then
    echo $FILENAME is not exist
  elif [ -f "$FILENAME" ]
  then
    echo $FILENAME is file
  elif [ -d "$FILENAME" ]
  then
    echo $FILENAME is directory
  fi
done

3.case语句

执行效率更高

case $1 in
	word1|WORD1)
	action1
	;;
	word2|WORD2)
	action2
	;;
	*)
	echo error
esac

4.expect

需安装expect

问题脚本

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

应答脚本

#!/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 sh /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该为shell

#!/bin/bash
expect(){
/usr/bin/expect    <<EOF
spawn $5
expect {
"name" { send "$1\r";exp_continue }
"old" { send "$2\r";exp_continue }
"objective" { send "$3\r";exp_continue }
"ok" { send "$4\r" }
}
expect eof
EOF
}
expect su 12 shell ok "sh /mnt/ask.sh"

脚本练习

host_list.sh
检测 172.25.254.1-172.25.254.10 网络是否开启
如果网络正常生成解析列表 hosts_list
格式如下
ip         主机名称
例如 :172.25.254.1为开启状态主机名为westos_student1.westos.org

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
}

读取一个用户列表文件,逐行创建用户,并在创建成功后输出提示信息。
if [ -z "$1" ]
then
  echo please input userlist following $0
elif [ ! -e "$1" ]
then
  echo $1 is not exist
else
  for name in `cat $1`
  do
     useradd $name && echo $name is createed
  done
fi

5.break,continue,exit

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1141619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系列十八、请描述下bean的生命周期

一、概述 bean的生命周期是指bean从创建到销毁的整个过程。 二、生命周期 bean的生命周期是指bean从创建到销毁的整个过程&#xff0c;大致可以分为如下四个过程&#xff1a; 2.1、实例化 实例化可以通过如下几种方式完成&#xff1a;&#xff08;参考系列十五&#xff09…

区块链物联网中基于属性的私有数据共享与脚本驱动的可编程密文和分散密钥管理

Attribute-Based Private Data Sharing With Script-Driven Programmable Ciphertext and Decentralized Key Management in Blockchain Internet of Things 密钥生成算法 第 1 步&#xff1a;对于属性集A 的用户IDk&#xff0c;他首先将属性集A发送给Pi并且计算 &#xff0c…

MySQL大揭秘:深入探索Linux数据库管理

1 数据库的基本介绍 1.1 数据库的基本介绍 数据库的本质就是高级的excle表格。常见的数据库有&#xff1a;MySQL、Oracle 、sqlservermariadb就是MySQL的一种。数据库常用的名词 1.字段 &#xff1a;表格中的表头,每一列就是一个字段 2.表 &#xff1a;表格 3.库 &#xff1a…

Corel Products Keygen-X-FORCE 2023(Corel会声会影2023注册机)

Corel All Products Universal Keygens通用注册机是一款非常实用的激活工具&#xff0c;专门用于激活Corel全系列产品。尤其是被广泛使用的CorelDRAW作图软件和Corel VideoStudio会声会影视频编辑处理软件。小编也是一直关注由X-Force团队制作的注册机&#xff0c;目前已更新至…

fl studio21水果新手要不要购买?

FL Studio&#xff0c;一款深受音乐制作人和作曲家欢迎的数字音频工作站&#xff08;DAW&#xff09;&#xff0c;不仅因其强大的功能&#xff0c;也因其在行业内的长久盛名而成为许多专业人士的首选。作为一个全方位的音乐制作软件&#xff0c;它能够满足用户在录音、编曲、混…

p5.js画布操作实战:创建,绑定指定元素,动态调整大小,隐藏滚动条,删除画布

文章简介 之前在 《p5.js 光速入门》 里粗略讲过一下如何使用 p5.js 创建画布。 这次要介绍几个 p5.js 提供的画布相关的方法。 创建画布时的相关配置。让画布绑定指定元素。重置画布大小。删除画布。 学习本文前你需要具备一点 p5.js 的知识&#xff0c;想了解的请查看 《p…

Android---StartActivity启动过程

在手机桌面应用中点击某一个 icon 之后&#xff0c;最终是通过 startActivity 去打开某一个 Activity 页面。我们知道&#xff0c;Android 中的一个 APP 就相当于一个进程。所以&#xff0c;startActivity 操作中还需要判断&#xff0c;目标 Activity 的进程是否已经创建。如果…

【洛谷 P3654】First Step (ファーストステップ) 题解(模拟+循环枚举)

First Step (ファーストステップ) 题目背景 知らないことばかりなにもかもが&#xff08;どうしたらいいの&#xff1f;&#xff09; 一切的一切 尽是充满了未知数&#xff08;该如何是好&#xff09; それでも期待で足が軽いよ&#xff08;ジャンプだ&#xff01;&#xff09…

好的FPGA编码风格(2)--多参考设计软件的语言模板(Language Templates)

什么是语言模板&#xff1f; 不论是Xilinx的Vivado&#xff0c;还是Altera的Quartus II&#xff0c;都为开发者提供了一系列Verilog、SystemVerilog、VHDL、TCL、原语、XDC约束等相关的语言模板&#xff08;Language Templates&#xff09;。 在Vivado软件中&#xff0c;按顺序…

C# Socket通信从入门到精通(4)——多个异步TCP客户端C#代码实现

前言: 在之前的文章C# Socket通信从入门到精通(3)——单个异步TCP客户端C#代码实现我介绍了单个异步Tcp客户端的c#代码实现,但是有的时候,我们需要连接多个服务器,并且对于每个服务器,我们都有一些比如异步连接、异步发送、异步接收的操作,那么这时候我们使用之前单个…

文件权限详解

一、文件类型 ll指令查看文件详细信息中&#xff0c;第一列就是文件类型。 常见的文件类型有&#xff1a; 1、 - &#xff1a;普通文件 &#xff08;文本、源代码、图片、视频、可执行&#xff09; 2、 d &#xff1a;目录文件 3、b &#xff1a;块设备 4、c &#xff1…

CAS 机制的实现原理分析

在 synchronized 中很多地方都用到了CAS机制&#xff0c;它的叫法有很多&#xff0c;比如CompareAndSwap、CompareAndExchange、CompareAndSet&#xff0c;它是一个能够进行比较和替换的方法&#xff0c;这个方法能够在多线程环境下保证对一个共享变量进行修改时的原子性不变。…

【MyBatis Plus】深入探索 MyBatis Plus 的条件构造器,自定义 SQL语句,Service 接口的实现

文章目录 前言一、条件构造器1.1 什么是条件构造器1.2 QueryWrapper1.3 UpdateWrapper1.4 LambdaWrapper 二、自定义 SQL 语句2.1 自定义 SQL 的基本用法2.2 自定义 SQL 实现多表查询 三、Service 接口3.1 对 Service 接口的认识3.2 实现 Service 接口3.3 实现增删改查功能3.4 …

20231027 基于STM32mp157a 的内核与应用层通过子系统控制led灯,以及计时器功能

1.基于GPIO子系统编写LED驱动&#xff0c;编写应用程序进行测试 stm32mp157a-fsmp1a.dts 内核程序&#xff1a;ledk.c #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/de…

C++进阶语法——OOP(面向对象)【学习笔记(四)】

文章目录 1、C OOP⾯向对象开发1.1 类&#xff08;classes&#xff09;和对象&#xff08;objects&#xff09;1.2 public、private、protected访问权限1.3 实现成员⽅法1.4 构造函数&#xff08;constructor&#xff09;和 析构函数&#xff08;destructor&#xff09;1.4.1 构…

kubectl资源管理命令-陈述式

目录 一、陈述式对象管理 1、基本概念 2、基础命令使用 3、基本信息查看&#xff08;kubectl get&#xff09; 4、增删等操作 5、登录pod中的容器 6、扩容缩容pod控制器的pod 7、删除副本控制器 二、创建项目实例 1、创建 kubectl create命令 2、发布 kubectl …

Spring Cloud Gateway + Knife4j 4.3 实现微服务网关聚合接口文档

目录 前言Spring Cloud 整合 Knife4jpom.xmlapplication.ymlSwaggerConfig.java访问单服务接口文档 Spring Cloud Gateway 网关聚合pom.xmlapplication.yml访问网关聚合接口文档 接口测试**登录认证**获取登录用户信息 结语源码 前言 youlai-mall 开源微服务商城新版本基于 Sp…

怎样使用Mybatis数据库连接池?

怎样使用Mybatis数据库连接池&#xff1f; 首先是配置&#xff0c;如下图&#xff1a; 千万要注意&#xff0c;一个程序中只创建一个SqlSessionFactory对象&#xff0c;要不然每次执行sql都创新创建一个SqlSessionFactory对象的话&#xff0c;那么每次建立连接的时候都会先清…

Chimera:混合的 RLWE-FHE 方案

参考文献&#xff1a; [HS14] S. Halevi and V. Shoup. Algorithms in HElib. In Advances in Cryptology–CRYPTO 2014, pages 554–571. Springer, 2014.[HS15] S. Halevi and V. Shoup. Bootstrapping for HElib. In Advances in Cryptology–EUROCRYPT 2015, pages 641–6…

【Spring】快速入门Spring Web MVC

文章目录 1. 什么是Spring Web MVC1.1 MVC1.2 Spring MVC 2. 使用Spring MVC2.1 项目创建2.2 建立连接2.2.1 RequestMapping 注解2.2.2 RestController 注解2.2.3 RequestMapping 使⽤2.2.4 RequestMapping 是什么请求&#xff1f;POST&#xff1f;GET&#xff1f;…&#xff1…