11.1 使用if-then语句

  • 格式如下

    • if语句会执行if行定义的那个命令,如果该命令的退出状态码是0,则then部分的语句就会执行,其他值,则不会
 
1
2
3
4
if command
then    
    commands
fi
  • 在要执行的命令结尾加个分号,就能在同一行使用then语句了,格式如下
 
1
2
3
if command; then
    commands
fi

11.2 if-then-else语句

  • 格式如下;
 
1
2
3
4
5
6
if command
then
    commands
else
    commands
fi

11.3 嵌套if

  • 格式如下:
 
1
2
3
4
5
6
7
if command1
then
    commands
elif command2
then
    more commands
fi

11.4 test命令

  • 格式如下
 
1
test condition
  • test用在if-then语句中
 
1
2
3
4
if test condition
then
    commands
fi
  • bash shell提供了另一个在if-then语句中声明的test命令的方法

    • 方括号定义了test命令中用到的条件,注意方括号左右有一个空格
 
1
2
3
4
if [ condition ]
then
    commands
fi
  • test命令可以判断3类条件:

    • 数值比较
    • 字符串比较
    • 文件比较

11.4.1 数值比较

  • test命令数值比较功能:
比较 说明
n1-eq n2 检查n1是否与n2相等
n1-ge n2 检查n1是否大于或等于n2
n1-gt n2 检查n1是否大于n2
n1-le n2 检查n1是否小于或等于n2
n1-lt n2 检查n1是否小于n2
n1-ne n2 检查n1是否不等于n2

– 数值条件测试可以用在数值和变量上

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
val1=10
val2=11
 
if [ $val1 -gt 5 ]
then
    echo ...
fi
 
if [ $val1 -eq $val2 ]
then
    echo ...
else
    echo ...
fi
...
  • test命令无法处理变量中存储的浮点值,其处理的数仅有整数,当使用bc计数器时,可以让shell将浮点值作为字符串存储进一个变量
 
1
2
3
4
5
6
7
8
...
val1=`echo "scale = 4; 10 / 3" | bc`
 
if[ $val1 -gt 3 ]//运行脚本时会报错
then
    echo ...
fi
...

11.4.2 字符串比较

  • test命令的字符串比较功能
比较 描述
str1 = str2 检查str1是否和str2相同
str1 = str2 检查str1是否和str2不同
str1 = str2 检查str1是否比str2小
str1 = str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0

– 比较字符串相等性:会将所有的标点和大写也考虑在内
– 字符串顺序注意事项:
– 大于小于符号必须转义,否则shell会把他们当做重定向符号而把字符串当做文件名
– 大于小于顺序和sort命令所采用的不同
– 在test命令中大写字母会被当成小于小写字母
– test命令使用标准的ASCII顺序,根据每个字符的ASCII数值来决定排序顺序
– 当将同样的字符串放进文件中并用sort命令排序时,小写字母会先出现
– sort命令使用系统的本地化语言设置中定义的排序顺

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$cat test
#!/bin/bash
val1=baseball
val2=hockey
 
if [ $val1 \> $val2 ]
then
    echo "$val1 is greater than $val2"
else
    echo "$val1 is less than $val2"
fi
$
$./test
baseball is less than hockey
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$cat test
#!/bin/bash
val1=Testing
val2=testing
 
if [ $val1 \> $val2 ]
then
    echo "$val1 is greater than $val2"
else
    echo "$val1 is less than $val2"
fi
$
$./test
Testing is less than testing
$sort testfile
testing
Testing
$
  • 字符串大小

    • -n和-z参数:检查一个变量是否含有数据
 
1
2
3
4
5
6
7
8
9
10
11
val1=testing
val2=' '
 
if [ -n "$val1" ] //检查val1变量是否长度非零
then
    ...
if [ -z "$val2" ] //检查val2变量是否长度为零
then
...
if [ -z "$val3" ] //检查val1变量是否长度非零,这个变量并未在shell脚本中定义过,所以说明字符串长度仍然为零
then

11.4.3 文件比较

  • test命令的文件比较功能
比较 描述
-d file 检查file是否存在并是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并是一个文件
-r file 检查file是否存在并可读
-s file 检查file是否存在并非空
-w file 检查file是否存在并可写
-x file 检查file是否存在并可执行
-o file 检查file是否存在并属当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file是否比file2新
file1 -ot file2 检查file是否比file2旧

11.5 复合条件测试

  • fi-then语句允许使用布尔逻辑来组合测试

    • [ condition1 ] && [ condition2 ]
    • [ condition1 ] || [ condition2 ]

11.6 if-then的高级特性

  • 用于数学表达式的双尖括号
  • 用于高级字符串处理功能的双方括号

11.6.1 使用双尖括号

  • 双脚括号允许将高级数学表达式放入比较中
  • 格式:(( expression ))
    • expression:可以是任意的数学赋值或比较表达式
    • 如下常用的表达式
符号 描述
val++ 后增
val– 后减
++val 先增
–val 先减
** 幂运算
<< 左位移
& 位布尔和
&& 逻辑和
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$cat test
#!/bin/bash
 
val1=10
 
if (( $val1 ** 2 > 90 )) //大于号无需转义
then
    (( val2 = $val1 ** 2 ))
    echo "The square of $val1 is $val2"
fi
$
$./test
The square of 10 is 100
$

11.6.2 使用双方括号

  • 双方括号命令提供了针对字符串的高级特性
  • 格式:[[ expression ]]
    • expression:使用了test命令中采用的标准字符串进行比较
    • 它提供了test命令为提供的另一个特性——模式匹配
      • 模式匹配中,可以定义一个规则表达式来匹配字符串
 
1
2
3
4
5
6
7
8
9
10
11
12
13
$cat test
#!/bin/bash
 
if [[ $USER == r* ]]
then
    echo "Hello $USER"
else
    echo "Sorry, I do not know you"
fi
$
$./test
Hello rich
$

11.7 case命令

  • 格式如下

    • case命令会将指定的变量同不同模式进行比较,匹配则shell会执行该模式指定的命令
    • 可以通过竖线操作符来分隔模式,在一行输出多个模式
    • 星号会补货所有跟所有列出的模式都不匹配的值
 
 
 
 
 

Java

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//格式:
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
 
//例程:
$ cat test
#!/bin/bash
 
case $USER in
rich | barbara)
    echo "Welcome, $USER"
    echo "Please enjoy your visit";;
testing)
    echo "Special testing account";;
jessica)
    echo "Do not forget to log off when you're done";;
*)
    echo "Sorry, you are not allowed here";;
esac
$
$./test
Welcome, rich
Please enjoy your visit
$

shell脚本编程-使用结构化命令(if/else)(转)的更多相关文章

  1. bash&nbsp;shell笔记3&nbsp;结构化命令二

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/513601 三 ...

  2. bash&nbsp;shell笔记2&nbsp;结构化命令

    二.使用结构化命令 知识内容: # 改变命令流 # 使用if-then逻辑 # 嵌套if-then # 测试条件 # 高级if-then功能 许多程序在脚本命令之间需要某些逻辑控制流,有些命令允许脚本 ...

  3. Linux-Shell脚本编程-学习-5-Shell编程-使用结构化命令-if-then-else-elif

    if-then语句 if-then语句格式如下 if comman then command fi bash shell中的if语句可鞥会和我们接触的其他if语句的工作方式不同,bash shell的 ...

  4. Linux Shell脚本编程--curl命令详解

    用途说明 curl命令是一个功能强大的网络工具,它能够通过http.ftp等方式下载文件,也能够上传文件.其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息.类 ...

  5. Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程

    这一片主要说test文件的比较,文件比较在日常使用的频率比较高,这里重点把每个部分都试着说说看 1. 检车目录 -d -d测试会检查指定的文件名是否在系统上以目录的形式存在,当我们要写文件到某个目录之 ...

  6. Linux Shell脚本编程--cut命令

    cut cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符 [root@www ...

  7. Linux Shell脚本编程--nc命令使用详解

    linux nc命令使用详解     功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>] ...

  8. Linux Shell脚本编程--sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  9. (转)Shell脚本编程--Uniq命令

    uniq 原文:http://blog.csdn.net/xifeijian/article/details/9209627 uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用 ...

随机推荐

  1. [zt]给你的Mp4大换血,精选Touch里3年收集的900多首歌,"经典不忍去的""最新近流行的",与你共享~~

    如果你是音乐爱好者: 这些歌, 请戴上耳机, 调大音量, 一个人听 ,全世界 都是你的!!!!! (一)这些歌很温暖,没有金属味,适合有阳光的午后,很悠闲... [Anaesthesia]Maximi ...

  2. Use auto keyword in C++11

    Now compile your program with g++ -std=c++ your_file.cpp -o main

  3. thrift

    环境准备: 1.下载window版本的thrift编译器 2.下载idea的thirft插件 3.设置thrift编译工具为:步骤1下载的编译器 4.编写thrift文件 namespace java ...

  4. Mybatis resultMap空值映射问题解决

    Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age,数据库中的 ...

  5. DWZ的选择带回功能无法带回第一个value中的值

    <volist name="node1._child" id="node2"> 这里的value中第一个id是无法带回给上一个页面的..如果要带回则 ...

  6. Unix时间戳(Unix timestamp)转换工具

    http://tool.chinaz.com/Tools/unixtime.aspx 现在的Unix时间戳(Unix timestamp)是   1440732364         Unix时间戳( ...

  7. VS编程中找不到Microsoft.Office.Core、Microsoft.Office.Interop.Word和VBIDE

    在使用vs2005. vs2008. vs2010 制作包含 word等office的应用程序时,有时找不到对Microsoft.Office.Core. Microsoft.Office.Inter ...

  8. Pentium II paging mechanism

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION To understand the str ...

  9. 设置session失效时间

    以X5部署在Tomcat上为例,说明如何设置session失效时间. 可以设置session失效时间的地点有三处,分别是 1.BusinessServer的session设置 \runtime\Bus ...

  10. java类加载过程

    类(型)的生命周期--装载.连接.初始化.卸载 Java虚拟机通过装载.连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用. 1.       装载 装载阶段包括三个基本动作: ...