一道练习题:
“写出一个 bash 脚本,可以使它自动读取一个文件夹(例如bash_homework/)的内容,将该文件夹下文件的名字输出到 filenames.txt, 子文件夹的名字输出到 dirname.txt 。”
示例文件下载:bash_homework.zip
以下是我写出的bash脚本readname.sh,但运行结果并不理想:
#!bin/bash
CUR_DIR=`ls ./bash_homework`
echo $CUR_DIR
for val in $CUR_DIR
do
if [ -f "$val" ];then
echo "FILE: $val"
#echo "$val" >> filenames.txt
elif [ -d "$val" ];then
echo "DIR: $val"
#echo "$val" >> dirname.txt
else
echo "unknown: $val"
fi
done
exit 0
思路:
先将该文件夹下的内容存入变量“CUR_DIR”,再通过条件语句依次判断,[ -f ]判断是否为文件;[ -d ]判断是否为目录。
运行后,并没有正确判断文件/目录:
也尝试过将ls添加参数ls -F,但只是文件夹名后多了“/”,判断依旧错误。
该如何修改才能正确运行呢?
自问自答,问题已解决。
!bin/bash
echo "filenames are following:" > filename.txt
echo "dirnames are following:" > dirname.txt
for val in ./bash_homework/*
do
if [ -f $val ];then
echo "FILE: $val"
echo "$val" | awk -F "/" '{print $3}' >> filename.txt
elif [ -d $val ];then
echo "DIR: $val"
echo "$val" | awk -F "/" '{print $3}' >> dirname.txt
else
echo "unknown: $val"
fi
done
exit 0
一开始不使用`ls`传值,直接使用 in ./dirname/*
生信调酒师