shell学习笔记--if,case

shell的控制流结构主要有if语句、for语句、case语句、while语句、until语句这五种,在shell中这些语句的用法有点类似C语言,很容易学会,但也很容易忘记,只有经常实用它们才不会很快忘记,像我之前看的时候很快就看完了,但是很久没用,过一阵子又把它忘记了,现在又重看了一遍才记起来,好了,下面将详细介绍这几种语句的用法:

1、if then else 语句

if then else语句的基本格式如下:

if 条件1
then 命令1
elif 条件2
then 命令2
else 命令3
fi

if语句以if开头,而以fi结束,在shell中的控制流结构的分支语句都是像这样开头跟结束的语句相反反过来,如下面的case语句,以case开头,以esac结束。elif即C语言的else if的意思。如果你只有一个条件,就没必要用到elif、else了,这些都是你根据需要去使用的。当然了,如果你有很多个条件,你也可以使用多个elif,就像C语言一样。

举个例子:

$cat iftest

#!/bin/sh
#iftest
if [ “10” -lt “12” ]
then
echo “yes,10 is less than 12”
fi

执行一下iftest

$./iftest

yes,10 is less than 12

这里的[]是测试命令,测试里面的内容是真还是假,如果为真则该测试命令返回的结果是真,如果为假则该测试命令返回的结果为假。这里要注意的是[]与中间的内容一定要在两边各留一个空格,否则会出错。如[“10” -lt “12”]这样是错误的写法,一定要在两边各留一个空格才是测试命令。这里可以看出,if后面跟着的是一条命令,if这里明明要跟一个条件才对啊,为什么会跟一条命令呢?这是因为在shell中,所有的命令执行后都有一个返回值,if是接收到该返回值作为它的条件,也就是真还是假这两种条件,如果该命令执行成功,则if的条件为真,失败则为假了。像我们平时执行ls、cp、touch、mkdir等等这些命令时系统都会返回一个值表示执行该命令是否成功,该返回值就保存在$?这里了,如果你要看它的值就可以用:echo $?来查看了。如:

$ls

a.txt b.doc

$echo $?

0

在linux中一般用0表示执行成功,而非0则表示失败。如:

if ls
thenecho “Yes”
elseecho “no”
fi

该程序执行后的结果将会打印出Yes。这里ls执行成功后返回的值为0(成功),if接收到成功信号则其条件为真,所以就打印出Yes了。这里不要跟C的if混淆了,在C中0为假,非0为真,而这里倒反过来了,0为真,非0则为假了。这个就涉及到linux的习惯了,因为linux习惯用0来表示成功,非0表示失败。这里还要小心,不能像这样用:if (“10” -lt “12”)。上面的[ “10” -lt “12” ]也是一个命令来的,相当于命令:test “10” -lt “12”。test是一个测试命令,如果要讲测试命令还有很多要讲,这里就直接讲控制流结构,至于测试命令有空再写了。

 

2、case 语句

case语句的格式如下:

case 值 in
模式1)命令1...;;
模式2)命令2...;;
......
esac

上面的;;有点相当于C中case中的break语句的意味了,即执行完该模式后跳出case语句,不过有点不同的就是,shell中的case语句如果没有;;就会报错,但是C中的case语句少了break,语法上还是正确的,只是在符合该模式后还会继续执行直到遇到break或直到结束为止。在shell的case语句中,可以使用匹配模式,就是前面说过的元字符匹配模式,而不是正则表达式的匹配。如:

* 匹配所有的字符

? 匹配单个字符

[...]匹配[]括起的字符

所以在C中使用default模式的,这里可以使用*来代替如:

$cat casetest

#!/bin/sh
#casetest
echo "please input number 1 to 3"
read number
case $number in
1)echo "you input 1";;
2)echo "you input 2";;
3)echo "you input 3";;
*)echo "error! the number you input isn't 1 to 3";;
esac

执行这个shell脚本,如果你输入的是1~3外的数字,都将输出error! the number you input isn't 1 to 3这句。这里的*就是匹配所有模式。从前面开始执行,如果它不匹配于前面的任何一种模式,则会匹配到这里的*,结果就自然输出error! the number you input isn't 1 to 3这句了。case语句中的模式中还可以使用|(或),如:

$cat casetest

#!/bin/sh
#casetest
echo "please input number 1 to 10"
read number
case $number in
1|2|3)echo "the number you input is 1~3";;
4|5|6)echo "the number you input is 4~6";;
7|8|9|10)echo "the number you input is 7~10";;
*)echo "error! the number you input isn't 1 to 10";;
esac

这样无论你输出的是1,还是2,还是3都会输出第一句话,无论你输出的是4,还是5,还是6输出的都是第二句话,如此类推。最后来一个经典的例子:

$cat caseparam

#!/bin/sh
#caseparam
if [ $# != 1 ]
thenecho "Usage:`basename $0` [start|stop|help]" >&2exit 1
fi
OPT=$1
case $OPT in
start)echo "start..`basename $0`";;
stop)echo "stop..`basename $0`";;
help)echo "now don't support help";;
*)echo "Usage:`basename $0` [start|stop|help]";;
esac

执行这个程序如果用./caseparam则输出:Usage:caseparam [start|stop|help] ;如果用./caseparam start 则输出:start..caseparam;如果用./caseparam stop则输出:stop..caseparam等等,以此类推。上面的$#是计算参数的个数,所以如果参数个数不等于1的话,该程序则退出。这个程序是不是感觉好熟悉呢?一般在/etc/init.d/下面的程序都是这种start、stop、restart...这种格式的。

linux shell编程语句if、case.相关推荐

  1. Linux Shell编程语句case

    Linux Shell编程case语句 case语句 case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下:case $变量名 in模式1)命令序列1;;模式2)命令序列2;; ...

  2. Linux Shell 编程学习总结

    Shell 教程 Shell简介:什么是Shell,Shell命令的两种执行方式 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成 ...

  3. 《Linux Shell编程从初学到精通(第2版)》pdf

    下载地址:网盘下载 内容简介 编辑 shell是用户与内核进行交互操作的一种接口,是linux最重要的软件之一.目前最流行的shell称为bash shell,bash shell脚本编程以其简洁.高 ...

  4. linux shell编程 ppt,《LinuxSHELL编程》PPT课件.ppt

    <<LinuxSHELL编程>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<LinuxSHELL编程>PPT课件.ppt(35页珍藏版)>请在 ...

  5. Linux Shell编程

    Linux Shell编程 一.简述       简单的介绍shell脚本的基本用法.      shell脚本是 由一些按照一定格式组合起来的shell命令 组成.shell脚本不需要编译就可以直接 ...

  6. Linux shell编程学习

    Linux shell编程学习 shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令.这点与Windows的命令提示符类似,但Linux shell的功能更加强 ...

  7. Linux Shell编程学习笔记(4)

    Linux Shell编程学习笔记(2015-7-20) 分类:linux shell   今天学习了Linux Shell中的控制结构.其实大多数语言的控制结构这一块都是基本类似的,有了C语言的基础 ...

  8. linux —— shell 编程(文本处理)

    导读 本文为博文 linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed a ...

  9. 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程

    Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...

最新文章

  1. 当下常用的webpack版本_细说 webpack系列 1. 为什么要选择 webpack
  2. Android 开源库获取途径整理
  3. 类与接口(三)java中的接口与嵌套接口
  4. 函数重载与运算符重载
  5. android o 结构光流程,惊艳亮相!一分钟看懂OPPO Find X 3D结构光技术是什么鬼,太牛了...
  6. 14. 深入解析Pod对象(一)
  7. 课时46:魔法方法:描述符(property的原理)
  8. 【数据预测】基于matlab人工蜂群算法优化BP神经网络数据预测 (含优化前对比)【含Matlab源码 078期】
  9. php大马的使用教程,一php大马,值得研究
  10. 小米路由器能做无线打印服务器吗,将普通打印机连接在小米路由器上能做
  11. 佐罗一键新机数据导出导入文件夹
  12. 普通进销存管理系统设计2
  13. 微信小程序UI设计规范及文档模版
  14. 安装软件出现错误处理:internal error2503/2502
  15. UGUI源码剖析(CanvasUpdateSystem 画布刷新系统)
  16. 易捷行云亮相北京卫视,战略性新兴产业引发持续关注
  17. 网络游戏开发成本,运营成本,收入
  18. 1+x证书-网络安全
  19. passwd出现不完全匹配登陆成功的情况,问题解决如下
  20. 汇总 Vue 中大家最爱问的高频问题

热门文章

  1. [git/svn]Git和SVN差异
  2. 常用元素位置与大小总结
  3. JavaScript获取鼠标左键选中的内容
  4. Java与C++Socket通讯注意事项
  5. 纪念:2006年我在51CTO的第一帖
  6. Go 语言 Slice
  7. Docker常用基础命令汇总
  8. 用Windows Live Writer在51CTO写博客
  9. MySQL数据库性能优化之一
  10. 【C语言探索之旅】 第一部分第六课:条件表达式