经典技术(转义元字符):

if [ \( "$g" -eq 1 -a "$c" = "123" \) -o \( "$g" -eq 2 -a "$c" = "456" \) ]

then echo abc

else echo efg

fi

我已经$g用双引号将引用括起来;一般来说,这是一个好习惯。严格来说,并不需要括号,因为的优先级-a,并-o使得它纠正,甚至没有他们。

请注意,-aand -o运算符是testaka 的POSIX规范的一部分[,主要是为了向后兼容(例如,因为它们是test7th Edition UNIX 的一部分),但是POSIX将它们明确标记为“过时”。Bash(请参阅条件表达式)似乎抢先了经典和POSIX的含义,-a并-o带有自己的接受参数的替代运算符。

一定要小心,您可以使用更现代的[[运算符,但是请注意,例如Bash和Korn Shell中的版本不必相同。

for g in 1 2 3

do

for c in 123 456 789

do

if [[ ( "$g" -eq 1 && "$c" = "123" ) || ( "$g" -eq 2 && "$c" = "456" ) ]]

then echo "g = $g; c = $c; true"

else echo "g = $g; c = $c; false"

fi

done

done

在Mac OS X上使用Bash 3.2.57运行示例:

g = 1; c = 123; true

g = 1; c = 456; false

g = 1; c = 789; false

g = 2; c = 123; false

g = 2; c = 456; true

g = 2; c = 789; false

g = 3; c = 123; false

g = 3; c = 456; false

g = 3; c = 789; false

您不需要像使用引号一样引用变量[[,[因为它不是以相同的方式[是单独的命令。

这不是一个经典的问题吗?

我会这么想的。但是,还有另一种选择,即:

if [ "$g" -eq 1 -a "$c" = "123" ] || [ "$g" -eq 2 -a "$c" = "456" ]

then echo abc

else echo efg

fi

的确,如果您阅读了该autoconf工具或相关软件包的“便携式外壳”指南,则建议使用“ ||”和“ &&” 这种符号。我想您甚至可以做到:

if [ "$g" -eq 1 ] && [ "$c" = "123" ]

then echo abc

elif [ "$g" -eq 2 ] && [ "$c" = "456" ]

then echo abc

else echo efg

fi

在动作像回声一样琐碎的情况下,这还不错。当要重复的动作块为多行时,重复会很痛苦,并且较早的版本之一是可取的-否则您需要将动作包装到在不同then块中调用的函数中。

linux脚本多个条件比较大小,如何在shell if语句中表示多个条件?相关推荐

  1. Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程

    本文是Linux Shell脚本系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之 后,分支语句非常实用,基本上高级语言都支持分支语句(pytho ...

  2. oracle大于条件,oracle中sql语句中的in的条件数量大于1000有问题

    oracle中sql语句中的in的条件数量大于1000有问题 oracle中sql语句中select * from t_Test t where  t.Id in(1,2,3......)/*数量不能 ...

  3. 如何在if语句中表示多个条件?

    本文翻译自:How to represent multiple conditions in a shell if statement? I want to represent multiple con ...

  4. 转在同一个sql语句中如何写不同条件的count数量

    今天在做Portal中的Dashboard展现的时候,需要对多个统计字段做展现,根据我现在的掌握水平,我只能在sql调用构建器中实现一种sql语 句返回的resultSet做展现.没有办法,只能从数据 ...

  5. linux shell ifeq,Makefile中的ifeq 多条件使用

    Makefile中的ifeq 多条件使用 网上关于makefile中ifeq的介绍已经很多了,为什么我还要在写这篇文章,因为他们只说了if else两种条件的情况,并没有讲多于两种条件情况的使用. 多 ...

  6. shell判断false_Python中的True, False条件判断

    对于有编程经验的程序员们都知道条件语句的写法: 以C++为例: if (condition) { doSomething(); } 对于Python中的条件判断语句的写法则是下面的样子: if (co ...

  7. linux脚本生成数字写入文本,4.2 编写Shell脚本(P80-85)——《Linux就该这么学》学习笔记16...

    一.Shell 脚本命令的2种工作方式 交互式:输入一条(命令),执行一条 批处理:事先写好一个Shell脚本,一次性执行里面的所有命令 备注:Shell脚本不仅包含命令,还包含操作逻辑(if,for ...

  8. linux脚本第一行是什么,完全搞懂shell脚本第一行:#!/bin/bash的含义

    转自:https://blog.csdn.net/Doris0214/article/details/91453113 shell脚本的第一行一般会写有以下字样: #!/bin/bash 或者 #!/ ...

  9. lisp语言cond和if套用_在'if'语句中设置多行条件的样式?

    Harley Holco.. 679 您不需要在第二个条件行上使用4个空格.也许用: if (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val ...

最新文章

  1. python使用PyMySQL的连接MySQL数据库
  2. 解决ngnix服务器上的Discuz!x2.5 Upload Error:413错误
  3. mysql带where条件导出数据表以及部分错误解析
  4. 简易boundbox碰撞检测
  5. Python中包含义及其定义
  6. Struts DispatchAction
  7. idea java主题_IDEA变身超级形态,需要这个酷炫主题
  8. 快速实现MySQL迁移到Redis
  9. IRF之LACP-MAD检测
  10. iOS 几个时间类型
  11. FireFox2和FireFox3共存解决方案(附完整图解)
  12. idea2021设置代码字体大小
  13. 薛定谔Maestro--LigPrep 准备配体
  14. 只读更新全程图解教程(转)
  15. spark编程:DataFrame和SQL编程基础-2
  16. 使用 Telnet 手动接收邮件 (基于 macOS 系统)
  17. python turtle画猫_Turtle库画小猫咪
  18. 电力英语和计算机平台,电力计算信息平台,the Computing Information Platform of Electric Power,音标,读音,翻译,英文例句,英语词典...
  19. 怎样学好计算机英语,怎样学好小学英语
  20. Ubuntu16.04LTS部署CEPH文件存储集群

热门文章

  1. mysql 手机号 字段_2021-01-06:mysql中,我存十亿个手机号码,考虑存储空间和查询效率,用什么类型的字段去存?...
  2. signature=5edb6549fd9da7abd1cea3d5008f5c15,IMPLEMENTING INVERTED MASTER-SLAVE 3D SEMICONDUCTOR STACK
  3. pycharm 如何跳转光标上次查看的位置 ctrl+alt+(←→)(前进和返回)
  4. lua脚本简单编辑及常用指令
  5. 变异蛮牛 树,dfs,二分图染色 牛客白月赛44
  6. 面向对象---类与对象
  7. 安装计算机教室的请示,教室使用申请书4篇
  8. 数组模拟队列(代码实现)
  9. python语言百分号的含义_python【百分号】
  10. python packages_Python-Packages