这段代码有什么问题,怎么改?快!!
#!/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 这个参数。肯定会报错。
具体还是看你脚本逻辑。
x 是个啥?
从头到尾都没定义。
还有,运行脚本要带两个参数的,$1、$2就分别对应这两个参数。
pat=$1 应该是 pat=$2
这句也有问题,引号不匹配。
cmd=’rm ‘grep ’$pat’ /tmp/listing‘’
建议重新写。追问
这些都是笔误,我需要的是重点~~谢谢
追答错误太多,以至于看不出重点。
你直接告诉我你要干什么,我帮你重新写个。
问题主要出在前两行,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