Linux Shell脚本的一道作业

来源:互联网 发布:淘宝男士 编辑:程序博客网 时间:2024/06/01 12:42

今天刚学完Linux基础,老师作业中有这样一道题:

先把/etc 目录下面(不包括子目录)所有以.conf 结尾的文件负责到/tmp 目录下面去,然后写一个脚本,实现把tmp 目录所有以.conf 结尾的文件,后缀改成.config。


我的思路是这样的:(复制就不说了,直接cp就好)

  1. 用ls列出/tmp目录中的所有文件信息;
  2. 使用grey过滤后缀.conf;
  3. 使用awk获取文件名;
  4. 根据文件名获取具体路径和重命名后的路径;
  5. 用mv重命名。
然后写出了如下的脚本:

#!/bin/bashNAME=""NEWNAME="""ls -l /tmp/ | awk -F ' ' '{print $9}'" | grep .conf | while read linedoNAME="/tmp/$line"NEWNAME="/tmp/`echo "$line" | awk -F '.' '{print $1}'`.config"mv "$NAME" "$NEWNAME"done
执行后果断出错:
Linux作业01错误
我也是挺佩服自己出这种错误的,把ls -l /tmp/ | awk -F ' ' '{print $9}'用""引起来相当于把他整体当作一个文件给 | 去处理,所以又自作聪明的加上了反引号:
#!/bin/bashNAME=""NEWNAME="""`ls -l /tmp/ | awk -F ' ' '{print $9}'`" | grep .conf | while read linedoNAME="/tmp/$line"NEWNAME="/tmp/`echo "$line" | awk -F '.' '{print $1}'`.config"mv "$NAME" "$NEWNAME"done
这就错的更厉害了。。

图太长,没有接完,总之就是把我的查找结果当成了一个命令,当然不会有这个命令,其实直接写就好,什么都不用加:
#!/bin/bashNAME=""NEWNAME=""ls -l /tmp/ | awk -F ' ' '{print $9}' | grep .conf | while read linedoNAME="/tmp/$line"NEWNAME="/tmp/`echo "$line" | awk -F '.' '{print $1}'`.config"mv "$NAME" "$NEWNAME"done
没有报错,查询/tmp目录结果如下:


--------------------------------------------------------华丽的分割线---------------------------------------------------------------------------------------------------

今天看了一下同学的做法,发现我想的太复杂了。。。


有一种茅塞顿开的感觉,看来我的思想还停留在Java编程上,没有认识到Shell中一切皆文件的特性,死板的按Java的思路,现获取文件名再做处理,其实Shell中可以直接通过命令来查询文件名。

看来还有很多要学的,加油吧!

原创粉丝点击