shell——条件判断

本文详细介绍了Shell脚本中的条件判断,包括使用test命令、方括号[ ]以及双方括号[[ ]]进行文件类型、文件权限、文件新旧程度、整数大小和字符串的判断,还讲解了如何实现多重条件判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、判断方式

方式1:test
方式2: [ ]
方式3: [[ ]]支持正则

2、 判断文件类型

判断参数含义

-e #判断文件是否存在(任何类型文件)
-f #判断文件是否存在并且是一个普通文件
-d #判断文件是否存在并且是一个目录
-L #判断文件是否存在并且是一个软链接文件
-b #判断文件是否存在并且是一个块设备文件
-S #判断文件是否存在并且是一个套接字文件
-c #判断文件是否存在并且是一个字符文件
-p #判断文件是否存在并且是一个命名管道文件
-s #判断文件是否存在并且是一个非空文

3、判断文件权限

判断 参数含义

-r #当前用户对其是否有读权限
-w #当前用户对其是否有写权限
-x #当前用户对其是否有执行权限
-u #当前用户对其是否有suid特殊权限(高级权限冒险位)
-g #当前用户对其是否有guid特殊权限(高级权限强制位)
-k #当前用户对其是否有o+t特殊权限(高级权限粘滞位)
o+t权限:任何用户可以写,但只有文件拥有者和超级用户可以删
u+s权限:针对某个程序任何用户都有读写这个程序的权限
g+s权限:组里的目录下文件编入到此群组中,无论是哪个用户创建的文件

4、判断文件新旧

判断参数含义

file1 -nt file2 #比较file1是否比file2新
file1 -ot file2 #比较file1是否比file2旧
file1 -ef file2 #比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode

5、判断整数大小

判断参数含义

-eq #相等
-ne #不相等
-gt #大于
-ge #大于等于
-lt #小于
-le #小于等于

6、判断字符串

判断参数含义

-z #判断是否为空字符串,字符串长度位0
-n #判断是否为非空字符串,字符串长度大于0
string1 = string2 #判断字符串是否相等
string1 != string2 #判断字符串是否不相等

7、多重条件判断

判断符号含义

-a 和 && #逻辑与,全真则真
-o 和 || #逻辑或,全假则假
### Shell 中 `if` 条件判断的用法与语法 在 Shell 脚本中,`if` 语句用于执行基于条件测试的结果的操作。以下是关于 `if` 条件判断的基本结构及其常见用法。 #### 基本语法 ```bash if condition then commands fi ``` 如果需要处理多个分支,则可以扩展为以下形式: ```bash if condition then commands_if_true else commands_if_false fi ``` 或者更复杂的多分支情况: ```bash if condition1 then commands_when_condition1_is_true elif condition2 then commands_when_condition2_is_true else default_commands fi ``` 其中: - `condition` 是一个表达式,返回真 (non-zero exit code) 或假 (zero exit code)[^4]。 - 如果 `condition` 的结果为真 (`exit status=0`),则会执行紧跟其后的命令;否则跳过这些命令并继续后续逻辑。 #### 使用方括号 `[ ]` 进行简单比较操作 为了简化某些类型的布尔运算符书写方式,在 POSIX 风格下通常采用如下写法来代替单独调用 test 命令完成相同功能: ```bash if [ expression ] then ... fi ``` 注意这里的空格非常重要——它们分隔了关键字、参数以及特殊字符[]之间必要的界限[^3]。 #### 文件属性检测的例子 下面展示了一些常用的文件状态检查方法作为例子说明如何构建合适的 expressions : | Operation | Description | |-----------------|-----------------------------------------------------------------------------------------------| | `-e FILENAME` | Returns true if file exists | | `-f FILENAME` | True when given name refers specifically to an ordinary regular file | | `-d DIRECTORY` | Directory existence | | `-r READABLE` | Whether current user has read permission | | `-w WRITABLE` | Write access | 例如验证某个目录是否存在并且可读: ```bash if [ -d "/path/to/directory" ] && [ -r "/path/to/directory" ]; then echo "Directory found and readable." fi ``` #### 数字和字符串对比实例 除了上面提到过的针对路径名之类的对象外,我们还可以利用类似的机制来进行数值大小关系判定或是两个文本串是否相匹配等问题上的探讨. 对于整数之间的相互作用而言,有这么几种主要的形式可供选择应用: ```bash if (( num1 > num2 )); then ... fi # Arithmetic context directly compares numbers. or equivalently, if [[ "$num1" -gt "$num2" ]]; then ... fi # Inside double square brackets, arithmetic operators work too. ``` 至于涉及到字母序列方面的考量因素的话,则需特别留意区分大小写的敏感度设定与否的影响效果差异之处所在啦!比如忽略大小写字母差别的时候就需要额外指定选项才行哦~比如说这样子做就可以实现无视Case区别对待的目的啦哈~ ```bash shopt -s nocasematch # Turn case-insensitive matching ON within this block/script session only. if [[ "${stringA,,}" == *"pattern"* ]];then...;fi # Convert stringA entirely lowercase before comparison. unset CASE_INSENSITIVE # Restore normal behavior after done processing special cases here... ``` 以上就是有关于Shell Scripting中的If Condition Syntax And Usage的一些基本概念介绍了希望对你有所帮助😊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值