bash编程,while嵌套case语句, file不能判断文件存在与否
写一个脚本, 完成如下要求
(1)脚本可接受参数 : start, stop, restart, status,
(2)如果参数非非法, 提示使用格式后报错退出;
(3)如果是start, 则创建/tmp/test/SCREPT_NAME, 并显示"启动成功";
考虑, 如果事先已启动一次, 如何处理?
(4)如果是stop, 则删除/tmp/test/SCREPT_NAME文件, 并显示"停止完成";
考虑: 如果事先已经停止, 如何处理?
(5)如果是restart, 先stop, 再start
考虑: 如果原本没有start, 如何处理?
(6)如果是status, 则
如果/var/lock/subsys/SCREPT_NAME存在, 则显示"SCRIPT_NAME is runing..."
如果/var/lock/subsys/SCREPT_NAME不存在, 则显示"SCRIPT_NAME is stopped..."
其中: SCRIPT_NAME为当前服务名;
根据要求, 需判断两个字符串, 例如 start network
按照文件'network'存在与否, 先分为两个循环
按照指令'start', 确认对文件的操作
代码如下:
#!/bin/bash
#
#TEST SERVICE
# Version 0.01 declare -a dir="/tmp/test/"
echo "TEST SERVICE: 以空格分割"
echo "例如: start network"
echo "===quit 退出====="
echo "================="
while read -p 'Command # :' a;do
flag=`echo $a | cut -d ' ' -f1` && name=`echo $a | cut -d' ' -f2` &> /dev/null if [ -e $flag -o $name ];then #如果两个字符串都存在
if [ $flag == 'quit' ];then exit;fi
if [ -f $dir$name ] ;then #如果$name文件已经存在, 即服务已经启动
echo "$dir$name已存在";
case $flag in
start) echo "$name服务已启动";;
stop) rm -f $dir$name; echo "$name服务已停止";;
restart) rm -f $dir$name; touch $dir$name; echo "$name已经重新创建并启动";;
status) echo "$name is runing...";;
*) echo "Wrong using! input example : start network";;
esac
else #如果$name文件不存在
echo "$name不存在";
case $flag in start) touch $dir$name;echo "$name服务已创建成功";;
stop) echo "停止失败,${name}服务已被其他用户或程序停止";;
restart) touch $dir$name; echo "$name尚未启动,启动中";;
status) echo "$name is stopped...";;
*) echo "Wrong using! input example : start network";; esac
fi
else #如果$flag或者$name有一个不存在, 即输入参数错误
echo "Wrong using! input example : start network" #输入错误, 提示语法
fi
done
注意: 起初在判断文件是否存在时使用 file $dir$name , 但是无论怎样判断都是返回文件已经存在, 表面原因如下:

即, 无论 $dir$name 存在与否, file $dir$name 的状态返回值都将是0, 即表示成功
所以不能使用file命令来判断文件是否存在.
man file 返回值项如下:
RETURN CODE
file returns 0 on success, and non-zero on error.
If the file named by the file operand does not exist, cannot be read, or the type of the file named by the file operand cannot be determined, this
is not be considered an error that affects the exit status. //如果文件不存在, 打不开, 文件格式不确定, 这些情况都不会返回error的状态码;
运行结果:

bash编程,while嵌套case语句, file不能判断文件存在与否的更多相关文章
- shell脚本编程基础之case语句
基础简介 脚本编程分为: 面向过程 选择结构:if语句,单分支.双分支.多分支:case语句 控制结构:顺序结构(默认) 循环结构:for.while.until 面向对象 case语句结构 case ...
- linux bash shell中case语句的实例
本文介绍下,在bash shell编程中,有关case语句的一个例子,学习下case语句的用法,有需要的朋友参考下. 本文转自:http://www.jbxue.com/article/13377.h ...
- bash编程之case语句,函数
bash脚本编程:之case语句 条件测试: 0: 成功 1-255: 失败 命令: [ expression ] [[ expression ]] test expression exP ...
- if语句和case语句用法展示
if语句和case语句用法展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.单分支if条件语句 1>.语法格式一 if [ 条件判断式 ];then 源代码 fi 2& ...
- JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤
JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...
- 【shell】shell编程(三)-if,select,case语句
通过前两篇文章,我们掌握了shell的一些基本写法和变量的使用,以及基本数据类型的运算.那么,本次就将要学习shell的结构化命令了,也就是我们其它编程语言中的条件选择语句及循环语句. 不过,在学习s ...
- bash编程之多分支if 语句及for循环
第十七章.bash编程之多分支if 语句及for循环 if语句三种格式 多分支if语句练习 for循环 17.1.if语句的三种格式 单分支if语句 if condition;then 条件为真执行的 ...
- bash 编程中循环语句用法
1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; t ...
- Shell编程之条件语句:if、case语句
Shell编程之条件语句:if.case语句 一.条件测试 1)test命令测试 2)整数值比较 ...
随机推荐
- [LeetCode] 2. Add Two Numbers 两个数字相加 java语言实现 C++语言实现
[LeetCode] Add Two Numbers 两个数字相加 You are given two non-empty linked lists representing two non-ne ...
- mysql实战45讲 (三) 事务隔离:为什么你改了我还看不见 极客时间读书笔记
提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转100块钱,而此时你的银行卡只有100块钱. 转账过程具体到程序里会有一系列的操作,比如查询余额 ...
- POJ 2189 枚举
题意: n头牛,p长度的道路,问至多包括c头牛的道路最长有多长. 思路: 按照题意暴力就好-- 注意边界. // by SiriusRen #include <cstdio> #inclu ...
- Linux命令locate
centos安装locate命令 centos6.3刚初始化安装完毕,有个配置文件不知道存在什么地方,想用locate命令来查找下,发现系统提示,找不到该命令.以前经常用的命令为什么找不到了呢???原 ...
- SQL SERVER 将一个数据库中的表和数据复制到另一个数据库中
第一种情况:将A数据库.dbo.A表的数据追加到B数据库.dbo.B表中 (条件:此时B数据库中已创建好了B表) insert into B数据库.dbo.B表 select * from A数据库. ...
- mysql索引的注意事项
索引的优点 大大加快数据的查询速度 使用分组和排序进行数据查询时,可以显著减少查询时分组和排序的时间 创建唯一索引,能够保证数据库表中每一行数据的唯一性 在实现数据的参考完整性方面,可以加速表和表之间 ...
- X86 X64 X86_64 AMD64 区别
X86:32位(一般i386是32位CPU的统称) X64:64位(代表CPU:IA64,现在几乎没有这样纯粹的64位CPU,都是兼容32位的64位CPU,如下) X86_64:兼容32位的64位CP ...
- Vue.js Ajax动态参数与列表显示
一.动态参数显示 1.引入js <script type="text/javascript" src="/js/vue.min.js"></s ...
- jQuery学习(四)——使用JQ完成表格隔行换色
1.步骤分析: 第一步:引入jquery的类库 第二步:直接写页面加载函数 第三步:直接使用jquery的选择器(组合选择)拿到需要操作的元素(奇数行和偶数行) 第四步:分别使用CSS的方法(css( ...
- js中深拷贝代码实现
function copy(original,o){ if(typeof original != 'object') return original; var o = o || (Array.isAr ...