转自: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. 《Linux内核设计与实现》学习总结 Chap18

    一.准备开始 1.一个确定的bug,但大部分bug通常都不是行为可靠且定义明确的. 2.一个藏匿bug的内核版本. 3.相关内核代码的知识和运气. 二.内核中的bug 1.bug的表象: 明白无误的错 ...

  2. bzoj 2839 : 集合计数 容斥原理

    因为要在n个里面选k个,所以我们先枚举选的是哪$k$个,方案数为$C_{n}^k$ 确定选哪k个之后就需要算出集合交集正为好这$k$个的方案数,考虑用容斥原理. 我们还剩下$n-k$个元素,交集至少为 ...

  3. Zabbix利用msmtp+mutt发送邮件报警

    操作系统:CentOS 7 Web环境:Nginx+MySQL+PHP zabbix版本:zabbix-2.4.8.tar.gz 邮件服务:msmtp-1.4.32.tar.bz2     #http ...

  4. ribbion的负载均衡之端口的切换

    可以说在这里被坑了很久,终于今天在大神的指导下,成功实现了负载均衡,切换不同的端口,这里来记录下,首先来看下效果图吧: 到底是怎么实现的呢?到底是如何切换的呢? 具体来讲: 几个步骤,启动服务注册中心 ...

  5. sort 与 sorted 区别

    sort 与 sorted 区别: sort 只是应用在 list 上的方法,(就地排序无返回值). sorted 是内建函数,可对所有可迭代的对象进行排序操作,(返回新的list). 语法 sort ...

  6. Python 字符串前面加u,r,b的含义

    1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时 ...

  7. Linux /etc/issue 和 /etc/issue.net的作用和区别

    1./etc/motd /etc/motd即messageoftoday(布告栏信息),每次用户登录时,/etc/motd文件的内容会显示在用户的终端.系统管理员可以在文件中编辑系统活动消息,例如:管 ...

  8. Kubernetes 1.5集成heapster

    Heapster是kubernetes集群监控工具.在1.2的时候,kubernetes的监控需要在node节点上运行cAdvisor作为agent收集本机和容器的资源数据,包括cpu.内存.网络.文 ...

  9. [应用篇]第三篇 JSP 标准标签库(JSTL)总结

    有一种友谊叫做: "陪我去小卖部." "不去," "我请你" "走." 你想起了谁:胖先生?还有人陪你吗? JSP 标准 ...

  10. git爬坑不完全指北(一):Permission to xxx.git denied to user的解决方案

    由于对之前github账户名不太满意,又不像大神一样需要两个账号绑定.所以今天注册了新账号,想把电脑绑定到新账号上,结果就踩坑了……报错如标题. 在网上按照这个题目可以搜索出一大堆的解决方案,但都是一 ...