Linux编程 23 shell编程(结构化条件判断 命令if -then , if-then ... elif-then ...else,if test)...

一.概述

  在上一篇里讲到了shell脚本,shell按照命令在脚本中出现的顺序依次进行处理,对于顺序操作已经足够了,但许多程序要求对shell脚本中的命令加入一些逻辑流程控制,这样的命令通常叫做 结构化命令。

  1.1 使用if - then语句

--最基本的结构化就是if -then语句,格式如下:if commandthencommandsfi

  在其他编程语言中,if是一个等式,值结果为ture或false,但在bash shell的if语句并不是这样。在bash shell的if语句会运行if后面的那个命令,如果该命令的退出状态码是0,位于then部分的命令就会被执行。反之则不执行,继续执行脚本中的下一个命令。 fi 语句用来表示if -then语句到此结束。下面是一个if -then简单例子如下:
    
  上面脚本在if行采用了pwd命令,命令成功结束,echo语句显示了文本字符串。

  使用if 执行多个命令时,bash shell会将这些命令当成一个块,如果if语句行的命令退出状态值为0, 所有命令都会被执行,如果if语句行的命令的退出状态不为0,所有的命令都会被跳过。下面一个案例if 涉及到了两个命令一个是grep $testuser,  另一个是显示路径/etc/passwd。上图示例中mysql用户存在,报以退出状态码是0。并显示了echo信息。

    
  下面演示如果testuser变量设置成一个系统上不存在的用户,状态码则不是返回0,不进入if then 中,什么都不会显示。
    

  1.2  if-then-else语句

  如果if 执行命令返回一个非零退出状态码,bash shell 会继续执行脚本中的下一条命令,这时else语句提供了作用,格式如下:

-- if -then -else格式:
if commandthencommandselsecommandsfi

  下面示例,在原有脚本上加入else语句块,最后显示了else中的信息。

    

  1.3 嵌套if

  嵌套的if -then 语句位于主if -then-else语句的else代码块中。如下所示在else 语句块中再嵌入if-then-else

    

   对于else部分的另一种形式是: elif, 这样就不用再写多个if-then语句了,elif是另一个if-then语句延续else部分, 这种比上面的if嵌套可读性强, 同样把上面的脚本改一下,示例如下,if 命令退出状态码不为0,进入到elif语句块中。
    
   对于elif后面还可以加else语句块 ,当elif命令返回也不为0时,进入最后的else语句块,如下图所示:

    
  对于 elif语句 还可以是多个串起来。这里就不再演示, 语法如下:

if command1
thencommand set 1
elif command2
then...
elif command3
then...
else...
fi

  对于上面的if结构化语句,归纳起来如下面四种格式, 类似于其它编辑语言的if ..else 或if  ..else if.. else。

if-then 
if-then   else 
if-then   elif-then  else 
if-then   elif-then   elif-then     else

  1.4  结构化test命令

  上面的if 命令只能测试普通的shell命令的状态码,下面介绍test命令,它能测试不同条件, 条件成立同样是退出状态码为0, 如果条件不成立测返回非0状态码。

-- test命令格式如下
if test  condition
thencommands
fi

  下面是使用test命令确定变量中是否有内容,下面的testuser变量值为mysql,  因此test命令返回状态码为0,进入了then语句块中。示例如下:
    
  下面演示变量没有值的情况下,test命令返回状态码不为0,进入了else语句块中。
    

  在bash shell中提供了另一种条件测试方法,无需在if -then语句中声明test命令,使用[condition] 这种应该是日常使用比较频繁的。 这种代替test的用法在下一篇中在详细解说。

--格式如下:
if  [condition]
then commands
fi

 

转载于:https://www.cnblogs.com/MrHSR/p/9777246.html

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

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

相关文章

Scala-Spark digamma stackoverflow问题

这两天在用spark做点击率的贝叶斯平滑,参考雅虎的论文进行了一番尝试。 先上代码: 1 # click_count, show_count # this method takes time2 def do_smooth(data_list):3 import scipy.special as sp4 a, b, i 1.0, 1.0, 05 da, db a, b6 …

IIS接口详细介绍

1. 概述 I2S Inter-IC Sound Integrated Interchip Sound IIS,是飞利浦在1986年定义(1996年修订)的数字音频传输标准,用于数字音频数据在系统内器件之间传输,例如编解码器CODEC、DSP、数字输入/输出接口、ADC、DAC…

UVA - 10934 Dropping water balloons(装满水的气球)(dp)

题意:有k个气球,n层楼,求出至少需要多少次实验能确定气球的硬度。气球不会被实验所“磨损”。 分析: 1、dp[i][j]表示第i个气球,测试j次所能确定的最高楼层。 2、假设第i-1个气球测试j-1次所确定的最高楼层是a, 若第i个…

继承进阶

先讲一个例子&#xff1a; #老师有生日&#xff0c;怎么组合哪&#xff1f; class Birthday: # 生日def __init__(self,year,month,day):self.year yearself.month monthself.day dayclass Teacher: # 老师<br>def __init__(self,name,birth):self.name nameself.b…

PCM接口详细介绍--TDM方式

1. 概述 PCM = Pulse Code Modulation 是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法。图为4 bit 采样深度的PCM数据量化示意图: PCM数字音频接口,说明接口传输的音频数据是通过PCM方式采样得到的,区别于PDM形式;IIS传输的也是PCM类型数据,属于其一个特…

网站同源策略

所谓"同源"指的是"三个相同"&#xff1a;协议&#xff0c;域名&#xff0c;端口。 举例来说&#xff0c;http://www.example.com/dir/page.html这个网址&#xff0c;协议是http://&#xff0c;域名是www.example.com&#xff0c;端口是80&#xff08;默认端…

Kconfig文件结构(图文)简介

1 Kconfig和Makefile 毫不夸张地说&#xff0c;Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。基本上&#xff0c;Linux 内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件。Kconfig和Makefile就好似一个城市的地图&#xff0c;地图引导我们去 认识一…

PDM接口介绍

1. 概述 PDM Pulse Density Modulation是一种用数字信号表示模拟信号的调制方法。 PDM则使用远高于PCM采样率的时钟采样调制模拟分量&#xff0c;只有1位输出&#xff0c;要么为0&#xff0c;要么为1。因此通过PDM方式表示的数字音频也被称为Oversampled 1-bit Audio。相比P…

js正则学习分享

http://www.cnblogs.com/rubylouvre/archive/2010/03/09/1681222.htmlhttp://www.cnblogs.com/tylerdonet/p/4262251.html //正整数 /^[0-9]*[1-9][0-9]*$/; //负整数 /^-[0-9]*[1-9][0-9]*$/; //正浮点数 /^(([0-9]\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9])|([0-9]*[1…

Linux系统下UDP发送和接收广播消息小例子

分类&#xff1a; 网络通信 2013-01-07 10:54 1336人阅读 评论(6) 收藏 举报 [cpp] view plaincopyprint?// 发送端 #include <iostream> #include <stdio.h> #include <sys/socket.h> #include <unistd.h> #include <sys/types.h>…

Kaggle 泰坦尼克

入门kaggle&#xff0c;开始机器学习应用之旅。 参看一些入门的博客&#xff0c;感觉pandas&#xff0c;sklearn需要熟练掌握&#xff0c;同时也学到了一些很有用的tricks&#xff0c;包括数据分析和机器学习的知识点。下面记录一些有趣的数据分析方法和一个自己撸的小程序。 1…

语音交互设备 前端信号处理技术和语音交互过程介绍

一、前端信号处理 1. 语音检测&#xff08;VAD&#xff09; 语音检测&#xff08;英文一般称为 Voice Activity Detection&#xff0c;VAD&#xff09;的目标是&#xff0c;准确的检测出音频信号的语音段起始位置&#xff0c;从而分离出语音段和非语音段&#xff08;静音或噪…

css中伪类与伪元素的区别

一&#xff1a;伪类&#xff1a;1:定义&#xff1a;css伪类用于向某些选择器添加特殊效果。 伪类其实与普通的css类相类似&#xff0c;可以为已有的元素添加样式&#xff0c;但是他只有处于dom无法描述的状态下才能为文档树中的元素添加样式&#xff0c;所以将其称为伪类。 2:伪…

【BZOJ1500】[NOI2005]维修数列 Splay

【BZOJ1500】[NOI2005]维修数列 Description Input 输入的第1 行包含两个数N 和M(M ≤20 000)&#xff0c;N 表示初始时数列中数的个数&#xff0c;M表示要进行的操作数目。第2行包含N个数字&#xff0c;描述初始时的数列。以下M行&#xff0c;每行一条命令&#xff0c;格式参见…

bzoj2588: Spoj 10628. Count on a tree(树上第k大)(主席树)

每个节点继承父节点的树&#xff0c;则答案为query(root[x]root[y]-root[lca(x,y)]-root[fa[lca(x,y)]]) #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm> using namespace std; const int maxn1…

图文详解YUV420数据格式

YUV格式有两大类&#xff1a;planar和packed。 对于planar的YUV格式&#xff0c;先连续存储所有像素点的Y&#xff0c;紧接着存储所有像素点的U&#xff0c;随后是所有像素点的V。 对于packed的YUV格式&#xff0c;每个像素点的Y,U,V是连续交*存储的。 YUV&#xff0c;分为三个…

USB通信接口介绍

1. 概述 Usb Universal Serial Bus全称通用串行总线&#xff0c;是一种支持热插拔的高速串行传输总线&#xff0c;使用差分信号来传输数据。 USB设备可以直接和host通信&#xff0c;或者通过hub和host通信。一个USB系统中仅有一个USB主机&#xff0c;设备包括功能设备和hub&…

关于java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行&#xff0c;处理后输出&#xff0c;如果用以下方法…

HDCVI——一种创新性的高清视频传输方案

什么是HDCVI 2012年11月&#xff0c;大华技术股份有限公司发布了具有自主知识产权的同轴高清传输接口技术HDCVI。HDCVI技术是一种基于已有SYV75-3或SYV75-5同轴电缆的高清视频传输方法&#xff0c;能够在低成本和较低质量的同轴电缆上实现超长距离高清视频信号的可靠传输。相比…

typedef struct 用法

如果在c程序中我们写&#xff1a;    typedef struct     {    int num;    int age;    }aaa,bbb,ccc;    这算什么呢&#xff1f;    我个人观察编译器&#xff08;VC6&#xff09;的理解&#xff0c;这相当于    typedef struct     …