《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最终会被创建)
#!
《Advanced Bash-scripting Guide》学习(五):检查一个可执行文件是否存在的更多相关文章
- advanced bash shell guide读书笔记
http://note.youdao.com/noteshare?id=fc23a679849b4627d131d3ef07c74a71
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- 《Python CookBook2》 第一章 文本 - 过滤字符串中不属于指定集合的字符 && 检查一个字符串是文本还是二进制
过滤字符串中不属于指定集合的字符 任务: 给定一个需要保留的字符串的集合,构建一个过滤函数,并可将其应用于任何字符串s,函数返回一个s的拷贝,该拷贝只包含指定字符集合中的元素. 解决方案: impor ...
- TweenMax动画库学习(五)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- advanced dom scripting dynamic web design techniques Part One DOM SCRIPTING IN DETAIL CHAPTER 1 DO IT RIGHT WITH BEST PRACTICES
You’re excited; your client is excited. All is well. You’ve just launched the client’s latest websit ...
- 《DOM Scripting》学习笔记-——第三章 DOM
<Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...
- 《DOM Scripting》学习笔记-——第二章 js语法
<Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...
- SVG 学习<五> SVG动画
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
随机推荐
- pmd 使用笔记
pmd是一块开源的代码静态分析工具,使用java编写,可以自定义规则来进行自己想要的分析.pmd可以单独使用,也可以作为idea.eclipse的插件使用.它的规则分为xpath规则,和java规则. ...
- 【Nginx】HTTP请求的11个处理阶段
Nginx将一个HTTP请求分成多个阶段.以模块为单位进行处理.这样做的优点是使处理过程更加灵活.减少耦合度.HTTP框架将处理分成了11个阶段,各个阶段能够包括随意多个HTTP模块并以流水线的方式处 ...
- PAAS、IAAS和SAAS区别
IaaS: Infrastructure-as-a-Service(基础设施即服务) 有了IaaS,你可以将硬件外包到别的地方去.IaaS公司会提供场外服务器,存储和网络硬件,你可以租用.节省了维护成 ...
- Android学习资源网站大全
https://github.com/zhujun2730/Android-Learning-Resources 整理了一些 Android 的博客链接.学习资源网站.站在巨人的肩膀上,会看得更远.整 ...
- MongoDB学习笔记—概念解析
Mongo基本概念 下表将帮助您更容易理解Mongo中的一些概念: SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection ...
- django-admin 修改admin自带模版
还不知道怎么指定修改每个页面,我就把把所有修改写在一个页面,通过url进行判断是否是是否显示修改内容,修改的是change_form.html ,在admin里面可以找到 {% block objec ...
- asp.net,缓存Cache
缓存Cache: >直接使用Cache["content"],缓存与Session不同,所有用户都可以共享.永不过期,由服务器自己维护,当内存不够时,会将老的缓存释放掉. & ...
- Django ORM --- 建表、查询、删除基础
1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的 ...
- String和StringBuilder、StringBuffer
Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder String 只读字符串,这里的只读并不是指String类型变量无法被修改,而是指String类 ...
- nginx日志中$request_body 十六进制字符(\\x22) 引号问题处理记录
在使用nginx记录访问日志时,发现在含有 request_body 的 PUT , POST 请求时,日志中会含有 x22 x9B x5C x09 x08 字符,不利于阅读和处理. 具体 支持 re ...