微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – Shellscript错误处理

我正在编写一个非常简单的shell删除给定文件夹的文件,在这种情况下,所有.csv文件都存在于该文件夹中.

代码如下所示:

#!/bin/bash
# Used to clean folder

MinVal=0
Files=$(ls -1 *.csv | wc -l)


if [ $Files -gt $MinVal ];then
        rm *.csv
        echo -e "\e[31;43m***** DONE *****\e[0m"    

 else       
        echo -e "\e[31;43mThere is no valid file to delete, please check\e[0m"      


fi

shell脚本按预期工作,但是当您执行shell并且文件夹中没有.csv文件时,终端会说明以下内容

ls: cannot access *.csv: No such file or directory

当然它还会显示其他消息:

There is no valid file to delete, please check

有没有办法避免ls:无法访问* .csv:没有这样的文件或目录,直接进入else错误处理?

问候.

解决方法:

发生这种情况是因为* .csv被shell逐字传递给ls,这是认的POSIX行为.如果你想避免这种情况,你应该使用nullglob,以便返回任何内容的globs不返回任何内容,而不是返回输入的逐字字符串.这有一个问题,因为当没有提供文件时,ls有不同的行为.

请尝试这样做,这样可以避免在文件名中嵌入换行符时出现错误

shopt -s nullglob
filenames=( *.csv )  # put all files in an array
files="${#filenames[@]}"  # get number of files

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐