shell的执行流控制

目录

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
doping -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
doif [ "$FILENAME" = "exit" ]thenecho exitexitelif [ ! -e "$FILENAME" ]thenecho $FILENAME is not existelif [ -f "$FILENAME" ]thenecho $FILENAME is fileelif [ -d "$FILENAME" ]thenecho $FILENAME is directoryfi
done

3.case语句

执行效率更高

case $1 inword1|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" ]
thenecho please input userlist following $0
elif [ ! -e "$1" ]
thenecho $1 is not exist
elsefor name in `cat $1`douseradd $name && echo $name is createeddone
fi

5.break,continue,exit

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

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

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

相关文章

C/S架构学习之使用epoll实现TCP特大型并发服务器

epoll实现TCP特大型并发服务器的流程&#xff1a;一、创建套接字&#xff08;socket函数&#xff09;&#xff1a;通信域选择IPV4网络协议、套接字类型选择流式&#xff1b; int sock_fd socket(AF_INET,SOCK_STREAM,0); //通信域选择IPV4、套接字类型选择流式二、填充服务器和…

MySQL的查询计划(EXPLAIN)

核心关注指标 在MySQL的查询计划&#xff08;EXPLAIN&#xff09;中&#xff0c;可以查看以下一些重要的指标来评估查询性能和索引使用情况&#xff1a; type&#xff1a;表示查询的访问类型&#xff0c;可以是常见的取值如"ref"、"eq_ref"、"range…

python+requests+unittest执行自动化接口测试!

1、安装requests、xlrd、json、unittest库 <1>pip 命令安装&#xff1a; pip install requests pip install xlrd pip install json pip install unittest <2> pycharm里安装 2、利用Page Object Model 设计理念创建六类Python Package(也可根据项目要求具体实施…

企业安全—DevSecOps概述详情

0x00 前言 SDL存在的问题在于体量过于庞大&#xff0c;不利于快速进行适配和进行&#xff0c;所以就有了DevSecOps&#xff0c;实际上是因为敏捷开发也就是DevOps的推进&#xff0c;并且坐上了云服务模式的火车&#xff0c;所以这一系列的东西都开始普及。DevSecOps作为DevOps…

vue3项目报错The template root requires exactly one element.eslint-plugin-vue

解决方案&#xff1a; 1.禁用 Vetur 并改用Volar》它现在是 Vue 3 项目的官方推荐。【必须重启vsCode】 从官方迁移指南&#xff1a; 建议使用带有我们官方扩展 Volar (opens new window) 的 VSCode&#xff0c;它为 Vue 3 提供了全面的 IDE 支持。 2.package.json文件中 &…

什么是蓝桥杯?什么是蓝桥STEMA考试?

第十五届蓝桥大赛赛事安排? STEMA考试11月(考试时间11月26日) STEMA考试1月(2024年1月) STEMA考试3月(2024年3月) 第十五届蓝桥杯省赛(2024年4月待定) 第十五届蓝桥杯国赛(2024年5月待定) 注:以上时间具体以组委会官方发布为准。 01.蓝桥杯 蓝桥杯全国软件和…

linux java 启动脚本

#!/bin/sh## java env #export JAVA_HOME/data/jdk1.8.0_121 #export JRE_HOME$JAVA_HOME/jre## service name #当前目录 SERVICE_DIR$(cd dirname $0; pwd) echo "$SERVICE_DIR" #jar包路径 JAR_DIRls -ltr $SERVICE_DIR/*.jar| tail -1 echo "JAR_DIR $JAR_DI…

强化学习------PPO算法

目录 简介一、PPO原理1、由On-policy 转化为Off-policy2、Importance Sampling&#xff08;重要性采样&#xff09;3、off-policy下的梯度公式推导 二、PPO算法两种形式1、PPO-Penalty2、PPO-Clip 三、PPO算法实战四、参考 简介 PPO 算法之所以被提出&#xff0c;根本原因在于…

#力扣:2315. 统计星号@FDDLC

2315. 统计星号 - 力扣&#xff08;LeetCode&#xff09; 一、Java class Solution {public int countAsterisks(String s) {int cnt 0;boolean flag true;for(char c: s.toCharArray()) {if(c |) flag !flag;else if(c * && flag) cnt;}return cnt;} }

什么是可重入,什么是可重入锁? 它用来解决什么问题?

可重入 可重入是多线程并发编程里面一个比较重要的概念&#xff0c;简单来说&#xff0c;就是在运行的某个函数或者代码&#xff0c;因为抢占资源或者中断等原因导致函数或者代码的运行中断&#xff0c;等待中断程序执行结束后&#xff0c;重新进入到这个函数或者代码中运行&am…

Python----break关键字对while...else结构的影响

案例&#xff1a; 女朋友生气&#xff0c;要求道歉5遍&#xff1a;老婆大人&#xff0c;我错了。道歉到第三遍的时候&#xff0c;媳妇埋怨这一遍说的不真诚&#xff0c;是不是就是要退出循环了&#xff1f;这个退出有两种可能性&#xff1a; ① 更生气&#xff0c;不打算原谅…

【Qt之QSetting】介绍及使用

概述 QSettings类提供了一种持久的、与平台无关的应用程序设置存储功能。 用户通常期望一个应用能在不同会话中记住其设置&#xff08;窗口大小和位置&#xff0c;选项等&#xff09;。在Windows上&#xff0c;这些信息通常存储在系统注册表中&#xff1b;在macOS和iOS上&…

Jenkins自动化测试

学习 Jenkins 自动化测试的系列文章 Robot Framework 概念Robot Framework 安装Pycharm Robot Framework 环境搭建Robot Framework 介绍Jenkins 自动化测试 1. Robot Framework 概念 Robot Framework是一个基于Python的&#xff0c;可扩展的关键字驱动的自动化测试框架。 它…

修复VS2015没有代码提示的问题【已解决】

问题描述 在Visual Studio 中编写代码时&#xff0c;发现使用库函数的时候&#xff0c;在类对象后输入点后&#xff0c;并没有出现类对应的成员信息的提示。 解决过程 1&#xff09;方法1&#xff1a; 百度“vs 没有代码提示”&#xff0c;搜索解决方案。 方案1&#xff1…

lossBN

still tips for learning classification and regression关于softmax的引入和作用分类问题损失函数 - MSE & Cross-entropy⭐Batch Normalization&#xff08;BN&#xff09;⭐想法&#xff1a;直接改error surface的landscape&#xff0c;把山铲平feature normalization那…

Hive分区表和分桶表

1.分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大。 分区为 HDFS 上表目录的子目录,数据按照分区存储在子目录中。如果查询的 `where` 字句的中包含分区条件,则直接从该分区去查找,而不是扫描整…

python实现PDF表格与文本分别导出EXCEL

现需将pdf 转换至Excel &#xff0c; 目前实现方式&#xff1a;将PDF的TABLE部分与 非 TABLE部分分别导出至Excel两个sheet中 1&#xff09;、识别PDF中的表格块 2&#xff09;、将PDF转换为Word格式 3&#xff09;、提取Word中非表格的文本数据 4&#xff09;、对文本与表格重…

Qt 实现侧边栏滑出菜单效果

1.效果图 2.实现原理 这里做了两个widget&#xff0c;一个是 展示底图widget&#xff0c;一个是 展示动画widget。 这两个widget需要重合。动画widget需要设置属性叠加到底图widget上面&#xff0c;设置如下属性&#xff1a; setWindowFlags(Qt::FramelessWindowHint | Qt::…

Java提升技术,进阶为高级开发和架构师的路线

原文网址&#xff1a;Java提升技术&#xff0c;进阶为高级开发和架构师的路线-CSDN博客 简介 Java怎样提升技术&#xff1f;怎样进阶为高级开发和架构师&#xff1f;本文介绍靠谱的成长路线。 首先点明&#xff0c;只写业务代码是无法成长技术的。提升技术的两个方法是&…

【Docker】Docker-Compose内置DNS负载均衡失效问题

Docker Compose实现负载均衡 还是对前面的例子docker-compose.yml稍微修改&#xff1a; version: "3.8"services:flask-demo:build:context: .dockerfile: Dockerfileimage: flask-demo:latestenvironment:- REDIS_HOSTredis-server- REDIS_PASS${REDIS_PASS}healt…