if-then语句

if-then语句格式如下

if comman
then
command
fi

bash shell中的if语句可鞥会和我们接触的其他if语句的工作方式不同,bash shell的if语句会运行if语句后面的那个命令,如果该命令的退出状态码是0 那么执行位于then部分的的命令。

代码实例

#!/bin/bash

#if-then test

if date
then
echo "this is the if-then test"
fi

这个脚本的功能就是,执行date命令,如果date命令执行成功,那么他的退出状态码是0就执行then后面的代码,在屏幕上面输一行文字,this is the if-then test

then后面的语句可以是一条或多条,和我们写简单的shell脚本没有区别,这里会一条一条的执行下去

测试实例代码

#if-then test

if date
then
echo "this is the if-then test"
testusername=dreamlife
if grep $testusername /etc/passwd
then
            echo "the bash file for user $testusername art:"
ls -a /home/$testusername/.b*
fi
fi

如果我们想要在shell和我们平常一样使用if else的功能,我们需要使用一下命令格式

if command
then
command
else
command

这里,如果 执行if后面的命令的退出状态码是0 就执行then后面的代码块,否则就执行else后面的代码块

测试代码

#!/bin/bash

#if-then-else

testuser=dreamlife
if grep $testuser /etc/passwd
then
echo 'the files for user $testuser are:'
ls -a /home/$testuser/ *
else
echo "the user name $testuser dose not exist on this system"
fi

在shell编程中,也是有if嵌套的,使用格式如下

if command1
then
command1-set
elif command2
then
command-set2
elif command3
then
command3-set ... fi

这个就没有实例代码了,如果有兴趣的,可以吧上面的代码改吧改吧试试看,每次只能测试一种。

好了,学习下一个命令,test

test是个好东西,他的功能之一就是可以是我们shell的if可以比较真假的,test的基本命令格式很简单

test condition

condition是test命令要测试的一系列参数和值,当用在if-then语句的时候,test命令执行,如果tets命令中列出的条件为真的时候,退出状态码为0 否则为1,这样就可以在if-then中使用了

就是下面的格式了

if test condition
then
commands
fi

不过每次这么写也挺别扭的。所以,在bash中,提供了另外一种tets的写法,那就是方括号[]

不过必须要在左方括号右面,右方括号左面各加一个空格才可以,不然报错

if [ condition ]
then
commands
fi

test命令可以判断三种类型条件

1. 数值比较

2. 字符串比较

3. 文件比较

第一类,test数值比较的基本功能

1. 检查n1是否与n2相等:n1 -eq n2

2. 检查n1是否大于或等于n2:n1 -ge n2

3. 检查n1是否大于n2:n1 -gt n2

4. 检查n1是否小于或等于n2:n1 -le n2

5. 检查n1是否小于n2:n1 -lt n2

6.检查n1是否不等于n2:n1 -ne n2

测试用例

#!/bin/bash

#using numeric test comparisons

var1=10
var2=11 if [ $var1 -gt 5 ]
then
echo "the test value $var1 ia greater than 5"
fi if [ $var1 -eq $var2 ]
then
echo "the values are equal"
else
echo "the calues are different"
fi

这里注意的是,浮点数不能比较。下面是错误例子

#!/bin/bash

#testing floating point numbers

val1=`echo "scale=4;10/3" | bc`
echo "the test values is $val1"
if [ $val1 -gt 3 ]
then
echo "the result if larger than 3"
fi

这里bash提示需要整数表达式

第二类 字符串的比较

1. 检查str1是否和str2相同:str1 = str2

2. 检查str1是否和str2不同:str1 != str2

3. 检查str1是否比str2小:str1 <str2

4. 检查str1是否比str2大:str1 >str2

5. 检查str1的长度是否为非零:-n str1

6. 检查str1的长度是否为0:-z str1

下面是实例代码

#!/bin/bash

#testing string equality

testuser=dreamlife

if [ $USER = $testuser ]
then
echo "Welcom $testuser"
fi
#!/bin/bash

#testing string equality

testuser=dreamlife

if [ $USER != $testuser ]
then
echo "this user is not $testuser"
else
echo "Welcom $testuser"
fi

在字符串比较的时候,需要注意两个问题,

1. 大于小于符号必须使用转义,否则shell会把他们当做重定向符号而把字符串当做文件名

2. 大于小于顺序和sort命令所采用不同

第一个问题

#!/bin/bash

#mis-using string comparisons

val1=baseball
val2=hockey if [ $val1 \> $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

第二个儿问题

#!/bin/bash

#testing string sort order

val1=testing
val2=Testing if [ $val1 \> $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

字符串大小

#!/bin/bash

#testing string length

val1=testing
val2='' if [ -n "$val1" ]
then
echo "the string '$val1' is not empty"
else
echo "the string '$val1' is empty"
fi if [ -z "$val2" ]
then
echo "the string '$val2' is empty"
else
echo "the string '$val2' is not empty"
fi

后面还有文件的比较,由于文件比较内容比较多,我会在写一个。

Linux-Shell脚本编程-学习-5-Shell编程-使用结构化命令-if-then-else-elif的更多相关文章

  1. 《Linux命令行与shell脚本编程大全》第十二章 使用结构化命令

    许多程序要就对shell脚本中的命令施加一些逻辑控制流程. 结构化命令允许你改变程序执行的顺序.不一定是依次进行的 12.1 使用if-then语句 如下格式: if command then     ...

  2. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  3. Linux&nbsp;shell脚本全面学习

    Linux shell脚本全面学习 1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它 ...

  4. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  5. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  6. Shell脚本基础学习

    Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...

  7. Shell脚本的学习(二)

    Shell脚本的学习(二) 方法: 1) 一个计算器: 2)递归实现打印目录    3)方法调用

  8. Shell脚本的学习(一)

    Shell脚本的学习(一) 一)代码式shell脚本简介 1.下载 Xshell 5 建一个文件夹 mkdri home/data ; 1)查看一个在data里建一个1.sh 查看是否建立成功. 2) ...

  9. linux shell脚本使用结构化命令

    内容: 一.if-then命令 二.if-then-else命令 三.test命令 四.case命令 1.if-then结构化命令中最基本的类型,其格式如下: if command then comm ...

  10. [转]Windows网络编程学习-面向连接的编程方式

    直接附上原文链接:windows 网络编程学习-面向连接的编程方式

随机推荐

  1. 2017.9.12 初入HTML -----学习总结(二)

    接上:..... (4)标记可分为: 4.1单标记:(单标记仅单独使用就可以表达完整的意思) 基本语法:<标记名称/> 例如:<br/>实现换行的功能.<hr/>实 ...

  2. serlvet配置xml和@WebServlet

    简单介绍 XML元素不仅是大小写敏感的,而且它们还对出现在其他元素中的次序敏感.例如,XML头必须是文件中的第一项,DOCTYPE声明必须是第二项,而web-app元素必须是第三项.在web-app元 ...

  3. C#基础 一(方法详解)

    需要知道:类和方法的关系 方法和参数修饰符 自定义方法可以有或没有参数,也可以有或没有返回值.可以被各种关键字(static.virtual.public.new等)修饰以限制其行为. C#参数修饰符 ...

  4. Python基础—04-流程控制

    流程控制 循环结构(while) 格式 while 表达式: 语句块 执行流程:当程序执行到while语句时,首先判断表达式的真假.若表达式的值为真,则执行对应的语句块,之后返回while继续判断表达 ...

  5. Struts2后期(这框架目前正处于淘汰状态)

    Struts2第三天 课程回顾:Struts2框架的第二天 1. Servlet的API * ActionContext对象 * ServletActionContext对象 2. 结构类型的跳转 * ...

  6. span没有name属性

    <span id="test" name="测试数据">测试咯</span> 在eclipse中这么写发现会有警告提示.百度发现原来sp ...

  7. npm ERR! code ENOENT (未找到文件 error no entry)

    问题: ENOENT一般是没找到文件或路径,包括因为权限问题没找到的情况 解决: 我这个是 目录选择错了 其他:

  8. string类中字符的大小写转换

    今天做一道题,要用string类,涉及大小写转换,查看了C++文档,string类没有提供这样的方法,只好自己写. 之后是想到一个比较笨的方法,我把string当成一个容器,然后用迭代器一个一个来替换 ...

  9. 【PTA 天梯赛训练】电话聊天狂人(简单map)

    输入格式: 输入首先给出正整数N(≤10^5),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔. 输出格式: 在一行中给出 ...

  10. POJ2406 Power Strings(KMP)

    Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 56162   Accepted: 23370 Description Giv ...