Bash遍历路径统计文件类型,添加软链接判断时报错求助
问题分析与解决
这个报错的根源主要有两个可能,咱们一步步来拆解:
1. 变量未加引号导致的语法异常
当$item展开后是空值,或者包含空格、特殊字符时,[[ -l $item ]]会变成不完整的条件判断(比如空值时会变成[[ -l ]]),Bash就会抛出conditional binary operator expected的错误。
解决办法是给所有变量引用加上双引号,确保即使是空值或特殊字符也能被正确解析:
for item in $MYPATH do if [[ -f "$item" ]] ; then FILECOUNT=$[$FILECOUNT+1] elif [[ -d "$item" ]] ; then DIRCOUNT=$[$DIRCOUNT+1] elif [[ -l "$item" ]] ; then SYMCOUNT=$[$SYMCOUNT+1] fi done
2. Shell环境不兼容[[扩展语法
如果你的脚本是用sh(比如很多系统默认sh指向的Dash)执行的,而不是bash,那[[这种Bash专属的扩展测试语法是不被支持的,也会触发语法错误。
解决办法:
- 脚本开头一定要声明Bash解释器:
#!/bin/bash - 如果用POSIX标准的
[语法替代[[,需要调整写法(注意变量同样要加引号,条件之间要有空格):for item in $MYPATH do if [ -f "$item" ] ; then FILECOUNT=$[$FILECOUNT+1] elif [ -d "$item" ] ; then DIRCOUNT=$[$DIRCOUNT+1] elif [ -l "$item" ] ; then SYMCOUNT=$[$SYMCOUNT+1] fi done
额外建议:初始化计数变量
另外,建议在循环前初始化你的计数变量,避免默认空值导致的算术运算异常:
FILECOUNT=0 DIRCOUNT=0 SYMCOUNT=0
内容的提问来源于stack exchange,提问作者user3066571
相关产品推荐
相关产品推荐

