shell 文件表达式 参数[-e -d -f -h -eq -ne -lt -ne.....]

本文详细介绍了Linux系统中文件属性判断与条件表达式的使用方法,包括文件类型的判断、文件状态的检查、整数与字符串比较,以及逻辑运算符的应用。通过具体的shell脚本示例,帮助读者掌握如何在脚本中进行有效的条件判断。

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

菜鸟教程linux: https://www.runoob.com/linux/linux-comm-uniq.html

文件表达式

-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真 
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真 
-w filename 如果 filename可写,则为真 
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。
*linux 下使用man test指令查看

整数条件表达式,大于,小于,shell里没有> 和< ,会被当作尖括号,只有-ge,-gt,-le,lt
-eq  -ne  -lt  -nt只能用于整数,不适用于字符串,字符串等于用赋值号=

整数变量表达式
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于

字符串变量表达式
If  [ $a = $b ]                 如果string1等于string2,则为真, 字符串允许使用赋值号做等号
if  [ $string1 !=  $string2 ]   如果string1不等于string2,则为真       
if  [ -n $string  ]             如果string 非空(非0),返回0(true)  
if  [ -z $string  ]             如果string 为空,则为真
if  [ $sting ]                  如果string 非空,返回0 (和-n类似) 

逻辑非 !                  	条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num ]            如果不存在目录$num

逻辑与 –a                   条件表达式的并列
if [ 表达式1  –a  表达式2 ]

逻辑或 -o                   条件表达式的或
if [ 表达式1  –o 表达式2 ]
   逻辑表达式
   
表达式与前面的=  != -d –f –x -ne -eq -lt等合用
逻辑符号就正常的接其他表达式,没有任何括号( ),就是并列
if [ -z "$JHHOME" -a -d $HOME/$num ]
注意逻辑与-a与逻辑或-o很容易和其他字符串或文件的运算符号搞混了

常用简单语句:

&& 如果是“前面”,则“后面”
[ -f /var/run/dhcpd.pid ] && rm /var/run/dhcpd.pid    检查 文件是否存在,如果存在就删掉
   ||   如果不是“前面”,则后面
[ -f /usr/sbin/dhcpd ] || exit 0    检验文件是否存在,如果存在就退出


 用简化 if 和$1,$2,$3来检测参数,不合理就调用help
[ -z "$1" ] && help                如果第一个参数不存在(-z  字符串长度为0 )
[ "$1" = "-h" ] && help            如果第一个参数是-h,就显示help

if [ -f file ] 如果文件存在
if [ -d … ] 如果目录存在
if [ -s file ] 如果文件存在且非空
if [ -r file ] 如果文件存在且可读
if [ -w file ] 如果文件存在且可写
if [ -x file ] 如果文件存在且可执行

整数变量表达式
if [ int1 -eq int2 ] 如果int1等于int2
if [ int1 -ne int2 ] 如果不等于
if [ int1 -ge int2 ] 如果>=
if [ int1 -gt int2 ] 如果>
if [ int1 -le int2 ] 如果<=
if [ int1 -lt int2 ] 如果<

字符串变量表达式
If [ $a = $b ] 如果string1等于string2
字符串允许使用赋值号做等号
if [ $string1 != $string2 ] 如果string1不等于string2
if [ -n $string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 为空
if [ $sting ] 如果string 非空,返回0 (和-n类似)

s​h​e​l​l​中​条​件​判​断​i​f​中​的​-​z​到​-​d​的​意​思:
[ -a FILE ] 如果 FILE 存在则为真。
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
[ -d FILE ] 如果 FILE 存在且是一个目录则为真。
[ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。
[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。 
[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
[ -r FILE ] 如果 FILE 存在且是可读的则为真。
[ -s FILE ] 如果 FILE 存在且大小不为0则为真。

[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。
[ -x FILE ] 如果 FILE 存在且是可执行的则为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。 [ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2,or 如果 FILE1 exists and FILE2 does not则为真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
[ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。


EQ=Equal =
//等运算符,如果运算符两边相同则返回真,否则返回假;
 
NE(Not Equal to)
//不等运算符,如果运算符两边不等则返回真,否则返回假;
 
GE(Greater than or equal to)
//大于等于运算符,如果运算符两边左边大于等于右边则返回真,否则返回假;
 
GT(Greater than)
//大于运算符,如果运算符两边左边大于右边则返回真,否则返回假;
 
LE(Less than or equal to)
//小于等于运算符,如果运算符两边左边小于等于右边则返回真,否则返回假;
 
LT(Less than)
//小于运算符,如果运算符两边左边大于右边则返回真,否则返回假;

运算符:
算术运算符 + 、 - 、 * 、 / (或 div )和 % (或 mod )
关系运算符 == (或 eq )、 != (或 ne )、 < (或 lt )、 > (或 gt )、 <= (或 le )和 >= (或 ge )
逻辑运算符 && (或 and )、 || (或 or )和 ! (或 not )
验证运算符 empty

 

&lt;think>好的,用户问的是shell脚本中-ne是什么意思。我需要先回忆一下自己了解的shell脚本中的比较操作符。-ne通常用于数值的比较,表示“不等于”(not equal)。这时候用户可能是在编写条件判断时遇到了问题,或者在阅读别人的脚本时看到了-ne,想了解其用途。 接下来要考虑用户的使用场景。用户可能刚接触shell脚本,对条件判断中的各种操作符不熟悉。他们可能在尝试写if语句,用来比较两个变量或者数值是否不等。例如,比较两个数字是否不相等,从而决定执行不同的代码分支。 需要确认用户是否了解shell脚本中的测试命令(test或者[ ])。因为在shell中,条件表达式通常放在[ ]或者[[ ]]中,而-ne就是其中的一个比较操作符,用于整数比较。例如,if [ $a -ne $b ]; then ...。这时候需要说明-ne的用法,并指出它只适用于数值比较,字符串比较应该使用!=。 还要考虑可能的误解。用户可能之前接触过其他编程语言,比如在Python或JavaScript中使用!=,而shell中的-ne可能会让他们困惑。因此需要强调shell中数值比较和字符串比较的不同操作符,避免混淆。 另外,用户的问题可能隐含更深层的需求。例如,他们的脚本可能因为错误使用-ne导致逻辑错误,所以想确认正确的用法。这时候需要给出正确的示例,并提醒常见错误,比如在比较字符串时使用了-ne,或者变量未加引号导致语法错误。 还需要举例子说明-ne的正确使用场景,比如检查命令的退出状态是否不等于0,或者循环中计数器的值是否不等于某个数。同时,对比其他操作符,比如-eq(等于)、-lt(小于)、-gt(大于)等,帮助用户全面理解数值比较的操作符。 最后,确保回答简洁明了,避免使用过于技术性的术语,让刚入门的用户也能理解。可能还需要提醒用户注意空格的使用,在[ ]中每个元素之间都需要空格,否则会导致语法错误。例如,正确写法是[ $b ],而不是[$b],这样会导致解析错误。&lt;/think>在 Shell 脚本中,`-ne` 是一个 **数值比较运算符**,表示 **不等于**(Not Equal),专门用于比较两个整数是否不相等。 --- ### 基本用法 ```bash if [ "$num1" -ne "$num2" ]; then echo "两个数不相等" fi ``` - **仅用于整数比较**,不可用于字符串。 - 必须包裹在 `[ ]` 或 `test` 条件语句中。 --- ### 对比其他运算符 | 运算符 | 含义 | 适用类型 | |--------|------------|-----------| | `-ne` | 不等于 | **整数** | | `-eq` | 等于 | 整数 | | `-lt` | 小于 | 整数 | | `-gt` | 大于 | 整数 | | `!=` | 字符串不等 | **字符串**| | `==` | 字符串相等 | 字符串 | --- ### 常见场景示例 #### 1. 检查命令返回值是否非0(失败) ```bash if [ $? -ne 0 ]; then echo "上一条命令执行失败!" fi ``` #### 2. 循环计数器控制 ```ba
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值