shell script的问题,有明白的么?高分

这段代码有什么问题,怎么改?快!!
#!/bin/sh
# remove files with name pattern matching regexp
[ x$1 = x ] && { echo -n "Enter directory: "; read dir } || dir=$1
[ x$2 = x ] && { echo -n "Enter pattern: "; read pat } || pat=$1
find $dir > /tmp/listing
cmd=’rm ‘grep ’$pat’ /tmp/listing‘’
echo "Running command $cmd"; eval $cmd
rm /tmp/listing

首先你要明白这个程序的逻辑。
x是用来判断 你的位置参数 当位置有参数时 test 为false 执行 dir=$1 把位置参数1代入到dir变量
当test为true时执行 { echo -n "Enter directory: "; read dir } #让你手动输入dir的变量值
我不明白这个中括号的含义,因为这里不加中括号也可以运行。这个中括号加的我感觉有问题。然后find 路径 的内容重定向到一个listing的文本文件里
cmd=’rm ‘grep ’$pat’ /tmp/listing‘’ 你这句我不知道这么写行不行。连续套两个反引号,这种用法。我不知道是否可行。而且$pat 用的是单引号,应该用双引号。要不pat变量是带不进来的。我没这么用过,根据相同的符号在shell中只会按顺序解释,不是最近匹配原则
我判断这么写是不行的。但是如果我来写的话,我会把grep出来的文件名存为一个数组。
通过一个循环进行rm ,而且rm还未使用-f 这个参数。肯定会报错。
具体还是看你脚本逻辑。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-14
错误百出。

x 是个啥?
从头到尾都没定义。
还有,运行脚本要带两个参数的,$1、$2就分别对应这两个参数。

pat=$1 应该是 pat=$2

这句也有问题,引号不匹配。
cmd=’rm ‘grep ’$pat’ /tmp/listing‘’

建议重新写。追问

这些都是笔误,我需要的是重点~~谢谢

追答

错误太多,以至于看不出重点。
你直接告诉我你要干什么,我帮你重新写个。

本回答被提问者和网友采纳
第2个回答  2012-06-14
这个是根据正则表达式查找文件,并将其删除的脚本。

问题主要出在前两行,find哪行也有点小问题,现在主要是我不明白你要做什么
你从哪找来的这么奇葩的代码?追问

什么问题,会导致怎么样的错误,怎么改?这就是要做的~~谢谢

追答

你前两行要干嘛?

追问

read dir 和read pat么

追答

哪不久结了,你
echo -n "Enter directory: "; read dir
不久解决问题了么?
前面那个 判断是做什么用的?

追问

[ x$1 = x ] && { echo -n "Enter directory: "; read dir }
[ x$2 = x ] && { echo -n "Enter pattern: "; read pat }

这样改么?

追答

#!/bin/sh
# remove files with name pattern matching regexp
echo -n "Enter directory: "; read dir
echo -n "Enter pattern: "; read pat
for loop in `find $dir -name "*$pat*"`
do
rm $loop && echo "$loop has been removed!"
done

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网