Linux Shell脚本的一道作业
今天刚学完Linux基础,老师作业中有这样一道题:
先把/etc 目录下面(不包括子目录)所有以.conf 结尾的文件负责到/tmp 目录下面去,然后写一个脚本,实现把tmp 目录所有以.conf 结尾的文件,后缀改成.config。
我的思路是这样的:(复制就不说了,直接cp就好)
- 用ls列出/tmp目录中的所有文件信息;
- 使用grey过滤后缀.conf;
- 使用awk获取文件名;
- 根据文件名获取具体路径和重命名后的路径;
- 用mv重命名。
#!/bin/bash NAME="" NEWNAME="" "ls -l /tmp/ | awk -F {print $9}" | grep .conf | while read line do NAME="/tmp/$line" NEWNAME="/tmp/`echo "$line" | awk -F . {print $1}`.config" mv "$NAME" "$NEWNAME" done#!/bin/bash NAME="" NEWNAME="" "ls -l /tmp/ | awk -F {print $9}" | grep .conf | while read line do NAME="/tmp/$line" NEWNAME="/tmp/`echo "$line" | awk -F . {print $1}`.config" mv "$NAME" "$NEWNAME" done
执行后果断出错: 执行后果断出错:
我也是挺佩服自己出这种错误的,把ls -l /tmp/ | awk -F {print $9}用""引起来相当于把他整体当作一个文件给 | 去处理,所以又自作聪明的加上了反引号: 我也是挺佩服自己出这种错误的,把ls -l /tmp/ | awk -F {print $9}用""引起来相当于把他整体当作一个文件给 | 去处理,所以又自作聪明的加上了反引号:
#!/bin/bash NAME="" NEWNAME="" "`ls -l /tmp/ | awk -F {print $9}`" | grep .conf | while read line do NAME="/tmp/$line" NEWNAME="/tmp/`echo "$line" | awk -F . {print $1}`.config" mv "$NAME" "$NEWNAME" done#!/bin/bash NAME="" NEWNAME="" "`ls -l /tmp/ | awk -F {print $9}`" | grep .conf | while read line do NAME="/tmp/$line" NEWNAME="/tmp/`echo "$line" | awk -F . {print $1}`.config" mv "$NAME" "$NEWNAME" done
这就错的更厉害了。。 这就错的更厉害了。。
#!/bin/bash NAME="" NEWNAME="" "`ls -l /tmp/ | awk -F {print $9}`" | grep .conf | while read line do NAME="/tmp/$line" NEWNAME="/tmp/`echo "$line" | awk -F . {print $1}`.config" mv "$NAME" "$NEWNAME" done 这就错的更厉害了。。
图太长,没有接完,总之就是把我的查找结果当成了一个命令,当然不会有这个命令,其实直接写就好,什么都不用加: 图太长,没有接完,总之就是把我的查找结果当成了一个命令,当然不会有这个命令,其实直接写就好,什么都不用加:
#!/bin/bash NAME="" NEWNAME="" ls -l /tmp/ | awk -F {print $9} | grep .conf | while read line do NAME="/tmp/$line" NEWNAME="/tmp/`echo "$line" | awk -F . {print $1}`.config" mv "$NAME" "$NEWNAME" done#!/bin/bash NAME="" NEWNAME="" ls -l /tmp/ | awk -F {print $9} | grep .conf | while read line do NAME="/tmp/$line" NEWNAME="/tmp/`echo "$line" | awk -F . {print $1}`.config" mv "$NAME" "$NEWNAME" done
--------------------------------------------------------华丽的分割线--------------------------------------------------------------------------------------------------- --------------------------------------------------------华丽的分割线---------------------------------------------------------------------------------------------------
今天看了一下同学的做法,发现我想的太复杂了。。。 今天看了一下同学的做法,发现我想的太复杂了。。。
有一种茅塞顿开的感觉,看来我的思想还停留在Java编程上,没有认识到Shell中一切皆文件的特性,死板的按Java的思路,现获取文件名再做处理,其实Shell中可以直接通过命令来查询文件名。
看来还有很多要学的,加油吧!