一、字符串测试表达式

    前面一篇介绍:什么是shell,shell变量请参考:

      shell 学习笔记1-什么是shell,shell变量

  1、字符串测试表达式参数

    字符串需要用""引起来

    比较符号两段必须要空格

  2、字符串测试表达式举例

    1)测试1

[root@www ~]# [ -z "012" ] && echo 1 || echo 0  #不为0 ,为假,所以echo 0
0
[root@www ~]# [ -z "" ] && echo 1 || echo 0 #为0,为真,所以echo 1
1
[root@www ~]# [ -n "" ] && echo 1 || echo 0 #为0,所以为假,所以echo 0
0
[root@www ~]#

    2)测试2

[root@www ~]# test1=abc
[root@www ~]# [ "test1" = "abc" ] &&echo 1||echo 0 #不等于为真,所以 echo 0
0
[root@www ~]# [ "$test1" = "abc" ] &&echo 1||echo 0 #等于为真,所以echo 1
1
[root@www ~]# [ "$test1" != "abc" ] &&echo 1||echo 0 #不等于为真,所以 echo 0
0
[root@www ~]#

    3)“=”号两段不加空格测试,不加引号也容易出问题

[root@www ~]# [ "abc"="1" ] &&echo 1||echo 0
1
[root@www ~]# [ "abc" = "1" ] &&echo 1||echo 0
0

    4)可以参考centos7 上 /etc/rc.d/init.d/functions这个文件

二、整数二元比较操作符

  1、整数二元比较操作符参数

  2、整数二元比较操作符举例

    1)测试1

[root@www ~]# [ 2 > 1 ]&&echo 1||echo 0
1
[root@www ~]# [ 2 < 1 ]&&echo 1||echo 0 #2不小于1,这个结果时错的,因为没有转义
1
[root@www ~]# [ 2\ < 1 ]&&echo 1||echo 0
1
[root@www ~]# [ 2 \< 1 ]&&echo 1||echo 0
0
[root@www ~]#

    2)测试2,( [] 里面用字母的形式,[[]] 用符号的形式)

[root@www ~]# [[ 2 < 1 ]]&&echo 1||echo 0
0
[root@www ~]# [ 2 -lt 1 ]&&echo 1||echo 0
0
[root@www ~]# [ 2 -le 1 ]&&echo 1||echo 0
0
[root@www ~]# [ 2 -gt 1 ]&&echo 1||echo 0
1
[root@www ~]# [ 2 -ge 1 ]&&echo 1||echo 0
1
[root@www ~]#

    3)测试总结

      1、整数加双引号也是对的

      2、[[]]用-eq等写法也是对的,[[]]用>等写法也可能不对(只比较第一位,逻辑结果不对)

      3、[]用>号的写法没错,但逻辑结果不对

    4)系统脚本例子

[root@xen-node1 ~]# grep -w "\-eq" /etc/init.d/nfs
[ $RETVAL -eq 0 ] && RETVAL=$rval
[ $RETVAL -eq 0 ] && RETVAL=$rval
[ $RETVAL -eq 0 ] && RETVAL=$rval
[ $RETVAL -eq 0 ] && RETVAL=$rval
[ $RETVAL -eq 0 ] && RETVAL=$rval
[root@xen-node1 ~]#

三、逻辑操作符号

  1、逻辑操作符号参数

  2、注意

    !中文意思是反:与一个逻辑值相反的逻辑值

    -a中文意思是与(and&&):两个逻辑值都为真,返回值才为真,反正为假

    -o中文意思是或(or||):两个逻辑值只要有一个为真,返回值就为真

  3、逻辑操作符运算规则

    结论:-a和&&的运算规则:只有两段都是1才为真

真 true 1 假 false 0
------------------------
and 1*0=0 假
and 0*1=0 假
and 1*1=1 真
and 0*0=0 假
只有两段都是1才为真,and交际
结论:-o或||两端都是0才为假,任何一端不为0都是真
---------------------------
or 1+0=1 真
or 1+2=2 真
or 0+1=1 真
or 0+0=0 假
两端都是0才为假,不为0都是真
或并集

  4、逻辑操作符示例

    1)测试1

[root@www ~]# f1=/etc/rc.local ; f2=/etc/services
[root@www ~]# [ -f "$f1" -a -f "$f2"]&& echo 1||echo 0 #括号里面没加空格
-bash: [: missing `]'
0
[root@www ~]# [ -f "$f1" -a -f "$f2" ]&& echo 1||echo 0 #为真
1
[root@www ~]# [[ -f "$f1" && -f "$f2" ]]&& echo 1||echo 0 #用&&需要加双括号
1
[root@www ~]# [ -f "$f1" && -f "$f2" ]&& echo 1||echo 0 #不加双括号报错
-bash: [: missing `]'
0
[root@www ~]# [ -f "$f1" ] && [ -f "$f2" ]&& echo 1||echo 0 #这样也可以
1
[root@www ~]#

    2)测试2

[root@xen-node1 ~]# sed -n '87,90p' /etc/init.d/nfs
[ "$NFSD_MODULE" != "noload" -a -x /sbin/modprobe ] && {
/sbin/modprobe nfsd
[ -n "$RDMA_PORT" ] && /sbin/modprobe svcrdma
}
You have new mail in /var/spool/mail/root
[root@xen-node1 ~]#

    3)总结

[]中用-a,-o,!
[[]]中用&&,||,!
test用法和[]相同
多个[]之间以及多个[[]]之间,或者任意混合中间逻辑操作符都是&&或||

    4)测试表达test、[]、[[]]、(())的区别总结

shell 学习笔记2-shell-test的更多相关文章

  1. Shell学习笔记之shell脚本和python脚本实现批量ping IP测试

    0x00 将IP列表放到txt文件内 先建一个存放ip列表的txt文件: [root@yysslopenvpn01 ~]# cat hostip.txt 192.168.130.1 192.168.1 ...

  2. 鸟书shell 学习笔记(一) shell专注于概念和命令

    变量   variableName=value 等号左右不能有空格 变量内容有空格须要用"或者'括起来,可是 v="hello $name" $保持原有功能,单引號则不行 ...

  3. shell学习笔记2: shell中的四则运算符

    shell中的四则运算符 n1,n2 :常量数字 char:运算符号 加,减,乘,除,取余(+,-,*,/,%) $a,$b:变量a,变量b 方法1 数字与符号之间需要有空格 不支持小数 expr n ...

  4. 鸟书shell 学习笔记(二) shell中正則表達式相关

    通配符与正則表達式的差别 通配符是bash原生支持的语法,正則表達式是处理字符串的一种表示方式, 正則表達式须要支持的工具支持才干够 语系设置 : export LANG=C grep alias 设 ...

  5. shell学习笔记1: shell 中的变量与常见符号使用方法

    变量 声明即用 a=2 b="123" 调用 ${varName}或者 $varName echo $b echo ${a} 常见变量 $?:判断上一个语句是否成功 $0:执行脚本 ...

  6. shell学习笔记汇总

    1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...

  7. SHELL学习笔记三

    SHELL学习笔记一 SHELL学习笔记二 SHELL学习笔记三 for 命令 读取列表中的复杂值 从变量读取列表 从命令读取值 更改字段分隔符 用通配符读取目录 which 使用多个测试命令 unt ...

  8. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  9. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

  10. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

随机推荐

  1. 使用HttpClient访问WebHook

    代码: import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.c ...

  2. 在linux的用户空间操作gpio

    1. 使能linux内核选项CONFIG_GPIO_SYSFS CONFIG_GPIO_SYSFS=y 2. 测试方法 2.1 关注/sys/class/gpio下的文件 --export/unexp ...

  3. 完美解决Cannot download "https://github.com/sass/node-sass/releases/download/binding.nod的问题

    ①:例如很多人第一步就会这样做: 出现:Cannot download "https://github.com/sass/node-sass/releases/download/版本号/XX ...

  4. win cmd 设置代理

    windows: HTTP(S)代理服务器:127.0.0.1:5783 SOCKS代理服务器:127.0.0.1:5789 set 2 set http_proxy=socks5://127.0.0 ...

  5. 【转载】 tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数

    原文地址: https://blog.csdn.net/dcrmg/article/details/79776876 ----------------------------------------- ...

  6. c# stmp邮件发送

    最近用到了邮件发送功能,因为stmp设置.参数传递错误等一些问题走了弯路,虽然代码很简单,这里还是记录一下,方便下次查阅. 用个人163邮箱测试的邮件发送 class Program { static ...

  7. go 的基本数据类型和结构

    // 变量命名方式当用两个或两个以上的单词命名变量时,可以将除第一个单词以外的所有单词的首字母大写package 命名方式全部小写不加 _ 布尔类型:bool整型:int8.byte.int16.in ...

  8. php面相对象基本概念,基本形式,传值

    面向对象基本概念 面向对象三大特性:封装  继承  多态 类与对象 类:是用于描述“某一些具有共同特征”的物体的概念,是某一类物体的总称. 通常,一个类所具有的共同特征包括2大方面的信息: 外观,形状 ...

  9. LeetCode 145. 二叉树的后序遍历(Binary Tree Postorder Traversal)

    145. 二叉树的后序遍历 145. Binary Tree Postorder Traversal 题目描述 给定一个二叉树,返回它的 后序 遍历. LeetCode145. Binary Tree ...

  10. Guava 工具类之Cache的使用

    一.guava cache 介绍 1.介绍 guava cache是Google guava中提供的一款轻量级的本地缓存组件,其特点是简单.轻便.完善.扩展性强,内存管理机制也相对完善. 2.使用缓存 ...