一个shell的考试题求解答和详细解释

假设现在有一个名为interesting的命令,它接收一个文件名作为参数并返回一个“yes”如果文件被判定为有趣,返回一个“no”如果文件被判定为无趣。要求:写一个bas... 假设现在有一个名为interesting的命令,它接收一个文件名作为参数并返回一个“yes”如果文件被判定为有趣,返回一个“no”如果文件被判定为无趣。
要求:
写一个bash script接收一个目录名字作为参数,你对此目录以及它的子目录都有可读权限,但是对于此目录以及它的子目录下的文件不一定有。要求在文件不可读时输出一句“XX文件不可读”(XX是file name)。
然后记录目录下所有文件有趣的数量(包括子目录中的文件,子目录本身不算在内)。
除了不可读的错误报告之外,这个bash脚本只输出一个数字,那就是有趣文件的数量。

以上就是考试题,难晕了,求大神解答。
展开
 我来答
百度网友853f739
2019-04-26 · TA获得超过146个赞
知道小有建树答主
回答量:110
采纳率:100%
帮助的人:88.2万
展开全部
#!/bin/bash

#目录参数
dirname=$1
#没有输入参数,退出
if [ $# -ne 1 ];then
echo "Usage: $0 <dir>"
exit 1
fi

intcounter=0
#目录存在时进入,用find找出指定目录下所有的文件(包括子目录下的文件)
if [ -e $dirname ];then
#find参数-type表示文件类型,d表示目录,f表示文件;
#-ls不是必须的,可以不加,不加的时候,也不需要awk分列;
#find $dirname -type f 2>/dev/null|while read filename; do
#2>/dev/null屏蔽错误输出,-ls后第11列是文件名,所以awk print $11
find $dirname -type f -ls 2>/dev/null| awk '{print $11}' | while read filename; do
int=$(interesting $filename)
case $int in
yes) intcounter=$(echo "$intcounter+1"|bc) ;;
no) ;;
*) echo "$(echo $filename|awk -F'/' '{print $NF}') 不可读" ;;
esac
done
echo $intcounter
else #目录不存在,报错
echo "$dirname not exists"
fi
exit 0
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式