条件控制

if/else控制

if/else语句和C语言的基本类似, 一般使用方法是:

if condition
thenstatements
[elif condition
then
statements ...]
[else
statements]
if

逻辑操作的非与或分别是! && ||这与C语言完全一致, 不过这是在[ ]外部使用. 如果在[ ] 内部, 则必须换成-n -a -o, 对应英文的缩写.

条件测试

Linux的每个命令或函数, 在退出时都会返回一个状态给调用者, 用来表示退出状态. 退出状态是0表示成功退出, 否则是有问题. 调用exit命令返回退出状态. 如果是函数, 注意exitreturn语句是不同的. 举个例子:
建立1.sh文件

add()
{let r=$1+$2return $r
}add_1()
{exit 0
}

执行source ./1.sh之后,

add 2 3
echo $?  # 这一条输出5
add_1  # 终端直接退出

可以看出, return返回的一个具体计算值, 而exit是返回了一个状态.

但是, Linux shell的if条件只能用于测试内容的退出状态, 而不是表达式或者函数的返回值, 比如新建一个文件1.sh

#!/bin/bash
add()
{let r=$1+$2return $r
}

之后建立文件2.sh

#!/bin/bash
if add $1 $2
then echo add ok
elseecho add no
fi

分别输入:

source 1.sh
source 2.sh 1 2

程序会输出:

add no

即使返回值是3, 但是仍然无法通过if条件测试, 印证了if只能测试退出状态, 而不是返回值. 而Linux中, 命令只要没有错误, 退出状态也是0, 表达式计算也相当于一个命令. 所以如果要进行表达式的值测试, 就不能直接带入if条件, 而是使用条件测试命令.

test命令就是这样的. test命令还可以用[ ] 来表示, 不过这样的话, 运算操作符号需要由 -alpha来表示, 比如<= 成为\le. test Expression, 如果表达式返回true, 则返回一个0退出值, 否则返回一个非零退出值, 如果无参数, 任然返回一个非零退出值.

举个例子:

#!/bin/bash
if test "2>3"
thenecho no pass
elseecho pass
fiif [ "2>3" ] # 注意这里的弱引用, 否则就是重定向操作了!!!!!!!!!
thenecho no pass
elseecho pass
fi

结果输出:

no pass
no pass

两个语句是等价的, 但是注意[ ]两侧的空格是必须的!!! 上述命令是, 如果条件通过测试, 那么test返回0, 就不执行if内部的语句了.

一些常用的参数检查为:


同样的, 条件测试语句可以和其他的逻辑条件语句搭配使用.

case分支

case expression in pattern 1)statements;;pattern 2)statements;;pattern3 | pattern4)statements;;
esac

任何一个分支, 都可以由管道连接多个pattern, 只要有一个匹配上了, 那么就执行相应的statement
比如:

case $1 in*.jpg) gqview $1;;*.txt) gvim $1;;*.avi | *.wmv) mplayer $1;;*.pdf) acroread $1;;*) echo $1: echo "Unkown type";;

循环

for循环

for循环的基本操作:

for name [in list]
do ...done

list是名称列表, 也可以通过模式匹配等获取.

比如:

for file in *.txt
do cat $file  # 注意变量的符号
done

如果是命令操作, 需要添加``符号

for file `find . -iname *.txt`
do # 遍历当前目录及其子目录所有文件cat $file
done

如果[in list]被省略, 则默认为$@所有的参数, 比如:

for name in $@
do case $name in-f) ...;;-d) ...;;esac
done

while/until循环

while循环, 当condition为真执行循环

while condition
dostatements
done

until循环, condition为真跳出循环

until condition
dostatements
done

注意如果使用命令 函数或表达式等, 需要条件测试!!!

比如:

#!/bin/bash
path=$PATHwhile [ -n $path ]
dols -ld $[path%%:*]path=${path#*:}
done

跳出循环使用break语句即可

LinuxShell笔记3 条件控制和流程控制相关推荐

  1. Shell攻关之条件判断与流程控制

    条件判断与流程控制 一.条件判断式语句 1.按照文件类型判断 (1) 常用: -d 文件 判断该文件是否存在,并且是否为目录文件(是目录为真)-e 文件 判断该文件是否存在(存在为真)-f 文件 判断 ...

  2. Java学习笔记(三):流程控制

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://mp.csdn.net/mdeditor/100662793 目录 ...

  3. [Shell]条件判断与流程控制:if, case, for, while, until

    [条件判断] 1. 按文件类型进行判断 -b 文件    判断该文件是否存在,并且为块设备文件(是块设备文件为真) -c 文件    判断该文件是否存在,并且为字符设备文件(是字符设备文件为真) -d ...

  4. Shell程序设计 | 基本语法 :变量、I/O、算术运算、条件判断、流程控制、函数

    文章目录 变量 环境变量 位置变量 特殊变量 自定义变量 数组 I/O printf / echo read 算术运算 let expr 条件判断 test 常用判断条件 流程控制 if case f ...

  5. 韩顺平 java笔记 第3讲 运算符 流程控制

    1.运算符 + 加   -减   *乘   /除   %取模   ++自加   --自减    += 左加   -=左减  /=左除   %=左取模 == 等于    > 大于   < 小 ...

  6. Linux | Shell 学习笔记(二)Shell 流程控制 if、case、for、while| read读取输入 | 函数的使用 | cut、sed、awk、sort命令 +Demo

    文章目录 参考资料 运行环境 一.流程控制 1.1 if 判断 1.2 case 语句 1.3 for 循环 1.4 while 循环 二. read 读取控制台输入 三.函数 3.1 系统函数 ba ...

  7. Cris 的 Scala 笔记(五):流程控制

    文章目录 5. 流程控制 5.1 分支控制 单分支 双分支 多分支 分支控制if-else 注意事项 5.2 for循环控制 范围数据循环方式1 范围数据循环方式2 循环守卫 引入变量 嵌套循环 循环 ...

  8. Linux【实操篇】—— Shell 编程入门、变量、运算符、条件判断、流程控制

    目录 一.Shell 编程入门 1. 认识 Shell 2. Shell 脚本的创建与执行 二.Shell 变量 1. 系统变量和自定义变量 2. 变量的基本规则 3. 设置环境变量 4. 位置参数变 ...

  9. shell 判断_shell之条件判断和流程控制

    上一篇我们讲了基本运算符,和本篇文章密切关联,可以说每一门语言,都少不了流程控制,相信大家在日常的开发中也不陌生,代码中,我们总要写这样那样的判断.其实流程控制的本质是差不多的,只是在语法上稍微有些差 ...

最新文章

  1. Linux中的中断处理
  2. SQL Server 2000 Service Pack 4 中所修复的 bug 的列表
  3. python项目开发实战网盘-《Python项目案例开发从入门到实战》PDF版百度网盘
  4. 说一说为什么gethostbyname用完后不用释放内存
  5. ConcurrentHashMap源码jdk1.8学习笔记
  6. Vuex的store中的Module
  7. Netty 中 IOException: Connection reset by peer 与 java.nio.channels.ClosedChannelException: null
  8. java程序员面试题200题_Java程序员经典面试题集大全 (三十)
  9. 根据周次显示日期范围_Elasticsearch根据日期价格范围搜索酒店且排序
  10. lua协程的使用列子分析
  11. cad螺纹lisp_AutoCADLISP基本知识及函数
  12. oracle 2的次方,Oracle第二次课 - osc_qyg23ccq的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. 开放、创新、合作,共赢多样性计算新时代
  14. 有MIMIC数据却不知道从何开始?从DIAGNOSES_ICD表开始(五)
  15. word2013 打开一个新文档,之前打开的最小化的文档也会弹出来?
  16. CodingBat python Warmup-2
  17. wgc84 笛卡尔_WGS84椭球下的UTM坐标与Clarke80椭球下的兰勃特坐标转换方法研究
  18. 京东方恢复给苹果供应OLED面板,到底扯下了谁的遮羞布?
  19. 【Flutter 实战】简约而不简单的计算器
  20. R分数复现 R-precision评估指标定量 文本生成图像R分数定量实验全流程复现(R-precision)定量评价实验踩坑避坑流程

热门文章

  1. 数据挖掘原理与算法 K-Means算法
  2. Ground Defense 模拟
  3. 二叉树的遍历 C/C++语言实现
  4. 洛谷 P1036 [NOIP2002 普及组] 选数(DFS)
  5. 未了(endless)(【CCF】NOI Online 能力测试2 入门组第一题 )
  6. ~~通过预处理逆元的方式求组合数
  7. python项目依赖库打包发布方法
  8. leetcode958. Check Completeness of a Binary Tree
  9. 【机房收费系统】---修改信息
  10. 【英语】舞动奇迹--荡漾我心