【发布时间】:2016-12-04 06:14:57
【问题描述】:
如何编写一个名为 'abc' 的 bash shell 脚本,它接受一个参数,即目录的名称,并将扩展名“.xyz”添加到目录中所有可见文件中,但该文件还没有
我主要编写了更改当前目录中文件名的代码,但我无法让脚本接受参数(目录名)并更改该目录的文件名
#!/bin/bash
case $# in
0) echo "No directory name provided" >&2 ; exit 1;;
1) cd "${1}" || exit $?;;
*) echo "Too many parameters provided" >&2 ; exit 1;;
esac
for filename in *
do
echo $filename | grep "\.xyz$"
if [ "$?" -ne "0" ]
then mv "$filename" "$filename.old"
fi
done
其他说明包括: 在“abc”中,使用“for”控制结构来遍历所有非隐藏文件名 在 $1 中的目录名称中。另外,使用命令替换 使用 "ls $1" 而不是模棱两可的文件名,否则您将进入子目录。
编辑:问题的顶部已在下面回答,但第二部分要求我根据以下说明修改自己的代码:
修改用于创建将放入“文件名”变量的循环值的命令替换。不仅仅是“ls $1”,而是将输出通过管道传输到“grep”中。 “grep”将搜索所有不以“.xyz”结尾的文件名。这可以使用“grep -v”选项轻松完成。使用这种方法,您可以摆脱循环内的“echo ... | grep ...”和“if”控制结构,只需进行重命名即可。
我将如何实现这一点,因为根据我的理解,下面的答案已经只是搜索没有 .xyz 扩展名的文件名,但是它不被接受。
【问题讨论】:
-
很多事情没有意义。第一个
if子句是干什么用的?无论如何,您永远不会使用name。为什么echo$filename到/dev/null?它什么都不做。