1、使用if_then语句
if command

then

commands

fi

先运行if后面的命令,如果命令的退出状态是0(成功执行命令),就将执行then后面,fi前面的所有命令。否则就跳到fi后面继续执行。

2、if-then-else语句
if command

then

commands

else

commands

fi

3、嵌套if语句
if command1

then

commands

elif command2

then

commands

elif command3

then

commands

fi

4、test命令(方括号[   ]为同义词)
用于提供对条件的判断

if test condition   也可以不用test condition,而使用 [ conditon ]         ([ , ] 的前后必须有空格)

then

commands

fi

condition有三种:

(1)数值比较: –eq, –ne,              –ge,-gt,            -le, lt
       但是要注意:test命令无法处理存储在变量中的浮点值。

使用bash计算器bc时,只是欺骗了shell把浮点值作为字符串值存储于一个变量中。如果只是先使用echo语句显示结果,这种方法很好。但是在面向数值的函数(如数值测试条件)中不起作用。

底线是不能在test中使用非整数变量

(2)字符串比较:=,!=,<,>,-n(检测字符串长度是否大于0),-z(检测字符串长度是否等于0)
字符串相等:测试比较将所有标点符号和大写都考虑在内

字符串顺序:要注意两点:

1)’>’,’<’一定要用’\’转义,否则shell会将它们当做重定向符号,将字符串值看做文件名

2)大于和小于的顺序与在sort命令中的顺序不同。

在test中,同一个字母,大写字母>小写字母

在sort中,相反。

字符串大小:评估一个变量是否包含数据时,使用-n和-z比较方便

对空变量和未初始化的变量检测出的长度也为0

(3)文件比较
文件比较是shell脚本中最强大和最常用的一类比较。
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: 检查file1是否比file2新

file1 –ot file2: 检查file1是否比file2旧

5、复合条件查询
[ condition1 ] && [ condition2 ]

[ condition1 ] || [ condition2 ]

6、if-then的高级特征
(1)使用双圆括号表示数学表达式

(( expression ))

expression包括除了标准数学操作符外的其他操作符如下:

++, –, !, ~, **, <<, >>, &, |, &&, ||

(2)使用双方括号表示高级字符串处理函数

[[ expression ]]

提供了除test命令中的标志字符串比较以外的模式匹配功能

在模式匹配中,可以定义与字符串值相匹配的正则表达式

7、case 命令
可以使用case命令,而不是编写所有的elif语句来继续检查相同的变量值。

case命令以列表导向检查单个变量的多个值

case variable in

pattern1 | pattern2) commands1;;

pattern3) commands2;;

*) default commands;;

esac

shell_base的更多相关文章

随机推荐

  1. 趋势:flex和grid使布局更简单

    前言:记不久前面试的时候,面试官问我平时用什么布局方式,我非常耿直的说 div+css,利用position,float等布局,这就是非常传统的布局方式,通常都要写比较多的css代码:前几天在知乎上看 ...

  2. Date中before和after方法的使用

    Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false: Date1.before(Date2),当Date1小于Date2时,返回TRUE,当 ...

  3. ieda 快捷键修改方法

    框中意思为: 1.增加快捷键 2.增加缩写

  4. 批处理脚本+adb命令

    app的测试过程中,有一些重复性的繁琐工作,可以采用用批处理脚本+adb命令方式来代替 说明: (1)等待时间我用的ping命令替代的,比较简单直观 (2)我采取的是用坐标定位,后续会使用控件来定位 ...

  5. android -------- Hawk数据库

    Hawk 是一个非常便捷的数据库  . 操作数据库只需一行代码 , 能存任何数据类型 . github 地址: https://github.com/orhanobut/hawk 一.概念 Share ...

  6. OO-第一单元总结

    经过了前三次作业和两次实验的引导,我的编程思路在逐步从面向过程转向面向对象.也对面向对象有了初步的理解.虽然第一次实验由于自己没有及时完成导致没有提交过有些遗憾,但是第二次实验还是提交了几次的(虽然由 ...

  7. JS中for循环变量作用域

    http://www.cnblogs.com/zhus/p/6513741.html  博主写得很好

  8. SWUST OJ(1044)

    顺序栈基本操作的实现 #include <iostream> #include <cstdlib> using namespace std; typedef struct st ...

  9. Petrozavodsk Winter Camp, Day 8, 2014, Ship

    $dp(i,j)$表示i-j这段还没运走时的状态,包括 运输了多少次,还剩多少空间 每次枚举运输左边还是右边转移 #include <bits/stdc++.h> #define rep( ...

  10. FPM三:简单的SEARCH(OIF)

    这里是使用FPM Workbench自动生成的,没有去SE80创建WDA程序. 1.使用事务代码:FPM_WB.打开工作台. 2.点击Wizard for Creating Empty FPM App ...