一个shell的考试题求解答和详细解释
假设现在有一个名为interesting的命令,它接收一个文件名作为参数并返回一个“yes”如果文件被判定为有趣,返回一个“no”如果文件被判定为无趣。要求:写一个bas...
假设现在有一个名为interesting的命令,它接收一个文件名作为参数并返回一个“yes”如果文件被判定为有趣,返回一个“no”如果文件被判定为无趣。
要求:
写一个bash script接收一个目录名字作为参数,你对此目录以及它的子目录都有可读权限,但是对于此目录以及它的子目录下的文件不一定有。要求在文件不可读时输出一句“XX文件不可读”(XX是file name)。
然后记录目录下所有文件有趣的数量(包括子目录中的文件,子目录本身不算在内)。
除了不可读的错误报告之外,这个bash脚本只输出一个数字,那就是有趣文件的数量。
以上就是考试题,难晕了,求大神解答。 展开
要求:
写一个bash script接收一个目录名字作为参数,你对此目录以及它的子目录都有可读权限,但是对于此目录以及它的子目录下的文件不一定有。要求在文件不可读时输出一句“XX文件不可读”(XX是file name)。
然后记录目录下所有文件有趣的数量(包括子目录中的文件,子目录本身不算在内)。
除了不可读的错误报告之外,这个bash脚本只输出一个数字,那就是有趣文件的数量。
以上就是考试题,难晕了,求大神解答。 展开
1个回答
展开全部
#!/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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询