bash 条件判断

目录

文件/类型判断

文件权限判断

两个文件进行比较

两个整数之间进行比较

字符串的判断

多重条件判断

test执行条件表达式


文件/类型判断

#test -e /root/FileName

[ -e FileName ]

判断文件是否存在(shell常用下边这条格式)

这两种没有输出结果,可以用echo $?显示上一条命令是否正确执行,0正确1错误

或者可以这样

[ -d FileName  ] && echo "yes" || echo "no"

判断目录是否存在,存在输出yes,不存在输出no

文件权限判断

[  -w a ] && echo "yes" || echo "no"

只要 所有者 所属组 其他人 三个谁有写权限(w),都会为真(输出yes)

两个文件进行比较

[ X -ef Y  ] && echo "yes" || echo "no"

判断X和Y是否

两个整数之间进行比较

 

字符串的判断

[ -z "Name" ] && echo "yes" || echo "no"

多重条件判断

aa=11

[ -n "$aa" -a $aa" -gt 23 ] && echo "yes" || echo "no"

判断变量aa是否有值,同时判断变量aa是否大于23

因aa值不大于23,所以第一个判断(-n)值为真,返回的结果也是no

aa=24

[ -n "$aa" -a $aa" -gt 23 ] && echo "yes" || echo "no"

输出yes

test执行条件表达式

该命令等价于 [。

编写 bash 条件表达式可用内建命令 test, [ ,组合命令 [[

文件操作符

-a FILE如果文件存在,则为true。
-b
FILE如果文件是块特殊的,则为true。
-c
FILE如果文件是特殊字符,则为true。
-d
FILE如果文件是目录,则为true。
-e
FILE如果文件存在,则为true。
-f
FILE如果文件存在并且是常规文件,则为true。
-g
FILE如果文件是set-group-id,则为true。
-h
FILE如果文件是符号链接,则为true
-L
FILE如果文件是符号链接,则为true
-k
FILE如果文件的粘滞位(sticky)设置了,则为true
-p
FILE如果文件是命名管道,则为true
-r
FILE如果您可以读取文件,则为true
-s
FILE如果文件存在且不为空,则为true
-S
FILE如果文件是套接字,则为true
-t
FD如果在终端上打开FD,则为True
-u
FILE如果文件是set-user-id,则为true
-w
FILE如果文件可写,则为true
-x
FILE如果您可以执行文件,则为true
-O
FILE如果文件有效地归您所有,则为true
-G
FILE如果文件有效地归您的组所有,则为true
-N
FILE如果文件自上次读取以来已被修改,则为true
   
FILE1
-nt FILE2根据修改日期,如果 file1file2新,则为true
FILE1
-ot FILE2根据修改日期,如果 file1file2旧,则为true
FILE1
-ef FILE2如果 file1file2的硬链接,则为true

字符串运算符

-z STRING如果字符串为空,则为true
-n
STRING如果字符串不为空,则为true
STRING如果字符串不为空,则为true
STRING1 = STRING2      如果字符串相等,则为
true
STRING1 != STRING2    如果字符串不相等,则为
true
STRING1 < STRING2      如果 STRING1 的字典排序在 STRING2 之前,则为
true
STRING1 > STRING2      如果 STRING1 在字典排序在 STRING2 之后,则为
true

其他运算符

-o OPTION         如果启用了shell选项OPTION,则为true
-v VAR            如果设置了shell变量VAR,则
为true
-R VAR            如果设置了shell变量VAR并且是变量引用,则
为true
!EXPR            如果expr为假,则
为true
EXPR1 -a EXPR2    如果expr1和expr2都
为true,则为true
EXPR1 -o EXPR2    如果expr1或expr2
为true,则为true
arg1 OP arg2      算术表达式测试; OP是 -
eq,-ne,-lt,-le,-gt,-ge中的一个;算术表达式为真时返回true

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bash中,可以使用条件判断语句来根据不同的条件执行不同的操作。根据引用\[1\],可以使用case语句来匹配不同的值或模式。在case语句中,可以使用;;来表示一个case处理结束,而使用;&来表示继续匹配其他的值或模式。例如: ```bash #!/bin/bash OS=$(uname -s) case "$OS" in Linux) echo "This is Linux" ;;& *) echo "Failed to identify this OS" ;;& esac ``` 另外,根据引用\[2\],还可以使用test命令或者方括号来进行条件判断。在使用方括号时,需要注意方括号与内部表达式之间必须有空格。例如: ```bash # -e 参数:判断文件是否存在 test -e /etc/profile echo $? \[ -e /etc/profile2 \] echo $? \[ -e /etc/profile\] # 这种写法是错误的,会报错 ``` 此外,还有一个有趣的命令是冒号(:),它的效果等价于true命令。可以使用冒号来作为一个占位符或者空操作。例如: ```bash # 查看类型 type -a : # 测试退出码 : echo $? ``` 总结来说,在Bash中,可以使用case语句、test命令或方括号来进行条件判断。使用这些条件判断语句可以根据不同的条件执行不同的操作。 #### 引用[.reference_title] - *1* *2* *3* [Shell 学习(8)Bash条件判断](https://blog.csdn.net/qq_38074398/article/details/128239902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值