《Advanced Bash-scripting Guide》学习(五):检查一个可执行文件是否存在

本文所选的例子来自于《Advanced Bash-scripting Gudie》一书,译者 杨春敏 黄毅

ABS书上的例子是这样的:

#!/bin/bash

echo hello;echo there

if [ -x "$filename" ]; then             #注意分号后面的空格
   echo "File $filename exists."; cp $filename $filename.bak
else
   echo "File $filename not found."; touch $filename
fi; echo "File test complete."

 

这个脚本有个问题:

1.filename是个变量,$filename缺乏传入值

2.-x是检测文件是否存在且具有可执行权限,如果存在且具有可执行权限,为真,但是else之后,仅仅echo文件没有找到,这样不是特别清楚(其实我们也可以认为符合名字叫filename的具有可执行权限的文件不存在,尽管名字叫filename但不具有执行权限的文件是存在的)。为了更清晰的表达,应该分为两种情况:a.文件不存在 b.文件存在但不具有执行权限。


一个改进的脚本

#!/bin/bash

echo hello;echo there
E_ERRORARGS=65
read -p "please input filename: " -t 30 filename

if [ -z "$filename ]; then                                                             #检查传入的变量值是否为空   
   echo "Usage: `basename $0` filename can't be null."
   exit $E_ERRORARGS
elif [ -x "$filename ]; then                                                           #检查文件是否存在且具有执行权限
   echo "File $filename exists and have exec power."; cp $filename $filename.bak       #如果文件存在,打印提示语句,并修改文件名
elif [ -e "$filename ]; then                                                           #检查文件是否存在
   echo "File $filename exists and have no exec power."                                #如果文件存在但不具有可执行权限,打印提示语句
else
   echo "File $filename not found."; touch $filename                                   #如果文件不存在,创建文件
fi; echo "File test complete."

 

脚本运行结果

我这里在sh下有个存在且具有执行权限的文件123,有个存在但不具有执行权限的文件456,没有文件789(文件789最终会被创建)



#!


 


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/7147652.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(245)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示