Shell编程-条件测试 | 基础篇
什么是Shell
Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令。除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux系统提供的其他程序一样执行这个文件,这个命令文件就叫做Shell程序或者Shell脚本。当运行这个文件时,它会像在命令行输入这些命令一样顺序地执行它们。
Shell脚本支持变量、命令行参数、交互式输入、函数模块、各种控制语句等高级编程语言的特性,如if、case、while和for等。利用Shell程序设计语言可以编写出功能非常复杂的脚本程序,把大量的任务自动化,尤其是那些需要输入大量命令而在执行过程中不太需要与用户进行干预的系统管理任务。
为了让Shell能读取并且执行Shell程序,Shell脚本的文件权限必须被设置为可读和可执行。为了让Shell可以找到程序,可以选择输入完全路径名,或者将这个脚本的路径放在PATH环境变量指定的路径列表中。Shell脚本不是复杂的程序,它是由上往下逐行解释执行的。脚本的第一行总是以“#!<Shell解释器文件路径>”开始,用来指定该脚本是使用那种Shell进行解释执行。
编写Shell脚本
1)使用VI或者其他任意的文本编辑工具创建一个名为HelloWorld.sh的文件,并在其中加入以下内容:
[root@localhost ~]# vi HelloWorld.sh
#!/bin/bash
#The first Shell script
echo "Hello World!"
2)为HelloWorld.sh文件添加执行权限;
[root@localhost ~]# chmod +x HelloWorld.sh
3)运行HelloWorld.sh脚本,查看运行结果;
[root@localhost ~]# ./HelloWorld.sh
Hello World!
条件测试 | 数值测试
编写Shell脚本时,有时要先测试字符串是否一致、数字是否相等或者检查文件状态,基于这些测试的结果再做下一步的操作。Shell脚本的条件测试可以用于测试字符串、文件状态和数字。
测试完成后可以通过“$?”获取测试的结果,其中0为正确,1为错误。
数值测试用于对两个数值进行比较并得出判断结果,包括:等于、不等于、大于、大于等于、小于、小于等于。
数值判断的格式:[ 数值1 关系运算符 数值2 ]
方括号与条件之间必须要有空格。
| 数值测试的关系运算符 | |
| 关系运算符 | 说明 |
| -eq | 两个数值相等 |
| -ne | 两个数值不相等 |
| -gt | 第一个数大于第二个数 |
| -lt | 第一个数小于第二个数 |
| -ge | 第一个数大于等于第二个数 |
| -le | 第一个数小于等于第二个数 |
测试两个数值是否相等;
[root@localhost ~]# [ -eq ] //测试1024是否等于1024
[root@localhost ~]# echo $?
//两个数值相等
修改第一个数值为1124后再次进行测试。
[root@localhost ~]# [ -eq ]
[root@localhost ~]# echo $?
//两个数值不相等
[root@localhost ~]# number1= //number1为500
[root@localhost ~]# number2= //number2为254
[root@localhost ~]# [ $number1 -gt $number2 ]
[root@localhost ~]# echo $?
//number1大于number2
[root@localhost ~]#
条件测试 | 字符串测试
字符串测试可以对两个字符串的值进行比较,也可以测试单个字符串的值是否为空或者非空。
字符串测试的格式:[ 关系运算符 字符串 ]或者[ 字符串1 关系运算符 字符串2 ]
| 字符串测试的关系运算符 | |
| 关系运算符 | 说明 |
| = | 两个字符串相等 |
| != | 两个字符串不相等 |
| -z | 字符串为空 |
| -n |
字符串不为空 |
要测试两个字符串是否相等
[root@localhost ~]# [ "abc" = "abc" ]
[root@localhost ~]# echo $?
//两个字符串相等
把第一个字符串更改为bac后进行测试
[root@localhost ~]# [ "bac" = "abc" ]
[root@localhost ~]# echo $?
//两个字符串不相等
如果把运算符改为“!=”
[root@localhost ~]# [ "bac" != "abc" ]
[root@localhost ~]# echo $? 判断环境变量是否为空或者非空
[root@localhost ~]# [ -z $python1 ]
[root@localhost ~]# echo $? [root@localhost ~]# [ -n $python1 ]
[root@localhost ~]# echo $?
//python1变量为空
[root@localhost ~]# python1="test" //对python1变量进行赋值
[root@localhost ~]# [ -z $python1 ]
[root@localhost ~]# echo $?
//python1变量不为空
[root@localhost ~]#
条件测试 | 文件状态测试
Linux的Shell脚本支持对文件状态的检测,包括检测文件的类型、文件的权限和文件的长度等; 文件状态测试的格式:[ 关系运算符 字符串 ]
| 文件状态测试的关系运算符 | |
| 关系运算符 | 说明 |
| -d | 目录 |
| -f | 一般文件 |
| -L | 链接文件 |
| -r |
可读 |
| -w | 可写 |
| -x | 可执行 |
| -u | 设置了suid |
| -s | 文件长度大于0、非空 |
[root@localhost ]# ll
总用量
-rwxr-xr-x. root root 6月 : HelloWorld.sh
[root@localhost ]# [ -r HelloWorld.sh ]
[root@localhost ]# echo $?
//HelloWorld.sh 文件可读
[root@localhost ]# [ -w HelloWorld.sh ]
[root@localhost ]# echo $?
//HelloWorld.sh 文件可写
[root@localhost ]# [ -x HelloWorld.sh ]
[root@localhost ]# echo $?
//HelloWorld.sh 文件可执行
[root@localhost ]#
条件测试的逻辑操作符
逻辑操作符分以下3种:
-a:逻辑与,只有当操作符两边的条件均为真时,结果为真,否则为假。
-o:逻辑或,操作符两边的条件只要有一个为真,结果为真,只有当两边所有条件为假时,结果为假。
!:逻辑否,条件为假,结果为真。
如果要测试两个文件的状态
[root@localhost ]# ll test1 test2
-rw-rw-r--. root root 6月 : test1
-rw-rw-r--. root root 6月 : test2
[root@localhost ]# [ -r test1 -a -r test2 ] //测试文件 test1 和 test2 是否都可读
[root@localhost ]# echo $? [root@localhost ]# [ -x test1 -o -x test2 ] //测试文件 test1 和 test2 是否至少有一个可执行
[root@localhost ]# echo $? 如果要测试两个数值变量
[root@localhost ]# number1=
[root@localhost ]# number2=
[root@localhost ]# [ $number1 -eq -a $number2 -gt ] //测试是否number1 大于10 且 number2 大于20
[root@localhost ]# echo $? 如果要测试文件test1 是否为不可读
[root@localhost ]# ls -l test1
-rw-rw-r--. root root 6月 : test1
[root@localhost ]# [ ! -r test1 ] //测试文件test1 是否为不可读
[root@localhost ]# echo $? [root@localhost ]#
Shell编程-条件测试 | 基础篇的更多相关文章
- (C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹
原文 (C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) Windows Shell 编程,即 Windows ...
- Shell高级编程学习笔记(基础篇)
目录 1.shell脚本的执行方法 2.shell的变量类型 3.shell特殊变量 4.变量子串的常用操作 5.批量修改文件名实践 6.变量替换 7.在shell中计算字符串长度的方法 ...
- Shell 编程 条件语句
本篇主要写一些shell脚本条件语句的使用. 条件测试 test 条件表达式 [ 条件表达式 ] 文件测试 -d:测试是否为目录(Directory). -e:测试文件或目录是否存在(Exist). ...
- 大数据系列博客之 --- 深入简出 Shell 脚本语言(基础篇)
首先声明,此系列shell系列博客分为四篇发布,分别是: 基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cn ...
- 关于shell脚本——条件测试、if语句、case语句
目录 一.条件测试 1.1.表达说明 1.2.test命令 文件测试 1.3.整数值比较 1.4.字符串比较 1.5.逻辑测试 二.if语句 2.1.单分支结构 2.2.双分支结构 2.3.多分支结构 ...
- 二、shell 脚本条件测试
目录 一.条件测试 test 格式 文件测试 文件测试常见选项 整数值比较 字符串比较 浮点数的运算 逻辑测试 二.if语句 1单分支 2双分支结构 3多分支结构 三元运算符 三.case 一.条件测 ...
- Linux Shell 03 条件测试
条件测试 方式一:在Bash中 test命令和[]是等价的. test命令: if test $n1 -eq $n2 then echo "The two number are equal& ...
- 【shell编程】之基础知识-语法
一.shell变量 1.定义变量 定义变量时,变量名不加美元符号($,PHP语言中变量需要), 如: your_name="runoob.com" 注意,变量名和等号之间不能有空格 ...
- 【shell编程】之基础知识了解shell
一.什么是shell Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了 ...
随机推荐
- 关于rocketmq的配置启动
#集群名称brokerClusterName=rocket-nameserver#broker-a,注意其它两个分别为broker-b和broker-cbrokerName=broker-a#brok ...
- keepalived 安装及配置
简介 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat.corosync.pacemaker. 但是它一般不会单独出现, ...
- spring的事件驱动模型
在工作中会遇到这样的业务,生成一个订单后需要给指定的用户发送短信或者邮件,但是短信或者邮件发送失败又不会影响正常的业务: 这里介绍通过ApplicationContext和spring的@EventL ...
- flask 基础语法学习
回顾 #6行flask from flask import Flask app = Flask(__name__) @app.route("/") def index(): ret ...
- Java调用第三方http接口的方式
1. 概述 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适.很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信.天气等). 在J ...
- 解决SkyP2M工程常见问题所参考的博客汇总
工程是基于64位的 1 Error 26 error C2491: 'HUDManager::_viewport' : definition of dllimport static data memb ...
- PHP代码审计之XSS操作
XSS XSS是Cross Site Scripting(跨站脚本攻击), 它与sql注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除的目的,而在XSS攻击中,通过插入 ...
- 「HNOI 2019」白兔之舞
一道清真的数论题 LOJ #3058 Luogu P5293 题解 考虑$ n=1$的时候怎么做 设$ s$为转移的方案数 设答案多项式为$\sum\limits_{i=0}^L (sx)^i\bin ...
- asp.net webapi 获取报文体的问题
用这种方法: var data=await Request.Content.ReadAsStringAsync(); 一般都无法获取到内容.原因是内部的流对象已经到了最后面.要获取到里面的需要把流的位 ...
- 20175333曹雅坤MyCP(课下作业,必做)
MyCP(课下作业,必做) 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin ...