Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1491998
  • 博文数量: 263
  • 博客积分: 10851
  • 博客等级: 上将
  • 技术积分: 2627
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 22:40
文章分类

全部博文(263)

文章存档

2013年(4)

2012年(25)

2011年(33)

2010年(50)

2009年(138)

2008年(13)

分类: LINUX

2009-11-21 00:12:13

CU的shell版的一个帖子,看你会回答多少哦, 尤其还是为什么eval要那么用? 可以不用么
哪位有耐心的好心人可以帮我解释一下这个程序。
刚开始学习Shell,不太懂。

#!/bin/sh
if test $# -lt 2
then
        echo "usage: `basename $0` [...]" \
         " [<--> [...]]" 1>&2    # 1>&2是什么意思?在这里什么作用?
        exit 1      # exit在这里什么作用?
fi
str="$1" && shift      # shift具体作用?
i=0
while test "x$1" != "x"
do
        test "x$1" == "x--" && { shift; break; }       
        test -d "$1" || { 
                echo "`basename $0`: $1: no such directory" 1>&2
                exit 1
        }
        d=dir${i}               #这句还有下面一句看不懂
        eval $d=\"\$1\" && shift           
        i=`expr $i + 1`
done
j=0
while test $j -lt $i    #这个while循环的目的是什么?
do
        d=`eval echo \$\{dir$j\}`     # 完全看不懂了。。。
        case $d in
        -*) d="./$d";;         # 怎么跟火星文似的。。。
        esac
        find "$d" -type f -print0 | xargs -0 grep "$@" -- "$str"      # -type,-print0,-0,"$@" -- "$str" 不太明白。。。
        j=`expr $j + 1`
done
exit 0

谁能帮我透彻的解释一下啊? 这是老师上课举得一个例子,还没学多少,就拿这么个例子来讲,讲的我一头雾水。。
先谢过了!!!

阅读(997) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~