首页新闻找找看学习计划

这一段脚本应该怎么理解?

0
悬赏园豆:80 [已解决问题] 解决于 2017-07-11 09:48

purpose: find dead symlinks and output them quoted

 1 [ $# -eq 0 ] && directorys=`pwd` || directorys=$@
 2 
 3 linkchk () {
 4 for element in $1/*; do
 5 [ -h "$element" -a ! -e "$element" ] && echo \"$element\"
 6 [ -d "$element" ] && linkchk $element
 7 # Of course, '-h' tests for symbolic link, '-d' for directory.
 8 done
 9 }
10 
11 for directory in $directorys; do
12 if [ -d $directory ]
13 then linkchk $directory
14 else
15 echo "$directory is not a directory"
16 echo "Usage: $0 dir1 dir2 ..."
17 fi
18 done
19 exit $? 

这是一个测试死链接的脚本,我不能立即第5行:

[ -h "$element" -a ! -e "$element" ] && echo \"$element\"

-h 判断一个链接是否为符号链接,既然-h "$element"成立,说明这个符号链接是存在的,后面为什么又要与上! -e "$element“,同一个参数为什么前面判断它存在,后面又判断它不存在呢?这不是自相矛盾吗?

 

 

My&Captain的主页 My&Captain | 初学一级 | 园豆:132
提问于:2017-07-08 23:04
< >
分享
最佳答案
0

经过一番仔细查看,发现符号链接文件在原文件被删除的情况下,符号链接文件的属性是存在的(-h "$element" ,但是其内容(它的值,比如cat "$selemnt" )是不存在的,所以满足[ -h "$selemnt" -a ! -e "$selemnt" ]即属性存在并且值不存在的情况

My&Captain | 初学一级 |园豆:132 | 2017-07-11 09:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册