shell(三)相关表达式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wzj_110/article/details/100154553

一    文件表达式

常规的

# 特殊-->e是不是一般文件!

if [ -f  file ]    如果文件存在(普通文件)
if [ -d ...   ]    如果目录存在(directory)
if [ -s file  ]    如果文件存在且非空(socket)
if [ -r file  ]    如果文件存在且可读(可读)
if [ -w file  ]    如果文件存在且可写(可写)
if [ -x file  ]    如果文件存在且可执行(可执行)

帮助文档:man test

root:不受权限的影响,注意这一点!

需求1:文件存在并且是普通文件输出1

[ -f temp ] && echo 1 || echo 0

涉及:简单的逻辑控制!

需求2:判断权限

[root@server1 mnt]# chmod 000 temp
[root@server1 mnt]# ll temp 
---------- 1 root root 11 Aug 29 12:29 temp
[root@server1 mnt]# [ -r temp ] && echo 1 || echo 0
1

说明:不完全看权限,看最终的结果,针对root权限有时候没有作用!

需求3:shell变量测试

[root@server1 mnt]# file1=/etc/rc.local 
# 是不是文件!-->最好加上双引号,表示一个整体!
[root@server1 mnt]# [ -f "$file1" ] && echo 1 || echo 0
1

# 对单个文件或目录变量的测试需要加双引号,避免错误

需求4:将多个命令写到{}

#!/bin/bash
[ $1 -eq 8 ] || {
        echo 1
        echo 2
        echo 3
}

# 条件表达式判断条件后面执行多条命令语句写法

说明:用{}放多个命令,{}表示后面的命令是一个整体!

条件表达式特点:相对于条件表达式,简洁,短小精悍!

相关对比

1、test 测试表达式

2、[ 测试表达式 ] #两边需要有空格

3、[[ 测试表达式 ]]

4、(( 测试表达式 )) # 无需空格,常规数学符号!

说明:第一种和第二种是等价的,第三种是扩展的test命令(扩展的地方),语法4常用于计算

在[[]] 双中括号中可以使用通配符等进行模式匹配,&& ||  >  < 等操作符可以直接应用于双中括号中,但不能用于单中括号中

二    字符串表达式

-n  nonzero       ---->长度是不是非0
-z  zero          ---->字符串的长度是不是非0

"串1" = "串2"     ---->两个字符串是不是相等
"串1" != "串2"   ---->两个字符串是不是不相等

# 注意1:所有的字符串测试操作必须用""引起来!
# 注意2:比较符号的两端必须有空格

空格导致的问题

[root@server1 mnt]# [ "wzj"="1" ]&& echo 1 || echo 0
1
[root@server1 mnt]# [ "wzj" = "1" ]&& echo 1 || echo 0
0

相关练习

# 以"wzj"载体

[root@server1 mnt]# [ -n "wzj" ] && echo 1 || echo 0
1
[root@server1 mnt]# [ -z "wzj" ] && echo 1 || echo 0
0
[root@server1 mnt]# [ ! -z "wzj" ] && echo 1 || echo 0  # 取反
1

说明:关于变量的省略

注意:如果变量不存在(未定义),则默认长度为0!

相关模仿

# 定位-->sed -n "30,31p" /etc/init.d/network

vim /etc/init.d/network # 提供的例子

[ "${NETWORKING}" = "no" ] && exit 6

三    整数表达式

特点:文本形式进行数字比较!

注意:不同场景使用不同的符号!

扩展:如果混用,在[]中对于特殊符号(<>)进行比较需要反斜杠\转移!

相关结论

对2的说明

[root@server1 mnt]# [[ 2 > 11 ]] && echo 1 || echo 0
1
# [[]]逻辑比较(第一位)

猜你喜欢

转载自blog.csdn.net/wzj_110/article/details/100154553