谢烟客---------Linux之Bash基础特性条件测试&&自定义退出状态码(6)

条件测试

判断某需求是否满足,需要由测试机制来实现。

根据命令的执行状态结果,表达不同的测试条件

1、根据id命令的执行状态结果,判断用户是否存在

[[email protected] ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[[email protected] ~]# echo $?
0

[[email protected] ~]# id help
id: help: no such user
[[email protected] ~]# echo $?
1

2、根据在/etc/passwd文件中找到root开头的词的执行状态结果,判断用户是否存在

[[email protected] ~]# grep -q ‘^root\b‘ /etc/passwd
[[email protected] ~]# echo $?
0
[[email protected] ~]# grep -q ‘^help\b‘ /etc/passwd
[[email protected] ~]# echo $?
1

使用测试,在测试时,要使用特殊的测试符

1)test 测试表达式

[[email protected] ~]# test 1 > 3
[[email protected] ~]# echo $?
0
[[email protected] ~]# test 1 -gt 3 # 在数值测试时,用-gt表示 > 符号
[[email protected] ~]# echo $?
1

2)[ 测试表达式 ]

[[email protected] ~]# [1 -lt 3]   # 测试表达示与中括号必须存在空格,否则就会报错。
-bash: [1: command not found

[[email protected] ~]# [ 1 -lt 3 ]  # 在数值测试时,用-lt表示 < 符号
[[email protected] ~]# echo $?
0

3) [[  测试表达式 ]]

[[email protected] ~]# [[1 -lt 3]]
-bash: [[1: command not found

[[email protected] ~]# [[ 1 -eq 3 ]]  # 在数值测试时,用-eq 表示 = 符号
[[email protected] ~]# echo $?
1

测试符分类

数值测试

-eq 左侧是否等于右侧

-ne 是不等于

-gt 是否大于

-ge 是否大于等于

-lt 是否小于

-le 是否小于等于

1)A  -eq  B,  测试A所表示的数值是否等于B所表示的数值。等于为真

##测试方法一
# A=1
# B=10
# test $B -eq $A  # 测试变量B内存空间中存储的数据和变量A内存空间中存储的数据是否相等
# echo $?
1

##测试方法二
# [ $B -eq $A ]
# echo $?
1

##测试方法三
# [[ $B -eq $A ]]
# echo $?
1

2)A  -ne  B,  测试A所表示的数值是否不等于B所表示的数值。不等于为真

##测试方法一
# test $B -ne $A  # 测试变量B内存空间中存储的数据和变量A内存空间中存储的数据是否不相等
# echo $?
0

##测试方法二
# [ $B -ne $A ]
# echo $?
0

##测试方法三
# [[ $B -ne $A ]]
# echo $?
0

3) A  -gt  B , 测试A所表示的数值是否大于B所表示的数值。大于为真

##测试方法一
# test 10 -gt 3 # 测试10是否大于3
# echo $?
0

##测试方法二
# [ 10 -gt 3 ]
# echo $?
0

##测试方法三
# [[ 10 -gt 3 ]]
# echo $?
0

3) A  -ge  B , 测试A所表示的数值是否大于等于B所表示的数值。大于等于为真

##测试方法一
# test 10 -ge 3 # 测试10是否大于等于3
# echo $?
0

##测试方法二
# [ 10 -ge 3 ]
# echo $?
0

##测试方法三
# [[ 10 -ge 3 ]]
# echo $?
0

4)A -lt B , 测试A所表示的数值是否小于B所表示的数值。小于为真

##测试方法一
# let 1 -lt 3    # 测试 1 是否小于 3
# echo $?
0

##测试方法二
# [ 1 -lt 3 ]
# echo $?
0

##测试方法三
# [[ 1 -lt 3 ]]
# echo $?
0

5)A -le B , 测试A所表示的数值是否小于等于B所表示的数值。小于等于为真

##测试方法一
# let 1 -le 3    # 测试 1 是否小于 3
# echo $?
0

##测试方法二
# [ 1 -le 3 ]
# echo $?
0

##测试方法三
# [[ 1 -le 3 ]]
# echo $?
0

字符测试 (所有的操作数,都应该使用引用)

== 等值测试

>  是否大于, ASCII码的比较

<  是否小于

!= 是否不等于

A =~ PATTERN 左侧字符串是否能够被右侧的(正则表达式)PATTERN所匹配到。一般用于 [[ ]] 中,PATTERN不能加引号

-z "STRING" 测试字串是否为空,空为真

-n "STRING" 是否不空

1) A == B ,A所表示的字符和B所表示的字符是否相等

##测试方法一
# test "obama" == "obama"  # 测试左侧字符串,是否与右侧字符串相等
# echo $?
0

# test "obama" == "Obama"   # 可见字符串,必须完成相等
# echo $?
1

# A=obama
# B=jerry
# test "$A" == "$B"     # 测试A变量内存空间存储的数据(字符型或数值型)是否与B变量中存储的数据相等
# echo $?
1

##测试方法二
# [ "obama" == "obama" ]
# echo $?
0

# A=obama
# B=jerry
# [ "$A" == "$B" ]
# echo $?
1

##测试方法三
# [[ "obama" == "obama" ]]
# echo $?
0

# [[ "$A" == "$B" ]]
# echo $?
1

2) A > B ,A所表示的字符是否大于B所表示的字符

3) A < B ,A所表示的字符是否小于B所表示的字符

4) A != B ,A所表示的字符和B所表示的字符是否不相等

##测试方法一
# test "obama" != "obama"  # 测试左侧字符串,是否与右侧字符串不相等
# echo $?
1

# test "$B" != "$A" 
# echo $?
0

##测试方法二
# [ "obama" != "obama" ] 
# echo $?
1

# [ "$B" != "$A" ] 
# echo $?
0

##测试方法三
# [[ "obama" != "obama" ]]
# echo $?
1

# A=obama
# B=jerry
# [[ "$A" != "$B" ]]
# echo $?
0

5) A =~ B ,A所表示的字符能否被B所表示的(正则表达式)模式所匹配。

# test "obama" =~ "^o.*"
-bash: test: =~: binary operator expected
# test "obama" =~ ^o.*
-bash: test: =~: binary operator expected

# [ "obama" =~ "^o.*" ]
-bash: [: =~: binary operator expected
# [ "obama" =~ ^o.* ]
-bash: [: =~: binary operator expected

# [[ "obama" =~ "^o.*" ]]
# echo $?
1

# [[ "obama" =~ ^o.* ]] #模式不能加引号
# echo $?
0

6)-z  "B",  测试B所表示的字符串是否为空,空为真

##测试方法一
# test -z "obama"
# echo $?
1

A=
# test -z "$A"  # A变量为空时,测试其结果
# echo $?
0

A=jerry
# test -z "$A"  # A变量不空时,测试其结果
# echo $?
1

##测试方法二
# [ -z "how are you?" ]
# echo $?
1

A=
# [ -z "$A" ]
# echo $?
0

##测试方法三
# [[ -z "how are you?" ]] # 测试字串是否为空
# echo $?
1

A=
# [[ -z "$A" ]]  # 测试变量中存储的字串,是否为空
# echo $?
0

7) -n "B",  测试B所表示的字符串是否为不空,不空为真

##测试方法一
# test -n "obama"
# echo $?
0

A=
# test -n "$A"  # A变量为空时,测试其结果
# echo $?
1

A=jerry
# test -n "$A"  # A变量不空时,测试其结果
# echo $?
0

##测试方法二
# [ -n "how are you?" ]
# echo $?
0

A=
# [ -n "$A" ]
# echo $?
1

##测试方法三
# [[ -n "how are you?" ]] # 测试字串是否为空
# echo $?
1

A=
# [[ -n "$A" ]]  # 测试变量中存储的字串,是否为空
# echo $?
1

文件测试

2、bash中自定义退出状态码

exit [#]  在bash脚本中,一旦遇到exit命令就会终止脚本,退出状态码为exit后的数值。

1、exit存在时

# nano helo.sh
#!/bin/bash
printf "hello everyone\n" 
exit 1

## 判断脚本执行的状态结果
# bash helo.sh 
hello everyone
# echo $?
1

2、exit不存在时

# nano helo.sh
#!/bin/bash
printf "hello everyone\n" 

## 判断脚本执行的状态结果
# bash helo.sh
#!/bin/bash
ls /varr
printf "hello everyone\n" 
# echo $?   ##返回值为最后一个命令的执行状态结果
0

谢烟客---------Linux之Bash基础特性条件测试&&自定义退出状态码(6)

时间: 2024-10-21 11:57:45

谢烟客---------Linux之Bash基础特性条件测试&&自定义退出状态码(6)的相关文章

谢烟客---------Linux之Bash基础特性算术运算(5)

算术运算 算术:数学中最古老,最基础和最初等的部分.它研究数的性质及其运算.把数和数的性质,数和数之间的四则运算在应用过程中的经验积累起来,并加以整理,就形成了最古老的一门数学--算术 算术运算:数的加.减.乘.除以及乘方开方等数学运算,区别于几何运算. 算术运算的符号 完成基本的算术运算 (arithmetic operators) 符号,就是用来处理四则运算的符号 1)加法:同类事物的重复或累计,是数字运算的开始,不同类比如一个苹果+一个橘子其结果只能等于二个水果就存在分类与归类的关系 公式

谢烟客---------Linux之Bash基础特性

框架:     bash的引用:命令引用.变量引用     bash命令历史     bash中的通配符     bash中的管道     I/O重定向     命令补全     路径补全     bash的快捷键     命令的别名     命令行的展开      1)命令的执行结果与命令的执行状态结果      命令的执行结果: 用户输入命令+Enter后,命令如何执行     命令提示符,回车键后:bash切片,分析命令,[选项],参数,提请给内核,分配资源,运行为一个进程  1)用户接口

谢烟客---------Linux之Bash基础特性(2)

Linux之哲学思想 一切皆文件 避免交互,实现Bash编程 文本编程命令实现配置 组合小程序完成复杂任务 总结 过程式编程 解释执行 字符和数值存储的区别 shebang -> cpu ->解释器 数据类型 变量类型,即为内部数据的类型 bash 过程式编程.解释执行 变量的类型为:弱类型 11)Bash编程 编程风格:过程式编程.对象式编程 过程式编程:目的解决问题 只考虑数据怎么组织 指令组织数据 为了完成复杂的任务 顺序执行:逐个运行任务 选择执行:有一个标准,只执行某些代码片段 循环

谢烟客---------Linux之Bash基础特性变量(3)

变量 程序 = 指令(只读) + 数据(数据存储的位置变量.列表.数组) 指令可通过位置变量调用,向脚本传递的数据 变量名 可引用的"命名的内存空间":取了名字的内存空间,用名字即可调用事先划分的内存空间 变量类型 变量内部存储的数据的类型 变量类型的作用 限定了存储空间 限定了存储格式 限定了参与的运算 变量的类型 字符型 数值型 整型 浮点型 变量的类型 强类型 定义变量时,必须指定变量的类型,参与的运算必须符合要求 调用未申明的变量,会报错 弱类型 定义变量时,不用指定变量的类型

谢烟客---------Linux之Bash基础特性配置文件(4)

前言 在bash进程中,读取到bash进程内存中的数据,在bash进程终止时,进程中的数据会被操作系统回收,变量也是定义在当前shell进程内存空间的数据.在shell终止时,变量也会失效 作用 选项:定义命令的工作行为 配置文件也能定义工作行为,主要存储命令的诸多选项,定义长期有效的行为 功能 让用户能更好的使用bash 配置文件的分类 对所有用户生效的配置: /etc/profile,/etc/profile.d/ /etc/bashrc 对当前用户有效 ~/.bashrc ~/.bash_

bash自定义退出状态码exit

exit用来结束一个脚本,脚本中一旦遇到exit命令,脚本会立即终止:终止退出状态取决于exit命令后面的数字: exit [n]:自定义退出状态码: 举例说明. 1.未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码: 2.给脚本指定退出状态码,整个脚本的退出状态码取决于指定的退出状态码:

谢烟客---------Linux之bash脚本编程---if补充和for循环

bash:过程式编程,为了完成更复杂的任务,支持顺序执行.选择执行.循环执行 顺序执行:从左而右,依次执行命令. 选择执行:依据condition(条件)的执行状态结果,选择执行不同的代码片段. 循环执行:依据condition(条件)的执行状态结果,决定是否进入循环. condition: ture: 表示条件状态结果为0 false: 表示条件执行状态结果非0 if 单分支.双分支.多分支.嵌套if语句 1.单分支结构 if condition; then     if-ture fi 2.

bash之流程控制for循环及bash命令退出和退出状态码

一.for循环定义: 将一段代码反复执行:----->进入条件;------> 退出条件; 二.语法格式: for 变量名 in LIST do statement1 ... done for VAR in LIST; do statement1; statement2; ...; done 三.LIST:列表 定义:包含至少一个元素的字符串集合: LIST的生成方法: (1) 直接给出: (2) 数值列表: (a) {start..end},例如:{1..10} (b) seq [start

0823第三课-2 Linux的文件系统 bash基础特性

1.linux文件系统 绝对路径:/ LSB: FHS(文件系统层级结构标准) FHS: /boot: 引导文件存放目录,例如kernel(vmlinuz).bootloader(grub, grub2): 包含开机菜单以及开机所需要的配置文件等等 [[email protected] boot]# lsconfig-2.6.32-504.el6.x86_64         lost+foundefi                                  symvers-2.6.3