shell脚本----if(数字条件,字符串条件,字符串为空)

2023-10-30

二元比较操作符,比较变量或者比较数字.

注意数字与字符串的区别.

1.整数比较 

  1. -eq 等于,如:if [ "$a" -eq "$b" ]   
  2. -ne 不等于,如:if [ "$a" -ne "$b" ]   
  3. -gt 大于,如:if [ "$a" -gt "$b" ]   
  4. -ge 大于等于,如:if [ "$a" -ge "$b" ]   
  5. -lt 小于,如:if [ "$a" -lt "$b" ]   
  6. -le 小于等于,如:if [ "$a" -le "$b" ]   
  7. <   小于(需要双括号),如:(("$a" < "$b"))   
  8. <=  小于等于(需要双括号),如:(("$a" <= "$b"))   
  9. >   大于(需要双括号),如:(("$a" > "$b"))   
  10. >=  大于等于(需要双括号),如:(("$a" >= "$b"))   

小数据比较可使用AWK 


2.字符串比较

  1. = 等于,如:if [ "$a" = "$b" ]   
  2. == 等于,如:if [ "$a" == "$b" ],与=等价   


注意:

比较两个字符串是否相等的办法是:
if [ "$test"x = "test"x ]; then
这里的关键有几点:
1 使用单个等号
2 注意到等号两边各有一个空格:这是unix shell的要求
3 注意到"$test"x最后的x,这是特意安排的,因为当$test为空的时候,上面的表达式就变成了x = testx,显然是不相等的。而如果没有这个x,表达式就会报错:[: =: unary operator expected


注意:==的功能在[[]]和[]中的行为是不同的,如下: 
  1. [[ $a == z* ]]   # 如果$a以"z"开头(模式匹配)那么将为true   
  2. [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true   
  3.   
  4. [ $a == z* ]     # File globbing 和word splitting将会发生   
  5. "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true   


一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是. 
但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像. 
!= 不等于,如:if [ "$a" != "$b" ] 
这个操作符将在[[]]结构中使用模式匹配. 
< 小于,在ASCII字母顺序下.如: 
if [[ "$a" < "$b" ]] 
if [ "$a" \< "$b" ] 
注意:在[]结构中"<"需要被转义. 
> 大于,在ASCII字母顺序下.如: 
if [[ "$a" > "$b" ]] 
if [ "$a" \> "$b" ] 
注意:在[]结构中">"需要被转义. 
具体参考Example 26-11来查看这个操作符应用的例子. 
-z 字符串为"null".就是长度为0. 
-n 字符串不为"null" 
注意: 
使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z 
或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可 

以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.


举例:

1.数字比较

  1. #!/bin/bash  
  2.   
  3. i=6  
  4. a=10  
  5.   
  6. if [ $a -eq 10 ]  
  7. then  
  8.     echo "a = 10"  
  9. fi  
  10.   
  11. if [ $a -ne $i ]  
  12. then  
  13.     echo "a != $i"  
  14. fi  
  15.   
  16. if [ $a -gt $i ]  
  17. then   
  18.     echo "a > i"  
  19. fi  
  20.   
  21. if [ $a -lt $i ]  
  22. then  
  23.     echo "a < i"  
  24. else  
  25.     echo "a > i"  
  26. fi  
  27.   
  28. if(("$a" > "$i"))  
  29. then  
  30.     echo "(())a>i"  
  31. fi  
  32.   
  33. if(($a != $i))  
  34. then  
  35.     echo "(())a!=i"  
  36. fi  

备注:通过sh运行脚本,[ ]运算是可以的,而(())运行出错

chmod 777 后,直接./ 运行,都可以


2.字符串比较

  1. #!/bin/bash  
  2.   
  3. a="123"  
  4. b="1234"  
  5. c="123"  
  6.   
  7. if [ "$a"x != "$b"x ]  
  8. then  
  9.     echo "a != b"  
  10. fi  
  11.   
  12. if [ "$a"x = "$c"x ]  
  13. then  
  14.     echo "a == c"  
  15. fi  


判断字符串为空

  1. if [ -z "$d" ]  
  2. then  
  3.     echo "d is empty"  
  4. fi  


备注:

-e                          文件存在
-a                          文件存在(已被弃用)
-f                          被测文件是一个regular文件(正常文件,非目录或设备)
-s                          文件长度不为0
-d                          被测对象是目录
-b                          被测对象是块设备
-c                          被测对象是字符设备
-p                          被测对象是管道
-h                          被测文件是符号连接
-L                          被测文件是符号连接
-S(大写)                    被测文件是一个socket
-t                          关联到一个终端设备的文件描述符。用来检测脚本的stdin[-t0]或[-t1]是一个终端
-r                          文件具有读权限,针对运行脚本的用户
-w                          文件具有写权限,针对运行脚本的用户
-x                          文件具有执行权限,针对运行脚本的用户
-u                          set-user-id(suid)标志到文件,即普通用户可以使用的root权限文件,通过chmod +s file实现
-k                          设置粘贴位
-O                          运行脚本的用户是文件的所有者
-G                          文件的group-id和运行脚本的用户相同
-N                          从文件最后被阅读到现在,是否被修改

f1 -nt f2                   文件f1是否比f2新
f1 -ot f2                   文件f1是否比f2旧
f1 -ef f2                   文件f1和f2是否硬连接到同一个文件

二元比较操作符,比较变量或比较数字

整数比较:
-eq                       等于            if [ "$a" -eq "$b" ]
-ne                       不等于          if [ "$a" -ne "$b" ]
-gt                       大于            if [ "$a" -gt "$b" ]
-ge                       大于等于        if [ "$a" -ge "$b" ]
-lt                       小于            if [ "$a" -lt "$b" ]
-le                       小于等于        if [ "$a" -le "$b" ]

<                         小于(需要双括号)           (( "$a" < "$b" ))
<=                        小于等于(...)                (( "$a" <= "$b" ))
>                         大于(...)                    (( "$a" > "$b" ))
>=                        大于等于(...)                (( "$a" >= "$b" ))


字符串比较:
=                         等于           if [ "$a" = "$b" ]
==                        与=等价
!=                        不等于         if [ "$a" = "$b" ]
<                         小于,在ASCII字母中的顺序:
                          if [[ "$a" < "$b" ]]
                          if [ "$a" \< "$b" ]         #需要对<进行转义
>                         大于

-z                        字符串为null,即长度为0
-n                        字符串不为null,即长度不为0


from:http://blog.csdn.net/yf210yf/article/details/9207147

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell脚本----if(数字条件,字符串条件,字符串为空) 的相关文章

  • 有没有办法改变vim的默认模式

    有谁知道如何更改vim的默认模式 它的默认模式是命令模式 但是我可以将其更改为插入模式吗 只需将以下行添加到您的 vimrc 中 start Vim s default mode will be changed to Insert mode
  • bash.sh 运行 cron 的权限被拒绝

    如何在这里使用 bash 脚本运行 cron 我做了如下操作 这里有错误 我想知道如何在 ubuntu 中做到这一点 我现在对它感到震惊 bash sh 文件 bin bash cd var www Controller usr bin p
  • bash 脚本中的未绑定变量

    在调试我的脚本时 我变得绝望 我使用了我的高级同事向我推荐的一些结构 但我不知道如何使其正常工作 bin bash x set ueo pipefail exec gt tmp dq log source BASH SOURCE env p
  • grep 跨文件的最后 n 个匹配

    我正在使用 grep 提取一组文件中的行 grep 一些字符串 log 是否可以将每个文件的最大匹配数限制为每个文件的最后 n 个匹配项 好吧 我认为 grep 不支持限制从文件末尾开始的 N 个匹配 所以这就是你必须做的 ls log w
  • 如何在 .zip 文件中使用 grep

    有 3 个文件 a csv b csv c csv 压缩为 abh zip 现在可以在 abh zip 上执行 grep 命令 是否有任何通配符 仅对里面的 c csv 文件运行 grep压缩 如果你有zipgrep 据我所知 它是随zip
  • 从 GNU Makefile 调用 `command -v find`

    我使用 shell bash 但我需要可移植性 和 GNU Makefile 我有这个代码 check commands command v find gt dev null command v asdf gt dev null 正如假设的
  • 如何在 PHP 中执行 shell 脚本?

    我有一个脚本 var www myscript sh它创建文件夹并运行命令svn update对于我的项目 我需要通过在浏览器中的 PHP 文件中调用它来执行此脚本 即本地主机 test php 我尝试使用函数shell exec and
  • 是否可以为我的 Linux 函数复制命令的制表符补全?

    假设我有一个名为的 bash shell 函数magic 我想定义一个制表符补全功能 magic这将允许magic搭载任何给定命令的选项卡完成功能 如果可用 换句话说 我想要magic能够做这样的事情 magic git
  • 我收到错误“array.sh:3:array.sh:语法错误:”(“意外”

    我编写了以下代码 bin bash Simple array array 1 2 3 4 5 echo array 我收到错误 array sh 3 array sh 语法错误 意外 根据我从 Google 了解到的情况 这可能是因为 Ub
  • Linux 从设备本身运行的脚本卸载设备

    我在路径中安装了一个 iso 映像 mnt iso 在这个 iso 中我有一个安装脚本 install sh 我从 iso 运行安装脚本 最后脚本询问用户是否要卸载 iso 本身 如果用户按 y 脚本将执行以下代码 cd umount mn
  • “设置:非法选项 -”在一台主机上,但在另一台主机上则不然

    我在我的一台 ubuntu 虚拟机中编写了一个 sh 脚本 该脚本工作正常 但是当我尝试在其他虚拟机中运行它时 它不起作用 两个虚拟机应该相同 和bash version两个虚拟机均回复 GNU bash version 4 3 11 1
  • 如果给定键对应的值以指定字符串开头,则使用 jq 更新 JSON 文档中的对象

    我有给定的 JSON 并想更改id所有元素的值 以test in the name元素 other value some id values name test 2017 12 01 id 1 name othert id 2 以下 jq
  • 在 unix bash 脚本中可以嵌套 Here Document 吗?

    是否可以在另一个heredoc中编写一个heredoc ssh T q yxz server1 lt lt END TEXT ssh T q abc server2 lt lt SUB TEXT SUB TEXT END TEXT Yes
  • 如何在 ruby​​ Kernel.exec 之后运行代码

    我有以下红宝石外壳 usr bin env ruby stdin each line do line pid fork exec line puts after exec gt Process pid Process wait pid en
  • MongoDB - 编辑器变量 - MongoDB shell - Windows 7

    EDITOR 变量功能真的可以在 Windows 7 上使用吗 我正在读一篇文章 说一旦我们设置了 EDITOR 变量在 mongorc js 中 我们只需在 shell 中输入 编辑变量名 and var name将被加载到编辑器中 在我
  • 拼写检查 shell 脚本

    我有一些疑问 我对一个应该是简单拼写检查器的脚本有疑问 它的目的是 当发现错误的单词时 它会提示用户输入该单词的正确拼写 如果用户输入正确的拼写 则会显示更正的单词以及错误的单词 下面 在读完所有单词之后 但是 如果用户只是按 Enter
  • 如何从脚本编辑 /etc/sudoers?

    我需要编辑 etc sudoers从脚本中添加 删除白名单中的内容 假设我有一个可以处理普通文件的命令 我如何将其应用到 etc sudoers 我可以复制并修改它 然后有visudo用修改后的副本替换原始版本 通过提供我自己的脚本 EDI
  • Git - 显示远程分支的远程名称

    是否有一个 Git 命令可以显示远程分支的远程名称 目前 我坚持使用 shell utils 从远程分支引用中提取远程名称 例如 echo remote name branch name sed r s 1 remote name 有时出于
  • system 和 shell_exec 之间的区别

    有什么区别shell exec and systemPHP 中的方法 两者都采用单个命令行参数并在 PHP 中运行 使用其中一种比另一种更好吗 请参阅此处的解释 http chipmunkninja com Program Executio
  • 在 VBA 中捕获 shell 命令的输出值?

    发现这个功能http www cpearson com excel ShellAndWait aspx http www cpearson com excel ShellAndWait aspx 但我还需要捕获 shell 的输出 有什么代

随机推荐

  • Postman 自动化 API 测试

    特点 Postman 支持探索和测试 Web API 帮助测试人员和开发人员弄清楚 API 的工作原理 使用 Postman 可以为任何 API 创建有效的测试自动化 了解有效 API 测试的原则 使用 Postman 创建设计良好 文档化
  • 解决fiddler抓不到浏览器包的问题

    对于web开发人员来说 fiddler强烈推荐 他可以说是一款神器 但是我有次开启了fiddler之后 发现抓不到浏览器的包了 我不知道是什么原因 但是总算是解决了 下面是我找到的几个解决办法 我的是这样解决的 1 必须先打开FI 再打开浏
  • Android 8.0 华为手机 桌面应用图标显示圆形适配方案

    Android 8 0的启动图标适配方案可以参考以下两篇文章 一篇是郭霖大神的Android应用图标微技巧 8 0系统中应用图标的适配 还有另外一篇 android8 0桌面图标适配以及相应问题的解决 看过这里两篇文章的都大概懂了个原理 就
  • 通俗解读人脸检测框架-RetinaFace

    目录 一 简介 二 模型结构 1 MobileNet 0 25 2 FPN结构 3 SSH结构 4 Head结构 三 Anchor的编解码 四 Multi task Loss 一 简介 2019年何凯明提出Focal Loss时为了验证Fo
  • 以管理员身份运行bat文件

    echo off gt nul 2 gt 1 SYSTEMROOT system32 cacls exe SYSTEMROOT system32 config system if errorlevel NEQ 0 goto UACPromp
  • 线性代数——矩阵1

    矩阵 Matrix 不要把矩阵放在分母上 矩阵的概念 有m n个数排成的m行n列的数表称为m行n列的矩阵 简称m n 记作 这m n个数称为矩阵A的元素 简称为元 数aij位于矩阵A的第i行第j列 称为矩阵A的 i j 元 以数 aij为
  • GIT常用统计

    查看git上个人代码量 git log author username pretty tformat numstat awk add 1 subs 2 loc 1 2 END printf added lines s removed lin
  • va_list 详解

    VA LIST 是在C语言中解决变参问题的一组宏 VA LIST的成员 1 va list型变量 ifdef M ALPHA typedef struct char a0 pointer to first homed integer arg
  • 【Spring 核心

    IoC IoC 简介 定义 IoC 和 DI Bean IoC 容器 Ioc IoC容器 IoC 简介 定义 IoC即控制反转 Inversion of Control 缩写为 IoC IoC又称为依赖倒置原则 设计模式六大原则之一 IoC
  • 技术文档工程师笔试_如何帮助工程师制作技术文档

    技术文档工程师笔试 As discussed in my previous post technical writers are a vital part of any team They focus on creating documen
  • FPGA计数器边界问题解析

    FPGA计数器边界问题解析 一次作者在处理AMBE2000数据接收过程中 遇到一个问题 对该计数器边界总是模糊不清 现在予以说明 以警示以后工作时书写错误代码 AMBE2000数据一旦准备好后 一次会输出24个字 其中第1个字0x13ec是
  • 数智人力时代,如何通过人才精细化管理发挥员工最大效能

    人才作为企业竞争中最活跃 也最有创造力的资源要素 管理他们同样也不得马虎 一刀切和单一维度地进行人才分类 不利于员工充分发挥主观能动性 进而提升组织能力 而要让员工在工作中有成就感 获得感和主动性 就需要进行人才精细化管理 对症下药 才能实
  • thinter打开新窗口隐藏主窗口并实现窗口切换

    from tkinter import windows Tk windows geometry 500x300 windows title 主窗口 def b windows withdraw 隐藏主窗口 global root root
  • 百度AI(一)

    前言 第一步 在百度AI上注册账号 在控制台内创建属于你的相应的应用 以下是创建完成后的 API Key SecretKey 是俩个要用到的参数 根据文档 选择相应的API 人脸对比请求地址 发送请求获取 access token 注意 a
  • keepalived + lvs (DR)

    目录 一 概念 二 实验流程命令 三 实验的目的 四 实验步骤 一 概念 Keepalived和LVS Linux Virtual Server 可以结合使用来实现双机热备和负载均衡 Keepalived负责监控主备服务器的可用性 并在主服
  • MySQL —— 复合查询

    目录 MySQL复合查询 一 基本查询回顾 二 多表查询 三 自连接 四 子查询 1 单行子查询 2 多行子查询 3 多列子查询 4 在from子句中使用子查询 五 合并查询 MySQL复合查询 一 基本查询回顾 前面我们讲解的mysql表
  • 2023年——个人每日分享汇总

    摘要 今年是每日分享的第四个年头 在这几年分享中 虽然回头看不知道当时分享内容由何而感 分享内容现在也遗忘记不住 但是这个过程中能够感觉到自己的一个改变 现在的内容错别字少了 也会检查一下语句是否通顺 修行 修心 成长 价值 学到一个四阶段
  • vue过滤器和修饰符

    过滤器的作用 在我们页面显示值之前加一层过滤 展示我们过滤后的值 注意事项 过滤器可以用在两个地方 双花括号插值和 v bind 表达式 使用语法 变量 过滤器名 1 全局定义 Vue filter gettime function dat
  • 百度墨卡托坐标转百度经纬度坐标Python

    本文参考 https blog csdn net qq 16664325 article details 67639684 原文用的是java语言 我只是把它转成Python语言 xu 6370996 81 Sp 1 289059486E7
  • shell脚本----if(数字条件,字符串条件,字符串为空)

    二元比较操作符 比较变量或者比较数字 注意数字与字符串的区别 1 整数比较 cpp view plain copy print eq 等于 如 if a eq b ne 不等于 如 if a ne b gt 大于 如 if a gt b g