下面是判断目录是否为链接目录的脚本,有几点不明白

sh/bash/dash/ksh/zsh等Shell脚本
回复
糊涂的小强
帖子: 71
注册时间: 2014-04-28 14:33
系统: ubuntu12&centos6

下面是判断目录是否为链接目录的脚本,有几点不明白

#1

帖子 糊涂的小强 » 2014-05-14 18:23

下面这个脚本好像不能实现辨别链接目录获文件,因为我在 /home/xxx下创建了2个链接文件
lrwxrwxrwx. 1 xxx xxx 1 May 14 18:08 b -> a
-rwxrw-r--. 1 xxx xxx 445 May 14 17:46 broken-link.sh
-rwxrw-r--. 3 xxx xxx 378 May 14 15:42 ceshi
lrwxrwxrwx. 1 xxx xxx 9 May 14 18:14 ceshi1 -> test_test

---------------------------------------------------------------------------------
[xxx@localhost ~]$ ./broken-link.sh /home/xxx
hello
over

---------------------------------------------------------------------------------脚本如下
#!/bin/bash
[ $# -eq 0 ] && directorys=$@
linkchk () {
for element in $1/*; do
[ -h "$element" -a ! -e "$element" ] && echo \"$element\"---- -a ! -e 这几个参数是什么用法,不明白
[ -d "$element" ] && linkchk $element
done
}
########################
echo "hello"
for directory in $directorys;do
if [ -d $directory ]
then linkchk $directory
else
echo "$directory is not a directory"
echo "Usage: $0 dir1 dir2 ..."
fi
done
echo "over"
exit 0
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 下面是判断目录是否为链接目录的脚本,有几点不明白

#2

帖子 astolia » 2014-05-14 19:17

第一行代码就错了。把[ $# -eq 0 ] &&删掉
-a ! -e这几个去看man

代码: 全选

man [
糊涂的小强
帖子: 71
注册时间: 2014-04-28 14:33
系统: ubuntu12&centos6

Re: 下面是判断目录是否为链接目录的脚本,有几点不明白

#3

帖子 糊涂的小强 » 2014-05-14 20:09

astolia 写了:第一行代码就错了。把[ $# -eq 0 ] &&删掉
-a ! -e这几个去看man

代码: 全选

man [
单个 -a是指 存在,-e好像也是的,好像被废弃了,他们又与!结合,而且又没和-h放在一起,很费解
糊涂的小强
帖子: 71
注册时间: 2014-04-28 14:33
系统: ubuntu12&centos6

Re: 下面是判断目录是否为链接目录的脚本,有几点不明白

#4

帖子 糊涂的小强 » 2014-05-14 20:31

糊涂的小强 写了:
astolia 写了:第一行代码就错了。把[ $# -eq 0 ] &&删掉
-a ! -e这几个去看man

代码: 全选

man [
单个 -a是指 存在,-e好像也是的,好像被废弃了,他们又与!结合,而且又没和-h放在一起,很费解
重新测试了 几遍 -a ! -e $element a应该是全部显示 不管 $elemen 存在与否,-e 表示$element必须是存在的文件,!就是逻辑取反,不知到 是不是这样
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 下面是判断目录是否为链接目录的脚本,有几点不明白

#5

帖子 astolia » 2014-05-14 22:38

我们看的man不是同一个?
EXPRESSION1 -a EXPRESSION2
both EXPRESSION1 and EXPRESSION2 are true
! EXPRESSION
EXPRESSION is false
-e FILE
FILE exists
-h FILE
FILE exists and is a symbolic link (same as -L)
[ -h "$element" -a ! -e "$element" ]
就是必须满足-h "$element"但同时不能满足-e "$element"
Except for -h and -L, all FILE-related tests dereference symbolic links.
也就是"$element"是一个符号链接,但其链接的对象不存在
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 下面是判断目录是否为链接目录的脚本,有几点不明白

#6

帖子 eexpress » 2014-05-15 8:48

-d 配合 readlink
● 鸣学
糊涂的小强
帖子: 71
注册时间: 2014-04-28 14:33
系统: ubuntu12&centos6

Re: 下面是判断目录是否为链接目录的脚本,有几点不明白

#7

帖子 糊涂的小强 » 2014-05-15 9:52

astolia 写了:我们看的man不是同一个?
EXPRESSION1 -a EXPRESSION2
both EXPRESSION1 and EXPRESSION2 are true
! EXPRESSION
EXPRESSION is false
-e FILE
FILE exists
-h FILE
FILE exists and is a symbolic link (same as -L)
[ -h "$element" -a ! -e "$element" ]
就是必须满足-h "$element"但同时不能满足-e "$element"
Except for -h and -L, all FILE-related tests dereference symbolic links.
也就是"$element"是一个符号链接,但其链接的对象不存在
我没有看man,是通过测试猜测的,没太留意你给的提示man [ ,不过你不说,还真不知道可以 man [,潜意识没把他当成命令,另外我的centos 只能man test,man [ 提示 no normal entry for [,不过这已经不重要了, [ 就是 test的意思。
糊涂的小强
帖子: 71
注册时间: 2014-04-28 14:33
系统: ubuntu12&centos6

Re: 下面是判断目录是否为链接目录的脚本,有几点不明白

#8

帖子 糊涂的小强 » 2014-05-15 9:53

eexpress 写了:-d 配合 readlink
不太明白哦
回复