设计一个 shell 脚本:判断当前工作目录下所有的文件类型,如果是目录显
示目录名,如果是文件,查看文件内容,如果都不是,显示提示信息
当前工作目录就是 /root
,目录下存在文件 test.sh
,我们直接执行:
[root@htlwk0001host ~]# pwd
/root
[root@htlwk0001host ~]# test.sh
-bash: test.sh: 未找到命令
./test.sh
的意思是说在当前的工作目录下执行 test.sh
。如果不加上./
,shell 可能会响应找不到指定文件的错误提示信息。因为当前的工作目录 (/root)可能不在执行程序时默认的搜索路径之列。也就是说,当前目录不在环境变量 PATH 的内容之中。
查看 PATH 的内容可用 echo $PATH
命令:
[root@htlwk0001host ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
如上查询结果可知 /root/ 不在环境变量 PATH 中,所以必须加上 ./
,告诉解释器脚本文件在哪里。
我可以为您提供以下解决方案:
首先,需要使用for
循环遍历当前目录下的所有文件和目录,利用if语句判断文件类型。判断文件类型可以使用-d
判断是否为目录,-f
判断是否为普通文件,然后再使用cat
命令查看文件内容。最后需要使用echo
命令分别输出每个文件或目录。
示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
上述代码中,$file
代表当前遍历到的文件名,通过if
语句分别判断它是目录还是普通文件,如果是目录,使用echo
输出目录名,如果是普通文件,使用echo
输出文件名,并使用cat
命令查看文件内容,如果既不是目录也不是普通文件,使用echo
输出"Unknown"。
如果您希望将上述代码封装成一个函数,可以这样定义函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
上述代码中,将for
循环封装到了一个名为list_files
的函数中,并在函数内部定义$file
变量,通过调用该函数即可运行脚本。
希望这些信息可以帮助您。如果您还有其他问题,请随时提问。