第一行是该shell脚本运行的环境,可以不用写。运行环境很多,有/bin/awk -f的还有其他的。
第二行是该脚本的信息说明干什么用的。一般shell脚本中以#开头的都是注释行,shell不会去执行的。
第三行也是脚本的一些信息,写明日期和作者,还有版本信息。
第四行就是指该脚本运行的路径了。比如脚本中的echo命令,这些命令一般要注明绝对路径的。路经有好多写明最主要的那个。
第五行就是使用export命令让路径在全局环境中生效了,而不仅是当前用户的当前shell环境。
**************以上的这几行都是一些准备工作,不过最好养成好的习惯**************
第七行是使用read定义一个交互的变量。等待用户输入后read函数读取屏幕的值,并付给dir变量。双引号中的信息是出现在屏幕的提示信息。这个经常用到哦
*********************第八行到第十一行是一种简单的if结构语句,当中括号中的条件为真时执行第九行和第十行的程序段。该结构以if开头和fi结尾。**************************
第八行是test的一个测试用例。test和中括号的作用一样。可以写成test -z $dir形式。中括号中有两个test命令模式,这两个是或的关系用-o来表示。如可以写成 test -z $dir || test -d $dir这样的形式。-z是测试是否为空,如果是空返回真,-d是测试是否为目录。如果不知道这个命令是否会得到自己的答案是可以在命令状态下先试试。比如我想得到为真可以这样测试 test -d /root && echo "this /root is a directory" || echo "this /root is NOT a directory"。如果屏幕输出this /root is a directroy表示test为真,因为两个之间的关系是与的关系。相反屏幕输出this /root is NOT a directory 说明||前面的为假。因为||前面和||后面的关系是或的关系。
第八行的意思是当输入的目录为空或者不是目录时执行第九和第十程序段。
第九行是当第八行为真时执行的输出双引号里的内容
第十行是退出脚本执行。
第十一行是if结构的结束标志。
第十二行是赋值。把ls得到的数据赋值给filen。这里有个反引号(就是ESC键下方的波浪号的那个键)的作用是执行里面的命令。需要记住的是和双引号、单引号的区别。
***第十三行到第三十四行是for循环结构。第15到第21是判断什么文件类型的,第23到第28是判断是权限的。这是一种for循环的结构。for中间都是以do开始的程序段以done结尾的。**
中间的就不说了,讲讲主要的1、第23到第28中per=$per……是说明权限不仅仅是一种,因此要写成这样的格式进行累加。2、filetype和per最后又多次一举赋值为空,是因为这些权限和类型再循环时是会累加的。