LinuxShell笔记3 条件控制和流程控制
条件控制
if/else控制
if/else
语句和C语言的基本类似, 一般使用方法是:
if condition
thenstatements
[elif condition
then
statements ...]
[else
statements]
if
逻辑操作的非与或分别是!
&&
||
这与C语言完全一致, 不过这是在[ ]外部使用. 如果在[ ] 内部, 则必须换成-n
-a
-o
, 对应英文的缩写.
条件测试
Linux的每个命令或函数, 在退出时都会返回一个状态给调用者, 用来表示退出状态. 退出状态是0表示成功退出, 否则是有问题. 调用exit
命令返回退出状态. 如果是函数, 注意exit
和return
语句是不同的. 举个例子:
建立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 条件控制和流程控制相关推荐
- Shell攻关之条件判断与流程控制
条件判断与流程控制 一.条件判断式语句 1.按照文件类型判断 (1) 常用: -d 文件 判断该文件是否存在,并且是否为目录文件(是目录为真)-e 文件 判断该文件是否存在(存在为真)-f 文件 判断 ...
- Java学习笔记(三):流程控制
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://mp.csdn.net/mdeditor/100662793 目录 ...
- [Shell]条件判断与流程控制:if, case, for, while, until
[条件判断] 1. 按文件类型进行判断 -b 文件 判断该文件是否存在,并且为块设备文件(是块设备文件为真) -c 文件 判断该文件是否存在,并且为字符设备文件(是字符设备文件为真) -d ...
- Shell程序设计 | 基本语法 :变量、I/O、算术运算、条件判断、流程控制、函数
文章目录 变量 环境变量 位置变量 特殊变量 自定义变量 数组 I/O printf / echo read 算术运算 let expr 条件判断 test 常用判断条件 流程控制 if case f ...
- 韩顺平 java笔记 第3讲 运算符 流程控制
1.运算符 + 加 -减 *乘 /除 %取模 ++自加 --自减 += 左加 -=左减 /=左除 %=左取模 == 等于 > 大于 < 小 ...
- 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 ...
- Cris 的 Scala 笔记(五):流程控制
文章目录 5. 流程控制 5.1 分支控制 单分支 双分支 多分支 分支控制if-else 注意事项 5.2 for循环控制 范围数据循环方式1 范围数据循环方式2 循环守卫 引入变量 嵌套循环 循环 ...
- Linux【实操篇】—— Shell 编程入门、变量、运算符、条件判断、流程控制
目录 一.Shell 编程入门 1. 认识 Shell 2. Shell 脚本的创建与执行 二.Shell 变量 1. 系统变量和自定义变量 2. 变量的基本规则 3. 设置环境变量 4. 位置参数变 ...
- shell 判断_shell之条件判断和流程控制
上一篇我们讲了基本运算符,和本篇文章密切关联,可以说每一门语言,都少不了流程控制,相信大家在日常的开发中也不陌生,代码中,我们总要写这样那样的判断.其实流程控制的本质是差不多的,只是在语法上稍微有些差 ...
最新文章
- Linux中的中断处理
- SQL Server 2000 Service Pack 4 中所修复的 bug 的列表
- python项目开发实战网盘-《Python项目案例开发从入门到实战》PDF版百度网盘
- 说一说为什么gethostbyname用完后不用释放内存
- ConcurrentHashMap源码jdk1.8学习笔记
- Vuex的store中的Module
- Netty 中 IOException: Connection reset by peer 与 java.nio.channels.ClosedChannelException: null
- java程序员面试题200题_Java程序员经典面试题集大全 (三十)
- 根据周次显示日期范围_Elasticsearch根据日期价格范围搜索酒店且排序
- lua协程的使用列子分析
- cad螺纹lisp_AutoCADLISP基本知识及函数
- oracle 2的次方,Oracle第二次课 - osc_qyg23ccq的个人空间 - OSCHINA - 中文开源技术交流社区...
- 开放、创新、合作,共赢多样性计算新时代
- 有MIMIC数据却不知道从何开始?从DIAGNOSES_ICD表开始(五)
- word2013 打开一个新文档,之前打开的最小化的文档也会弹出来?
- CodingBat python Warmup-2
- wgc84 笛卡尔_WGS84椭球下的UTM坐标与Clarke80椭球下的兰勃特坐标转换方法研究
- 京东方恢复给苹果供应OLED面板,到底扯下了谁的遮羞布?
- 【Flutter 实战】简约而不简单的计算器
- R分数复现 R-precision评估指标定量 文本生成图像R分数定量实验全流程复现(R-precision)定量评价实验踩坑避坑流程