涉及到比较和判断的时候,要注意

  1. 整数比较使用-lt,-gt,ge等比较运算符,详情参考:整数比较
  2. 文件测试使用 -d, -f, -x等运算发,详情参考:文件测试
  3. 逻辑判断使用    &&(且)、||(或)、!(取反)
  4. 字符串比较实用
  5. 字符串的比较使用以下三个比较运算符:= 或者(==)、!= 、> 、 <  、  
    1. -z表示后面的值是否为空,为空则返回true,否则返回false。
    2. -n表示判断后面的值是否为空,不为空则返回true,为空则返回false。

下面的一个例子:

#!/bin/bash
#文件名:test.sh read -p 'please input name:' name
read -p 'please input password:' pwd
if [ -z $name ] || [ -z $pwd ]
then
echo "hacker"
else
if [ $name == 'root' ] && [ $pwd == 'admin' ]
then
echo "welcome"
else
echo "hacker"
fi
fi

  运行测试:

ubuntu@ubuntu:~$ ./test.sh
please input name:root
please input password:admin
welcome
ubuntu@ubuntu:~$ ./test.sh
please input name:root
please input password:
hacker
ubuntu@ubuntu:~$ ./test.sh
please input name:root
please input password:beyond
hacker
ubuntu@ubuntu:~$

注意:  

  比较运算符的两边都有空格分隔,同时要注意比较运算符两边的变量是否可能为空,比如下面这个例子:

#!/bin/bash
#文件名:test.sh if [ $1 == 'hello' ];then
echo "yes"
elif [ $1 == 'no' ];then
echo "no"
fi

  运行:

ubuntu@ubuntu:~$ ./test.sh
./test.sh: line 4: [: ==: unary operator expected
./test.sh: line 7: [: ==: unary operator expected
ubuntu@ubuntu:~$ ./test.sh hello
yes
ubuntu@ubuntu:~$ ./test.sh no
no
ubuntu@ubuntu:~$ ./test.sh test
ubuntu@ubuntu:~$

  可以看到,在代码中想要判断shell命令的第二个参数是否为hello或者no,但是在测试的时候,如果没有第二个参数,那么就变成了 if [ == 'hello' ],这个命令肯定是错误的了,所以会报错,比较好的做法是在判断之前加一个判断变量是否为空  或者使用双引号将其括起来,注意,必须使用双引号,因为变量在双引号中才会被解析。

#!/bin/bash
#文件名:test.sh if [ "$1" == 'yes' ]; then
echo "yes"
elif [ "$1" == 'no' ]; then
echo "no"
else
echo "nothing"
fi

  运行:

ubuntu@ubuntu:~$ ./test.sh
nothing
ubuntu@ubuntu:~$ ./test.sh yes
yes
ubuntu@ubuntu:~$ ./test.sh no
no
ubuntu@ubuntu:~$ ./test.sh demo
nothing

  这样的话,就不会报错了。

  

shell脚本--逻辑判断与字符串比较的更多相关文章

  1. 学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  2. shell脚本中给字符串添加颜色

    shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 例如: ec ...

  3. Shell脚本中替换字符串等操作

    在做shell批处理程序时候,常常会涉及到字符串相关操作. 有非常多命令语句.如:awk,sed都能够做字符串各种操作. 事实上shell内置一系列操作符号.能够达到类似效果,大家知道,使用内部操作符 ...

  4. Shell脚本中计算字符串长度的5种方法

    有时在Linux操作系统中需要计算某个字符串的长度,通过查询资料整理了下目前Shell中获取字符串的长度的多种方法,在这里分享给大家,方法如下: 方法1: 使用wc -L命令wc -L可以获取到当前行 ...

  5. Shell脚本8种字符串截取方法总结

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 代码如下: echo ${va ...

  6. shell脚本批量处理字符串

    上周五运营那边给了一份手机号码的excle,要求查询出所有对应于用户编号的用户的信息.这个时候遇到了一个问题就是,需要查询的用户数量很多,不可能一个一个去查,而excle中的格式又不符合sqlquer ...

  7. shell脚本简单切割字符串

    我们有这样一个字符串: info='abcd;efgh' 现在想获取abcd和efgh,我们可以简单地用cut工具来获取: fstr=`` sstr=`` 这里主要是用了cut工具的-d和-f参数: ...

  8. Shell脚本之:字符串

    字符串可以用单引号,也可以用双引号,也可以不用引号. 单引号 str='this is a string' 单引号字符串的限制: 1.单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的: 2 ...

  9. shell脚本,根据字符串获取行号的

    awk中不能解析shell变量,建议做法是通过-v传递进去: 1 typeline=`cat $typepath | awk -v str="$typetmp" '/str/{pr ...

随机推荐

  1. P1056 排座椅

    非原创 #include<bits/stdc++.h>using namespace std;int t1[2009];int t2[2009]; int findmax(int *a){ ...

  2. swift protocol 见证容器 虚函数表 与 动态派发

    一.测试代码: //protocol DiceGameDelegate: AnyObject { //} // //@objc protocol OcProtocol{ //    @objc fun ...

  3. ucml 连接虚字段

  4. JEECG平台权限设计

    JEECG平台权限设计 链接存放位置:https://github.com/PlayTaoist/jeecg-lession/tree/master/%E6%9D%83%E9%99%90%E7%AE% ...

  5. PAT A1151 LCA in a Binary Tree (30 分)——二叉树,最小公共祖先(lca)

    The lowest common ancestor (LCA) of two nodes U and V in a tree is the deepest node that has both U ...

  6. 高阶函数 - aop面向切面编程

    Function.prototype.before = function(beforefn) { var __self = this; return function() { beforefn.app ...

  7. (转)tcp/ip协议的简单理解 -- ip报文和tcp报文的格式

    1.概念: TCP/IP协议通信的过程其实就对应着数据入栈与出栈的过程.入栈的过程,数据发送方每层不断地封装首部与尾部,添加一些传输的信息,确保能传输到目的地.出栈的过程,数据接收方每层不断地拆除首部 ...

  8. [05] 动态SQL

    MyBatis的强大特性之一就是它的动态SQL,它可以根据不同的条件动态地组成SQL语句进行执行.为此,MyBatis提供了一系列强大的表达式,本章将就此进行学习,主要内容直接参考的是官方文档< ...

  9. C#一些常用的图片操作方法:生成文字图片 合并图片等

    生成文字图片: /// <summary> /// 生成文字图片 /// </summary> /// <param name="text">& ...

  10. BTrace 初探

    BTrace 是一款java诊断工具,在解决现场问题的时候非常有用. 今天使用的时候碰到几个坑,先记录一下. 下载下来以后直接运行报错 root@iZ2ze89756yjbvq7le6obdZ:~/b ...