Linux脚本编程:使用两种循环语句输出和校验文件路径下的内容

Linux脚本编程:使用两种循环语句输出和校验文件路径下的内容

题目要求

用两种不同的循环语句(for/while/until…)实现以下功能:
(1)输入一个路径,然后使用第一种循环语句,以“文件类型:文件名绝对路径”的格式打印该路径下的所有文件和文件夹,不包含子目录和隐藏文件。如果文件的后缀为.txt,则修改为.abc,对源文件不做修改。要求有路径错误提示。
(2)保存第一种循环语句的输出到当前目录下的临时文件data中。
(3)使用第二种循环语句以同样方式遍历路径下的内容,一边遍历一边检查是否为data中的内容相同,是则返回1,否则返回0。
输出例子:
     /usr/local
     _:/usr/local/a.abc
     d:/usr/local/share
     …
     1

编程平台

本地

本地操作系统:Windows 10
本地虚拟机运行平台:VMware Workstation Pro 14
本地虚拟机镜像:CentOS-7-x86_64-Minimal-1908.iso

云端

云服务器提供商:阿里云计算有限公司
Linux发行版本及版本号:CentOS 7.6 64位

代码实现

#!/bin/bash
# 第一种循环语句for
echo -n "请输入一个路径(输入default则默认为/usr/share): "
read dir
if [[ ${dir} == "default" ]];then
	dir="/usr/share"
fi
if [ -e $dir -a -d $dir ];then
	{
	if [[ $dir -eq $'\n' ]];then # 判断是否为回车键或空白输入
		dir=`pwd`
	fi
	} >> /dev/null 2>&1
	echo $dir
    echo $dir > ./data
	for file in `ls $dir` # 遍历目录dir下的内容
	do
		dd="$dir$file" # 拼接目录与其子内容
		if [ ! -e $dd ];then # 处理用户输入的目录中末尾无斜杠的情况
			dd="$dir/$file" # 为名称之间添加斜杠
		fi
        type=`ls -ld $dd | cut -c1` # 获得文件类型
		echo "${type}:${dd/%.txt/.abc}"
        echo "${type}:${dd/%.txt/.abc}" >> ./data
	done
else # 路径错误处理
	echo $dir
    echo "$dir is not a directory!"
    echo $dir > ./data
	echo "$dir is not a directory!" >> ./data
fi

# 第二种循环语句while
dir=`head -1 ./data` # 获得用户输入的路径
result=1
n=2 # 当前定位到data文件的行数
if [ -e $dir -a -d $dir ];then
	files=(${dir%%/}/*) # 顺便删除用户最后可能输入的/
	i=0
	while [[ $i -lt ${#files[*]} ]]
	do
		dd="${files[$i]}" 
        type=`ls -ld $dd | cut -c1` # 获得文件类型
		data2="${type}:${dd/%.txt/.abc}"
		data1=`head -${n} ./data | tail -n 1`
		if [ "$data1" != "$data2" ];then # 逐行检查是否相同
			result=0
			break
		fi
		n=`expr ${n} + 1`
		let i++
	done
else 
	data2="$dir is not a directory!"
	data1=`head -${n} ./data | tail -n 1`
	if [ "$data1" != "$data2" ];then
		result=0
	fi
fi
echo $result

如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值