转自:https://www.jianshu.com/p/617c1ee1e46e

| 运算符

管道符号,是unix一个很强大的功能,符号为一条竖线:"|"。
用法:
command 1 | command 2
他的功能是把第一个命令command 1执行的结果作为command2的输入传给command 2,例如:
$ls -s|sort -nr (请注意不要复制$符号进去哦)
-s 是file size,-n是numeric-sort,-r是reverse,反转
该命令列出当前目录中的文档(含size),并把输出送给sort命令作为输入,sort命令按数字递减的顺序把ls的输出排序。

&& 运算符:

格式

command1  && command2

&&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行;换句话说,“如果这个命令执行成功&&那么执行这个命令”。
语法格式如下:

command1 && command2 && command3 ...
  1. 命令之间使用 && 连接,实现逻辑与的功能。
  2. 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
  3. 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
  4. 示例1中,cp命令首先从root的家目录复制文件文件anaconda-ks.cfg到 /data目录下;执行成功后,使用 rm 命令删除源文件;如果删除成功则输出提示信息"SUCCESS"。

    示例1.jpg

|| 运算符:

格式

command1 || command2

||则与&&相反。如果||左边的命令(command1)未执行成功,那么就执行||右边的命令(command2);或者换句话说,“如果这个命令执行失败了||那么就执行这个命令。

  1. 命令之间使用 || 连接,实现逻辑或的功能。

  2. 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。

  3. 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。

  4. 示例2中,如果 dir目录不存在,将输出提示信息 fail 。

    示例2.jpg

  5. 示例3中,如果 dir 目录存在,将输出 success 提示信息;否则输出 fail 提示信息。

    示例3.jpg

    6.下面是一个shell脚本中常用的||组合示例

echo $BASH |grep -q 'bash' || { exec bash "$0" "$@" || exit 1; } 系统调用exec是以新的进程去代替原来的进程,但进程的PID保持不变。因此,可以这样认为,exec系统调用并没有创建新的进程,只是替换了原来进程上下文的内容。原进程的代码段,数据段,堆栈段被新的进程所代替。 

() 运算符:

如果希望把几个命令合在一起执行,shell提供了两种方法。既可以在当前shell也可以在子shell中执行一组命令。
格式:

(command1;command2;command3....)               多个命令之间用;分隔
  1. 一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔。执行的效果等同于多个独立的命令单独执行的效果。
  2. () 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令。
  3. 命令组合常和命令执行控制结合起来使用。
  4. 示例4中,如果目录dir不存在,则执行命令组合。

    示例4.jpg

{} 运算符:

如果使用{}来代替(),那么相应的命令将在子shell而不是当前shell中作为一个整体被执行,只有在{}中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子shell中执行,否则在当前shell执行。
它的一般形式为:

{ command1;command2;command3… }      注意:在使用{}时,{}与命令之间必须使用一个空格
  1. 示例5中,使用{}则在子shell中执行了打印操作


作者:shu_ke链接:https://www.jianshu.com/p/617c1ee1e46e來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

&& 运算符:

格式

command1  && command2

&&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行;换句话说,“如果这个命令执行成功&&那么执行这个命令”。
语法格式如下:

command1 && command2 && command3 ...
  1. 命令之间使用 && 连接,实现逻辑与的功能。
  2. 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
  3. 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
  4. 示例1中,cp命令首先从root的家目录复制文件文件anaconda-ks.cfg到 /data目录下;执行成功后,使用 rm 命令删除源文件;如果删除成功则输出提示信息"SUCCESS"。

    示例1.jpg

|| 运算符:

格式

command1 || command2

||则与&&相反。如果||左边的命令(command1)未执行成功,那么就执行||右边的命令(command2);或者换句话说,“如果这个命令执行失败了||那么就执行这个命令。

  1. 命令之间使用 || 连接,实现逻辑或的功能。

  2. 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。

  3. 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。

  4. 示例2中,如果 dir目录不存在,将输出提示信息 fail 。

    示例2.jpg

  5. 示例3中,如果 dir 目录存在,将输出 success 提示信息;否则输出 fail 提示信息。

    示例3.jpg

    6.下面是一个shell脚本中常用的||组合示例

echo $BASH |grep -q 'bash' || { exec bash "$0" "$@" || exit 1; } 系统调用exec是以新的进程去代替原来的进程,但进程的PID保持不变。因此,可以这样认为,exec系统调用并没有创建新的进程,只是替换了原来进程上下文的内容。原进程的代码段,数据段,堆栈段被新的进程所代替。 

() 运算符:

如果希望把几个命令合在一起执行,shell提供了两种方法。既可以在当前shell也可以在子shell中执行一组命令。
格式:

(command1;command2;command3....)               多个命令之间用;分隔
  1. 一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔。执行的效果等同于多个独立的命令单独执行的效果。
  2. () 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令。
  3. 命令组合常和命令执行控制结合起来使用。
  4. 示例4中,如果目录dir不存在,则执行命令组合。

    示例4.jpg

{} 运算符:

如果使用{}来代替(),那么相应的命令将在子shell而不是当前shell中作为一个整体被执行,只有在{}中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子shell中执行,否则在当前shell执行。
它的一般形式为:

{ command1;command2;command3… }      注意:在使用{}时,{}与命令之间必须使用一个空格
  1. 示例5中,使用{}则在子shell中执行了打印操作

shell的逻辑与或非

逻辑非 !               条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num ]        如果不存在目录$num
逻辑与 –a              条件表达式的并列
if [ 表达式1  –a  表达式2 ]
逻辑或 -o               条件表达式的或
if [ 表达式1  –o 表达式2 ]
  • 表达式与前面的=  != -d –f –x -ne -eq -lt等合用
  • 逻辑符号就正常的接其他表达式,没有任何括号( ),就是并列
if [ -z "$JHHOME" -a -d $HOME/$num ]
  • 注意逻辑与-a与逻辑或-o很容易和其他字符串或文件的运算符号搞混了

作者:shu_ke链接:https://www.jianshu.com/p/617c1ee1e46e來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/aaronLinux/p/8340281.html

[shell]shell 中| || () {} 用法以及shell的逻辑与或非相关推荐

  1. shell 中| || () {} 用法以及shell的逻辑与或非

    && 运算符: 格式 command1 && command2 &&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令 ...

  2. shell 创建文件_如何在shell脚本中创建与shell脚本同目录或者同相对路径的文件夹或者文件?...

    https://codingstandards.iteye.com/blog/800028​codingstandards.iteye.com linux 下 `dirname $0`​www.cnb ...

  3. shell脚本中的结构化命令(if-then-else、case、for、while、until) 脚本中的循环控制

    1. 结构化命令 上一次我们学习了shell脚本的一些基础知识,包括环境变量.重定向.数学运算.退出脚本的方式等,想了解的可以戳这个: shell脚本基础 之前,在我们的示例shell脚本里,shel ...

  4. linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  5. Shell脚本中的函数、数组

    Shell脚本中的函数 Shell脚本中的数组 转载于:https://blog.51cto.com/13515599/2107416

  6. shell脚本中执行命令_如何在Shell脚本中执行命令?

    shell脚本中执行命令 Shell is a command-line interpreter that allows the user to interact with the system. I ...

  7. shell 脚本中求一个字符串的长度

    shell 中没有可以直接求 某个字符串变量的长度,有时候 想判断 这个字符串的长度,该如何是好呢, 我们都知道  -n  -z  分别是 字符串不为空, 和字符串 为空. 有时候想知道,字符串的长度 ...

  8. shell root切换oracle_细说Shell脚本(一)

    作为一个开发者,我们会经常用到shell脚本来解决问题,无论是后端开发工程师还是运维人员,都离不开shell的使用.但是我们对shell脚本大部分都是应用阶段,下面我们来详细地介绍一下shell脚本的 ...

  9. shell语法中的test命令用法

    test命令用法.功能:检查文件和比较值 1)判断表达式 if test  (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2                  两个表达 ...

最新文章

  1. MySQL--Delete语句别名+LIMIT
  2. 开源贡献 计算_使用此网站为开源做贡献
  3. mac下宿主机与virtualbox中的Ubuntu建立ssh连接
  4. 在 Linux 上如何清除内存的 Cache、Buffer 和交换空间
  5. 可视化概念思维导图软件 MindMapper 17 Arena 完美汉化开心版
  6. Eureka-Client 注册服务到 Eureka-Server
  7. A8. 无人机编队飞行定位分析与讨论-大结局
  8. MATLAB自动设置仿真曲线颜色和线型属性
  9. 常用计算机病毒防治办法,计算机病毒防治方法
  10. golang_微信公众号网页授权
  11. java 获取 海康 视频流_海康网络摄像机调用SDK解码Java版
  12. JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库
  13. android手机如何加速,小技巧:如何给Android手机上的Chrome浏览器加速
  14. win10下的wsl真是太好用了
  15. 几大厂商的hypervisors比较分析
  16. 快速解决Solving environment: failed with initial frozen solve. Retrying with flexible solve
  17. Selenium中的By模块
  18. 那个人总有一天会爱你
  19. html mailto 不起作用,HTML Mailto 使用手记
  20. 芜湖~FILAgiao小设计:系统强提醒番茄时钟(简易电脑版)

热门文章

  1. php根据图片地址获取图片原始高宽,Js获取图片原始宽高的实现代码
  2. 反编译工具Reflector使用方法
  3. Advanced clustering methods (Cure, Chameleon, Rock, Jarvis-Petrich)
  4. 这样找电子书,方法贴!
  5. c语言 怎么把数据存储,急求如何将下列C语言程序数据存储到文件中?
  6. macbook pro python开发_年轻人第一台 Mac,来自一个开发者的 Macbook Pro 2019 16寸简评...
  7. python列表去重函数_对python中两种列表元素去重函数性能的比较方法
  8. 哪个版本好_揭秘爱他美奶粉哪个版本好?不同版本爱他美奶粉区别差异是什么?...
  9. pythonlist反转_Python 列表反转显示的四种方法
  10. 【C++入门】C++ string类