写一个脚本, 完成如下要求
(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不能判断文件存在与否的更多相关文章

  1. shell脚本编程基础之case语句

    基础简介 脚本编程分为: 面向过程 选择结构:if语句,单分支.双分支.多分支:case语句 控制结构:顺序结构(默认) 循环结构:for.while.until 面向对象 case语句结构 case ...

  2. linux bash shell中case语句的实例

    本文介绍下,在bash shell编程中,有关case语句的一个例子,学习下case语句的用法,有需要的朋友参考下. 本文转自:http://www.jbxue.com/article/13377.h ...

  3. bash编程之case语句,函数

    bash脚本编程:之case语句   条件测试: 0: 成功 1-255: 失败   命令: [ expression ] [[ expression ]] test expression   exP ...

  4. if语句和case语句用法展示

    if语句和case语句用法展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.单分支if条件语句 1>.语法格式一 if [ 条件判断式 ];then 源代码 fi 2& ...

  5. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

  6. 【shell】shell编程(三)-if,select,case语句

    通过前两篇文章,我们掌握了shell的一些基本写法和变量的使用,以及基本数据类型的运算.那么,本次就将要学习shell的结构化命令了,也就是我们其它编程语言中的条件选择语句及循环语句. 不过,在学习s ...

  7. bash编程之多分支if 语句及for循环

    第十七章.bash编程之多分支if 语句及for循环 if语句三种格式 多分支if语句练习 for循环 17.1.if语句的三种格式 单分支if语句 if condition;then 条件为真执行的 ...

  8. bash 编程中循环语句用法

    1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; t ...

  9. Shell编程之条件语句:if、case语句

    Shell编程之条件语句:if.case语句               一.条件测试                1)test命令测试                2)整数值比较         ...

随机推荐

  1. vc应用CPictureEx类(重载CStatic类)加载gif动画

    1.PictureEx.h文件: //////////////////////////////////////////////////////////////////////// PictureEx. ...

  2. Spark SQL - 对大规模的结构化数据进行批处理和流式处理

    Spark SQL - 对大规模的结构化数据进行批处理和流式处理 大体翻译自:https://jaceklaskowski.gitbooks.io/mastering-apache-spark/con ...

  3. RGB与16进制色互转

      点击进入新版 <前端在线工具站> CSS, JavaScript 压缩YUI compressor, JSPacker...HTML特殊符号对照表PNG,GIF,JPG... Base ...

  4. iOS开发者中心重置设备列表

    苹果开发者账号允许的测试设备为100台,如果你注册了,这台机器就算是一个名额,禁用也算一个名额,仍被计入机器总数,每年可以重置一次,那我们怎么重置机器数量呢? 我们需要给苹果发送申请: https:/ ...

  5. [codevs3955]最长严格上升子序列(加强版)

    题目大意:给你一个序列,要你求该序列中最长严格上升子序列的长度. 解题思路:此题算是一道LIS模板题.普通的$O(n^2)$的LIS是会TLE的,因为$n\le 1000000$,所以此题要用单调队列 ...

  6. redis 多实例监控

    1.制作redis_low_discovery.sh脚本 mkdir -p /data/service/script/zabbix cd /data/service/script/zabbix cat ...

  7. 使用vue实现简单键盘,支持移动端和pc端

    常看到各种app应用中使用自定义的键盘,本例子中使用vue2实现个简单的键盘,支持在移动端和PC端使用,欢迎点赞,h5 ios输入框与键盘 兼容性优化 实现效果: Keyboard.vue <t ...

  8. VUEJS开发规范

    VUEJS开发规范 基于组件化开发理解 组件命名规范 结构化规范 注释规范 编码规范 基于组件化开发理解 什么是组件? ``` 组件其实就是页面组成的一部分,好比是电脑中的每一个元件(如硬盘.键盘.鼠 ...

  9. 洛谷 P1045 麦森数 (快速幂+高精度+算位数骚操作)

    这道题太精彩了! 我一开始想直接一波暴力算,然后叫上去只有50分,50分超时 然后我改成万位制提高运算效率,还是只有50分 然后我丧心病狂开long long用10的10次方作为一位,也就是100亿进 ...

  10. 题解 P3372 【【模板】线段树1 】(zkw)

    看了一下题解里的zkw线段树,感觉讲的不是很清楚啊(可能有清楚的但是我没翻到,望大佬勿怪). 决定自己写一篇...希望大家能看明白... zkw线段树是一种优秀的非递归线段树,速度比普通线段树快两道三 ...