shell 脚本比较字符串相等_LINUX快速入门第十六章:Shell 流程控制

061b4f57fadd5381213b3d3f1fb12f98.png

Shell 流程控制

和Java、PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法):

<?phpif (isset($_GET["q"])) { search(q);}else { // 不做任何事情}

在sh/bash里可不能这么写,如果else分支没有语句执行,就不要写这个else。

280225b444ff39acc23f0c952773e54c.png

if else

if

if 语句语法格式:

if conditionthen command1  command2 ... commandN fi

写成一行(适用于终端命令提示符):

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

末尾的fi就是if倒过来拼写,后面还会遇到类似的。

2b8ee6bdf8c7db7f2f763c24f4e1093a.png

if else

if else 语法格式:

if conditionthen command1  command2 ... commandNelse commandfi
7da57fafb37083a9342c1543a1348d91.png

if else-if else

if else-if else 语法格式:

if condition1then command1elif condition2 then  command2else commandNfi

以下实例判断两个变量是否相等:

a=10b=20if [ $a == $b ]then echo "a 等于 b"elif [ $a -gt $b ]then echo "a 大于 b"elif [ $a -lt $b ]then echo "a 小于 b"else echo "没有符合的条件"fi

输出结果:

a 小于 b

if else语句经常与test命令结合使用,如下所示:

num1=$[2*3]num2=$[1+5]if test $[num1] -eq $[num2]then echo '两个数字相等!'else echo '两个数字不相等!'fi

输出结果:

两个数字相等!

f2172ca75710137aefd4c83c167e36b2.png

for 循环

与其他编程语言类似,Shell支持for循环。

for循环一般格式为:

for var in item1 item2 ... itemNdo command1 command2 ... commandNdone

写成一行:

for var in item1 item2 ... itemN; do command1; command2… done;

当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。

in列表是可选的,如果不用它,for循环使用命令行的位置参数。

例如,顺序输出当前列表中的数字:

for loop in 1 2 3 4 5do echo "The value is: $loop"done

输出结果:

The value is: 1The value is: 2The value is: 3The value is: 4The value is: 5

顺序输出字符串中的字符:

for str in 'This is a string'do echo $strdone

输出结果:

This is a string

while 语句

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:

while conditiondo commanddone

以下是一个基本的while循环,测试条件是:如果int小于等于5,那么条件返回真。int从0开始,每次循环处理时,int加1。运行上述脚本,返回数字1到5,然后终止。

#!/bin/bashint=1while(( $int<=5 ))do echo $int let "int++"done

运行脚本,输出:

12345

使用中使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,具体可查阅:Bash let 命令

while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按结束循环。

echo '按下  退出'echo -n '输入你最喜欢的网站名: 'while read FILMdo echo "是的!$FILM 是一个好网站"done

运行脚本,输出类似下面:

按下  退出输入你最喜欢的网站名:菜鸟教程是的!菜鸟教程 是一个好网站

无限循环

无限循环语法格式:

while :do commanddone

或者

while truedo commanddone

或者

for (( ; ; ))

39c05836022ea00d9c12cbba2b4a5792.png

until 循环

until 循环执行一系列命令直至条件为 true 时停止。

until 循环与 while 循环在处理方式上刚好相反。

一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。

until 语法格式:

until conditiondo commanddone

condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。

以下实例我们使用 until 命令来输出 0 ~ 9 的数字:

#!/bin/basha=0until [ ! $a -lt 10 ]do echo $a a=`expr $a + 1`done

运行结果:

输出结果为:

0123456789

case

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

case 值 in模式1) command1 command2 ... commandN ;;模式2) command1 command2 ... commandN ;;esac

case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

下面的脚本提示输入1到4,与每一种模式进行匹配:

echo '输入 1 到 4 之间的数字:'echo '你输入的数字为:'read aNumcase $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;;esac

输入不同的内容,会有不同的结果,例如:

输入 1 到 4 之间的数字:你输入的数字为:3你选择了 3

跳出循环

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。

b08426a2d7ebcc406969a6f4c49bc8c3.png

break命令

break命令允许跳出所有循环(终止执行后面的所有循环)。

下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。

#!/bin/bashwhile :do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esacdone

执行以上代码,输出结果为:

输入 1 到 5 之间的数字:3你输入的数字为 3!输入 1 到 5 之间的数字:7你输入的数字不是 1 到 5 之间的! 游戏结束

continue

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

对上面的例子进行修改:

#!/bin/bashwhile :do echo -n "输入 1 到 5 之间的数字: " read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esacdone

运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo "游戏结束" 永远不会被执行。


esac

case的语法和C family语言差别很大,它需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break。

bb0fa6a65bb103f1e16b9cf299e221a5.png

笔记

shell 中的 for 循环不仅可以用文章所述的方法。

对于习惯其他语言 for 循环的朋友来说可能有点别扭。

for((assignment;condition:next));do command_1; command_2; commond_..;done;

如上所示,这里的 for 循环与 C 中的相似,但并不完全相同。

通常情况下 shell 变量调用需要加 $,但是 for 的 (()) 中不需要,下面来看一个例子:

#!/bin/bashfor((i=1;i<=5;i++));do echo "这是第 $i 次调用";done;

执行结果:

这是第1次调用这是第2次调用这是第3次调用这是第4次调用这是第5次调用

与 C 中相似,赋值和下一步执行可以放到代码之前循环语句之中执行,这里要注意一点:如果要在循环体中进行 for 中的 next 操作,记得变量要加 $,不然程序会变成死循环。

f44c110e52a183e48c089496e711ee14.png

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

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

相关文章

计算机网络学习笔记(二)——物理层、奈奎斯特/香农定理、物理接口、传输介质、交换、电信网络、无线网络

文章目录前言概念一、物理层功能二、信道容量三、物理层接口规范四、常见的传输介质五、传统电信网关键技术和结构六、电信网的演进七、无线通信系统参考资料前言 笔者系电子科技大学2019级在读本科生&#xff0c;针对本学期学校开设的计算机通信网课程&#xff0c;将学习笔记…

只引入部分elementui_腾讯动漫确定引入假面骑士亚极陀和甲斗王 四仔:是不是玩不起...

假面骑士系列在国内成功实现了版权化之后&#xff0c;基本上目前的大环境和事态是被诶腾讯动漫平台独家垄断的节奏&#xff0c;不过目前其持有的假面骑士系列的作品旧十年基本上只涉及到了帝骑哥&#xff0c;近期官方公开进行了暗示&#xff0c;表示会引入假面骑士agitΩ还有假…

关于面向用户设计的反思——顶点计划3课程的Process Book

一、 开始的开始——调研、还是调研、一直在路上…… 在只有关于疫情给老年人的带来的问题大方向下&#xff0c;我去到街上随机的拉老年人进行调研。这是我第一次如此频繁的跟陌生老年人沟通。此期间&#xff0c;跟他们的沟通中我发现除了口音上的差异&#xff0c;还有更多的是…

集体备课模板_小学语文集体备课教案模板(共5篇)

第1篇&#xff1a;小学集体备课教案小学集体备课教案课题 长方体和正方体的认识 主备人 王世平 教学 目标知识目标 让学生了解体积的概念和体积单位&#xff0c;感知长方体和正方体体积单位的大小。能力目标 动手操作&#xff0c;正确推导出长方体和正方体的体积公式&#xff0…

计算机网络学习笔记(三)——数据链路层功能和服务、帧定位、差错、海明距离、检错码和纠错码

文章目录前言概念一、链路层功能与服务二、成帧和帧同步&#xff08;帧定位&#xff09;[1]字节计数法[2]字符填充首尾定界法[3]位填充首尾定界法[4]块传输与物理层违例编码定界法[5]校验和法三、链路层的差错产生及类型&#xff08;一&#xff09;产错产生的原因&#xff08;二…

物联网全称_物联网的魔力世界

物联网顾名思义就是一种万物相连的网&#xff0c;英文全称&#xff1a;Internet of Things&#xff0c;缩写IoT。物联网可以让所有能行使独立功能的物体实现相互连接&#xff0c;通过物联网技术&#xff0c;可以用中心计算机对机器、设备或人员进行集中管理、控制&#xff0c;也…

计算机网络学习笔记(四)——差错控制、停等协议、回退N帧、选择性重传、滑动窗口、数据链路层HDLC、PPP协议、有限状态机

文章目录前言概念一、差错控制1、停等协议2、回退N帧协议&#xff08;GoBack_N,GB_N&#xff09;3、选择性重传协议&#xff08;Selective Repeat,SR)4、单帧确认和累计确认、捎带应答二、链路层流量控制——滑动窗口机制三、数据链路层典型协议1、HDLC协议&#xff08;High-le…

colorkey口红怎么样_colorkey镜面唇釉怎么样 唇釉和口红有什么区别

colorkey镜面唇釉怎么样colorkey镜面唇釉是非常受欢迎的&#xff0c;上嘴效果也是非常好&#xff0c;主打就是晶莹透彻&#xff0c;水光灵动。目前有14个色号&#xff0c;可以满足大部分女生的要求&#xff0c;其中最受欢迎的色号就是&#xff0c;P701&#xff0c;非常好看的山…

计算机网络学习笔记(五)——介质访问控制子层、ALOHA、CSMA/CD、CSMA/CA、有限竞争协议、非竞争式协议、网桥、交换机、以太网

文章目录前言概念一、介质访问控制子层和广播式信道二、多路信道分配三、竞争式访问协议&#xff08;一&#xff09;ALOHA及时隙ALOHA&#xff08;S-ALOHA&#xff09;协议&#xff08;二&#xff09;CSMA协议&#xff08;三&#xff09;CSMA/CD协议&#xff08;四&#xff09;…

隐藏画质代码_优秀的模糊测试代码是如何炼成的?

所谓模糊测试&#xff0c;是指一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法&#xff0c;它经过了近 20 年的发展&#xff0c;早已在程序员圈中成为一种主流漏洞挖掘技术。基于此&#xff0c;开发者们该如何编写良好的模糊测试代码&#xff1f;作者 |…

计算机网络学习笔记(六)——网络层、虚电路和数据报交换、路由(距离矢量、链路状态算法)、IP编址、网络拥塞控制、网络互联

文章目录前言概念一、网络层相关概述&#xff08;一&#xff09;三大核心功能&#xff08;二&#xff09;通信两大阵营二、交换技术&#xff08;一&#xff09;交换技术的分类&#xff08;二&#xff09;电路交换和分组交换&#xff08;三&#xff09;虚电路与数据报三、路由&a…

计算机网络学习笔记(七)——传输层、TCP三次握手、四次挥手、TCP流量控制、大总结

文章目录前言概念一、传输层概述二、传输层问题三、端到端寻址四、TCP三次握手和四次挥手&#xff08;一&#xff09;三次握手建立连接&#xff08;二&#xff09;四次挥手拆除连接五、带拥塞的TCP流量控制六、传输层实例计网大总结思维导图参考资料前言 笔者系电子科技大学20…

开发接口文档_更优更稳更好,看文档驱动开发模式在AIMS中的优势

​【摘要】程序员常会说&#xff1a;我最讨厌别人写的代码没有文档&#xff0c;我也最讨厌自己需要写文档。有一个很老的梗: 我最讨厌别人写的代码没有文档&#xff0c;我也最讨厌自己需要写文档。有这种想法的程序员应该算是一个老鸟了&#xff0c;对于大多数程序员来说&#…

计算机网络项目——最小网元设计(前情提要和项目概述)

目录序言项目总览一、设计主题二、阶段目标其他想说的话序言 经过此学期的计算机通信网挑战课程&#xff0c;我算是体会到了什么叫做忙碌。想着本学期已经结束&#xff0c;闲暇时间来整理一下本学期计通网做的大项目&#xff0c;或是想着因为没能找好队友&#xff0c;一个人干…

广电为什么禁止投屏_广电的机顶盒怎么投屏

说到广电的机顶盒&#xff0c;相信大家都不陌生&#xff0c;如今普及的比较广&#xff0c;但是很多朋友不太清楚广电的机顶盒怎么投屏&#xff0c;没关系&#xff0c;小编将在下文为大家介绍相关知识&#xff0c;希望对大家有所帮助。一、广电的机顶盒怎么投屏想将手机屏幕投屏…

计算机网络项目——最小网元设计(阶段一)

目录阶段目标模型设计功能设计应用层网络层数据链路层物理层其他想说的话阶段目标 完成最小网元的层次模型设计 模型设计 仿照实际应用较为更广泛的TCP/IP模型&#xff0c;针对本项目的最小网元&#xff0c;初步将模型划分为四层&#xff1a;应用层、网络层、链路层、物理层…

人声处理_人声美化:人声后期处理方法

最近在整理美声方面的相关资料&#xff0c;主要是EQ方法的搜集和归纳。声音的压限&#xff08;压缩处理&#xff09;、均衡、混响是做好人声处理的关键。[1]&#xff11;Ultrafunk fx: Equalizer R3&#xff08;均衡&#xff09;声音过暗会感觉吐词含糊不清&#xff0c;声音过亮…

计算机网络项目——最小网元设计(阶段二)

目录阶段目标设计描述1、帧结构2、帧定位3、差错检测4、差错控制5、流量控制6、长帧传输——分片测试情况其他想说的话阶段目标 用链路层例程代码&#xff08;LnkTester.sln&#xff09;设计实现链路层上点到点之间的通信过程&#xff0c;具体包括&#xff1a;两点之间帧同步、…

key value vue 输出_Vue2.0 v-for 中 :key 到底有什么用?

v-for中不加:key貌似也能正常显示&#xff0c;那为什么要加:key呢&#xff1f;我们知道vue可以动态的改变页面的结构&#xff0c;比如在一个div里面插入一个span标签&#xff0c;看似简单的操作&#xff0c;底层还是很复杂的&#xff0c;它是如何实现的呢&#xff1f;因为页面的…

计算机网络项目——最小网元设计(阶段三)

目录阶段目标设计描述1、帧结构2、按目的转发3、反向地址学习4、未知广播测试情况其他想说的话阶段目标 本阶段主要完成链路层交换机的功能实现&#xff1a;单播目的地址判收、支持广播、有端口地址表、反向地址学习&#xff0c;并在含交换机的多网元情况下完成测试。 设计描…