转自:http://lovelace.blog.51cto.com/1028430/1211353

bash中如何实现条件判断?
条件测试类型
    整数测试
    字符测试
    文件测试

一、条件测试的表达式:
    [ expression ]  括号两端必须要有空格
    [[ expression ]] 括号两端必须要有空格
    test expression
组合测试条件

  • -a: and
  • -o: or
  • !:  非

二、整数比较:

  • -eq 测试两个整数是否相等
  • -ne 测试两个整数是否不等
  • -gt 测试一个数是否大于另一个数
  • -lt 测试一个数是否小于另一个数
  • -ge 大于或等于
  • -le 小于或等于

命令间的逻辑关系

  • 逻辑与:&&

第一个条件为假 第二个条件不用在判断,最总结果已经有
        第一个条件为真,第二个条件必须得判断

  • 逻辑或:||

三、字符串比较

  • == 等于  两边要有空格
  • != 不等
  • >  大于
  • <  小于

四、文件测试

  • -z string 测试指定字符是否为空,空着真,非空为假
  • -n string 测试指定字符串是否为不空,空为假 非空为真
  • -e FILE 测试文件是否存在
  • -f file 测试文件是否为普通文件
  • -d file 测试指定路径是否为目录
  • -r file 测试文件对当前用户是否可读
  • -w file 测试文件对当前用户是否可写
  • -x file 测试文件对当前用户是都可执行
  • -z  是否为空  为空则为真
  • -a  是否不空

五、if语法

if 判断条件 0为真 其他都为假

  • .单分支if语句
if 判断条件;then
statement1
statement2
.......
fi
  • .双分支的if语句:
if 判断条件;then
statement1
statement2
.....
else
statement3
statement4
fi

Note:
if语句进行判断是否为空
 [ "$name” = "" ] 
等同于

[ ! "$name" ]
[ -z "$name" ]    

Note:
使用if语句的时候进行判断如果是进行数值类的判断,建议使用let(())进行判断,对于字符串使用test[ ] or [[ ]] 进行判断
(())中变量是可以不使用$来引用的

example:表述数字范围的时候 可以使用if可以是使用case

if [ $x -gt  -o $x -lt  ]
case $x in
)
[-]) 

这个语句的意思是如果$name为空,那么X=X成立折执行下面的结果;

if [ "X$name" != "x" ]

写脚本的时候很多时候需要用到回传命令,$?如果上一个命令执行成功,回传值为0,否则为1~255之间的任何一个

  • 0为真
  • 非0为假

条件测试的写法

1、执行一个命令的结果
 if grep -q "rm" fs.sh;then

2、传回一个命令执行结果的相反值
 if !grep -q "rm" fs.sh;then

3、使用复合命令((算式))
 if ((a>b));then

4、使用bash关键字 [[判断式]]
 if [[ str > xyz ]];then

5、使用内置命令:test 判断式
 if test "str" \> "xyz";then

6、使用内置命令:[判断式]  类似test
 if [ "str" \> "xyz" ];then

7、使用-a -o进行逻辑组合
 [ -r filename -a -x filename ]

8、命令&&命令
 if grep -q "rm" fn.sh && [ $a -lt ];then

9、命令||命令
 if grep -q "rm" fn.sh || [ $a -lt ];then

示例脚本(

写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分

成绩(A-F)。

A: 90–100

B: 80–89

C: 70–79

D: 60–69

F: <60

#/bin/bash
#Verson:0.1
#Auther:lovelace
#Pragram:This pragram is calculation your grade
#import an argument
read -p "Please input your grade:" x
declare -i x
#jugemet $x value is none or not
if [ "$x" == "" ];then
echo "You don't input your grade...."
exit
fi
#jugement the gread level
if [[ "$x" -ge "" && "$x" -le "" ]];then
echo "Congratulation,Your grade is A."
elif [[ "$x" -ge "" && "$x" -le "" ]];then
echo "Good,Your grade is B."
elif [[ "$x" -ge "" && "$x" -le "" ]];then
echo "Ok.Your grade is C."
elif [[ "$x" -ge "" && "$x" -le "" ]];then
echo "Yeah,Your grade is D."
elif [[ "$x" -lt "" ]];then
echo "Right,Your grade is F."
else
echo "Unknow argument...."
fi

执行结果:

[root@lovelace if]# ./grade.sh
Please input your grade:
You don't input your grade....
[root@lovelace if]# ./grade.sh
Please input your grade:
Right,Your grade is F.
[root@lovelace if]# ./grade.sh
Please input your grade:
Good,Your grade is B.

总结:条件判断在shell语句中经常用到,需要熟练掌握,在此基础上才能练就一手很好的脚本编写能力。祝各位每天都能获得很大的进步.....

[shell]shell中if语句的使用的更多相关文章

  1. Shell脚本中循环语句for,while,until用法

    循环语句: Bash Shell中主要提供了三种循环方式:for.while和until. 一.for循环 for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区 ...

  2. Shell脚本中执行sql语句操作mysql

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  3. (二)shell中case语句、程序传参、while

    2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...

  4. linux bash shell中case语句的实例

    本文介绍下,在bash shell编程中,有关case语句的一个例子,学习下case语句的用法,有需要的朋友参考下. 本文转自:http://www.jbxue.com/article/13377.h ...

  5. shell编程中的if语句

    if语句在任何编程中都是必不可少.至关重要的分支语句,shell也是如此,只不过各种编程中的方式和格式有点不太一样 shell编程中的if语句基本格式如下: if [ X$1 = XA ];then ...

  6. shell编程中如何执行oracle语句

    shell编程中如果向oracle中插入数据之类的,需要先把执行语句放到文件中,然后再@这个文件执行 有如下俩种方式供参考: SQL=`sqlplus user/pwd@orains << ...

  7. Shell脚本中执行sql语句操作mysql的5种方法【转】

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  8. SHELL脚本中执行SQL语句操作MYSQL的5种方法

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  9. shell脚本中的case条件语句介绍和使用案例

    #前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句.case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,ca ...

  10. shell脚本中select循环语句用法

    shell脚本中select循环语句 1. 脚本中select的语法格式 select VAR in LIST do command1 command2 ... ... commandN done s ...

随机推荐

  1. 1.Qt简介

    附件列表 1.Qt简介.png

  2. md5sum/opensll md5

    http://m.blog.csdn.net/article/details?id=42041329 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Mess ...

  3. hdu 3068

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. windows配置Python多版本共存

    windows配置Python多版本共存 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近Python开发蛮火的,三年前我的一个运维朋友就告诉我说Python语言将来会很火,当时 ...

  5. 快速搭建Spring Boot项目

    Spring boot是Spring推出的一个轻量化web框架,主要解决了Spring对于小型项目饱受诟病的配置和开发速度问题. Spring Boot 包含的特性如下: 创建可以独立运行的 Spri ...

  6. vue组件间的通信

    组件的定义: 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能.v ...

  7. WebStorm 使用webpack打包(build) Vue 静态资源无法访问(路径不对)问题

    在WebStorm中使用webpack打包 (命令npm run build) 后生成在项目的dist目录下,在浏览器打开,静态资源js.css等无法加载.因为打包时,资源使用了绝对路径. 解决: 打 ...

  8. Docker删除镜像报错

    问题描述: 笔者意图删除nginx-file的镜像文件,但通过命令删除镜像时出现报错信息,提示存在多个引用(即一个IMAGE可被多个REPOSITORY引用,故删除会出现失败),如下: [root@k ...

  9. Spring容器事件、自定义事件

    Spring容器内置事件,如容器的启动.停止.关闭.销毁等事件 <bean name="contextStartedHandler" class="com.nuts ...

  10. Ex1—vlookup

    VLOOKUP 的语法结构 整个计算机就相当于一门语言,首先我们就是要获取该函数的语法结构.以下是官网的语法结构 VLOOKUP(lookup_value, table_array, col_inde ...