shell_base
1、使用if_then语句
if command
then
commands
fi
先运行if后面的命令,如果命令的退出状态是0(成功执行命令),就将执行then后面,fi前面的所有命令。否则就跳到fi后面继续执行。
2、if-then-else语句
if command
then
commands
else
commands
fi
3、嵌套if语句
if command1
then
commands
elif command2
then
commands
elif command3
then
commands
fi
4、test命令(方括号[ ]为同义词)
用于提供对条件的判断
if test condition 也可以不用test condition,而使用 [ conditon ] ([ , ] 的前后必须有空格)
then
commands
fi
condition有三种:
(1)数值比较: –eq, –ne, –ge,-gt, -le, lt
但是要注意:test命令无法处理存储在变量中的浮点值。
使用bash计算器bc时,只是欺骗了shell把浮点值作为字符串值存储于一个变量中。如果只是先使用echo语句显示结果,这种方法很好。但是在面向数值的函数(如数值测试条件)中不起作用。
底线是不能在test中使用非整数变量
(2)字符串比较:=,!=,<,>,-n(检测字符串长度是否大于0),-z(检测字符串长度是否等于0)
字符串相等:测试比较将所有标点符号和大写都考虑在内
字符串顺序:要注意两点:
1)’>’,’<’一定要用’\’转义,否则shell会将它们当做重定向符号,将字符串值看做文件名
2)大于和小于的顺序与在sort命令中的顺序不同。
在test中,同一个字母,大写字母>小写字母
在sort中,相反。
字符串大小:评估一个变量是否包含数据时,使用-n和-z比较方便
对空变量和未初始化的变量检测出的长度也为0
(3)文件比较
文件比较是shell脚本中最强大和最常用的一类比较。
test可以测试文件状态和路径。(使用的非常频繁!)
-d file: 检查file是否存在并且是一个目录
-e file: 检查file是否存在
-f file: 检查file是否存在并且是一个文件
-r file: 检查file是否存在并且可读
-s file: 检查file是否存在并且不为空
-w file: 检查file是否存在并且可写
-x file: 检查file是否存在并且可执行
-O file: 检查file是否存在并且被当前用户拥有
-G file:检查file是否存在并且默认组是否为当前用户组
file1 –nt file2: 检查file1是否比file2新
file1 –ot file2: 检查file1是否比file2旧
5、复合条件查询
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
6、if-then的高级特征
(1)使用双圆括号表示数学表达式
(( expression ))
expression包括除了标准数学操作符外的其他操作符如下:
++, –, !, ~, **, <<, >>, &, |, &&, ||
(2)使用双方括号表示高级字符串处理函数
[[ expression ]]
提供了除test命令中的标志字符串比较以外的模式匹配功能
在模式匹配中,可以定义与字符串值相匹配的正则表达式
7、case 命令
可以使用case命令,而不是编写所有的elif语句来继续检查相同的变量值。
case命令以列表导向检查单个变量的多个值
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
shell_base的更多相关文章
随机推荐
- Vue-admin工作整理(十六):Ajax-axios进行请求封装+拦截器
典型的工具类封装,增加拦截起来做相应的处理 user.js: import axios from './index' export const getUserInfo = ({ userId }) = ...
- out对象
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- pdfmake导出页眉页脚问题
最近做项目中遇到一个导出pdf的功能,我用的是pdfmake插件 pdf使用参考 https://blog.csdn.net/qq_24380167/article/details/78735642 ...
- SSM单元测试时出现:Failed to load ApplicationContext的一种可能解决办法
SSM单元测试时出现: 严重: Caught exception while allowing TestExecutionListener [org.springframework.test.cont ...
- 漂亮数组 Beautiful Array
2019-04-06 16:09:56 问题描述: 问题求解: 本题还是挺有难度的,主要是要考虑好如何去进行构造. 首先考虑到2 * A[i] = A[j] + A[k],那么j,k就必须是同奇同偶, ...
- 【转载】DRuid 大数据分析之查询
转载自http://yangyangmyself.iteye.com/blog/2321759 1.Druid 查询概述 上一节完成数据导入后,接下来讲讲Druid如何查询及统计分析导入的数据 ...
- Confluence 6 从 WIKI 标记整合到基于 XHTML 的存储格式
如果你现在正在将 Confluence 从一个老的版本升级到 Confluence 4.0 或者更新的版本 (例如从 Confluence 3.5.x 或者更老的版本),在升级的过程中一个内容整合过程 ...
- 【XAF问题】层层分级,如何让按钮显示指定的视图
一.问题 1. 层层分级,如何让按钮显示指定的视图 二.解决方法 解决方法:因为它是层层级别的,不能显示出来指定的视图,需要添加ActionContainer,才可以显示出来
- sql server error 53
主要是计算机名修改了,通过服务器名称,浏览更多,选择“数据库引擎”里面的第一个,就可以登陆了
- vsftpd详细配置
vsftpd配置文件详解 1.默认配置: 1>允许匿名用户和本地用户登陆. anonymous_enable=YES local_enable=YES 2>匿名用户使用的登陆名为ftp或a ...