shell条件测试结构
条件测试结构
if/then结构用来判断命令列表的退出状态码是否为0(因为在UNIX惯例, 0表示"成功"), 如果成功的话, 那么就执行接下来的一个或多个命令.
有一个专有命令[ (左中括号, 特殊字符). 这个命令与test命令等价, 并且出于效率上的考虑, 这是一个内建命令. 这个命令把它的参数作为比较表达式或者作为文件测试, 并且根据比较的结果来返回一个退出状态码(0 表示真, 1表示假).
在版本2.02的Bash中, 引入了[[ ... ]]扩展测试命令, 因为这种表现形式可能对某些语言的程序员来说更容易熟悉一些. 注意[[是一个关键字, 并不是一个命令.
Bash把[[ $a -lt $b ]]看作一个单独的元素, 并且返回一个退出状态码.
(( ... ))和let ...结构也能够返回退出状态码, 当它们所测试的算术表达式的结果为非零的时候, 将会返回退出状态码0. 这些算术扩展结构被用来做算术比较
test, /usr/bin/test, [ ], 和/usr/bin/[都是等价命令
- #!/bin/bash
- echo
- if test -z "$1"
- then
- echo "No command-line arguments."
- else
- echo "First command-line argument is $1."
- fi
- echo
- if /usr/bin/test -z "$1" # 与内建的"test"命令结果相同.
- then
- echo "No command-line arguments."
- else
- echo "First command-line argument is $1."
- fi
- echo
- if [ -z "$1" ] # 与上边的代码块作用相同.
- # if [ -z "$1" 应该能够运行, 但是...
- #+ Bash报错, 提示缺少关闭条件测试的右中括号.
- then
- echo "No command-line arguments."
- else
- echo "First command-line argument is $1."
- fi
- echo
- if /usr/bin/[ -z "$1" ] # 再来一个, 与上边的代码块作用相同.
- # if /usr/bin/[ -z "$1" # 能够工作, 但是还是给出一个错误消息.
- # # 注意:
- # 在版本3.x的Bash中, 这个bug已经被修正了.
- then
- echo "No command-line arguments."
- else
- echo "First command-line argument is $1."
- fi
- echo
- exit
[[ ]]结构比[ ]结构更加通用. 这是一个扩展的test命令, 是从ksh88中引进的.
在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割, 但是会发生参数扩展和命令替换.
- file=/etc/passwd
- if [[ -e $file ]]
- then
- echo "Password file exists."
- fi
- 使用[[ ... ]]条件判断结构, 而不是[ ... ], 能够防止脚本中的许多逻辑错误. 比如, &&, ||, <, 和> 操作符能够正常存在于[[ ]]条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错.
在if后面也不一定非得是test命令或者是用于条件判断的中括号结构( [ ] 或 [[ ]] ).
- dir=/home/bozo
- if cd "$dir" >/dev/null; then # "2>/dev/null" 会隐藏错误信息.
- echo "Now in $dir."
- else
- echo "Can't change to $dir."
- fi
算术测试需要使用(( ))
- #!/bin/bash
- # 算术测试.
- # (( ... ))结构可以用来计算并测试算术表达式的结果.
- # 退出状态将会与[ ... ]结构完全相反!
- (( ))
- echo "Exit status of \"(( 0 ))\" is $?." #
- (( ))
- echo "Exit status of \"(( 1 ))\" is $?." #
- (( > )) # 真
- echo "Exit status of \"(( 5 > 4 ))\" is $?." #
- (( > )) # 假
- echo "Exit status of \"(( 5 > 9 ))\" is $?." #
- (( - )) #
- echo "Exit status of \"(( 5 - 5 ))\" is $?." #
- (( / )) # 除法也可以.
- echo "Exit status of \"(( 5 / 4 ))\" is $?." #
- (( / )) # 除法的计算结果 < .
- echo "Exit status of \"(( 1 / 2 ))\" is $?." # 截取之后的结果为 .
- #
- (( / )) >/dev/null # 除数为0, 非法计算.
- # ^^^^^^^^^^^
- echo "Exit status of \"(( 1 / 0 ))\" is $?." #
- exit
shell条件测试结构的更多相关文章
- shell条件测试test
shell条件测试可以通过以下两种方式: test 参数 测试内容 [ 参数 测试内容 ] 一.测试文件类型: test -e 文件名 (测试文件是否存在) [ - ...
- shell条件测试语句实例-测试apache是否开启
终于理解了shell条件测试语句"!="和"-n"的用法区别,于是有了如下的shell脚本,做为练习. 第一种方法:测试apache是否开启?字符串测试 #!/ ...
- 【第四章】Shell 条件测试表达式
shell中条件测试的三种格式: 格式1: test 条件表达式格式2: [ 条件表达式 ]格式3: [[ 条件表达式 ]] 使用test: [root@host- ~]# test -f file ...
- 四 Shell条件测试
条件测试操作 在bash的各种流程控制结构中通常要进行各种测试,然后根据测试结果执行不同的操作,有时也会通过与if等条件语句相结合,让我们可以方便的完成判断. 语法格式 test 选项 文件名或目录名 ...
- bash Shell条件测试
3种测试命令: test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]] 注意:EXPRESSION前后必须有空白字符 bash的测试类型 数值测试: -eq: ...
- shell条件测试和流程控制
一.条件测试操作 1.test 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值 格式:test 表达式 2.常见的测试类型 ①测试文件状态 格式:[ 操作符 文件 ...
- shell条件测试
文件状态测试-b filename : 当filename 存在并且是块文件时返回真(返回0)-c filename : 当filename 存在并且是字符文件时返回真-d pathname : 当p ...
- 《shell条件测试语句,字符串测试apache是否开启》
还得我想了10分钟才明白”!=“和"-n"的用法区别,做个笔记捋一捋 第一种方法:测试apache是否开启?字符串测试 #!/bin/bash web=`/usr/bin/pgre ...
- Linux Shell 条件测试
1. 文件测试 -d 目录 -s 文件非空 -f 是正规文件 -w 有写权限 -r 有读权限 -x 有执行权限 -L 符号连接 -u 文件有suid位设置
随机推荐
- JS前端图形化插件之利器Gojs组件(php中文网)
JS前端图形化插件之利器Gojs组件(php中文网) 一.总结 一句话总结:php中文网我可以好好走一波 二.JS前端图形化插件之利器Gojs组件 参考: JS前端图形化插件之利器Gojs组件-js教 ...
- java-线程-基础
线程状态及转化 借用网上的一幅图: 说明: 线程一共分为5种状态 新建状态(new) 线程对象被创建后,就进入了新建状态,例如:Thread t = new Thread(); 就绪状态(Runnab ...
- 理解Java字符串常量池与intern()方法
String s1 = "Hello"; String s2 = "Hello"; String s3 = "Hel" + "lo ...
- [Example of Sklearn] - SVM usge
reference : http://www.csdn.net/article/2012-12-28/2813275-Support-Vector-Machine SVM是什么? SVM是一种训练机器 ...
- 在webapi中使用swagger
1 在webapi项目下安装swagger,包名 Swashbuckle.AspNetCore 2 在webapi的startup.cs文件中添加swagger服务 /// <summary&g ...
- WPF中取得系统字体列表
原文:WPF中取得系统字体列表 在GDI+中,我们可以通过如下方式取得系统所有字体: foreach(FontFamily f in FontFamily.Families){ // 处理代码} ...
- 简明Python3教程 17.更多
简介 迄今为止我们已经学习了python中的大多数常用知识.本章中我们会接触到更多的知识,使得我们更全面的掌握python. 传递元组 你是否希望过从函数返回两个不同的值?做到这点使用元组即可. &g ...
- ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...
- IOS status bar
从iOS7开始,该系统提供2样的管理风格状态栏 由UIViewController管理(每UIViewController我们可以有各自不同的状态栏) 由UIApplication管理(由其统一管理的 ...
- 操作系统hosts文件
为了便于北京和大连两个更好的测试系统.该公司专门申请一个域名:大连r \\ u0026 D侧只需要部署(我方系统全权负责在大连研发.所以在大连并列比较的部署方面easy--不要忘记,该项目比我们实际做 ...