Linux:Bash中的命令介绍(简单命令、管道以及命令列表)

2024-08-24 22:12

本文主要是介绍Linux:Bash中的命令介绍(简单命令、管道以及命令列表),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相关阅读

Linuxicon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482


        在Bash中,命令执行的方式可以分为简单命令、管道和命令列表组成。这些结构提供了强大的工具,允许用户组合命令并精确控制其执行方式。以下是对这些Bash命令形式的介绍。

1.、简单命令(Simple Commands)

        简单命令是最常见的命令形式。它由一系列用空白(制表符、空格)分隔的token组成,并由shell的控制符号终止(换行符(newline)、后台执行符(&)或命令分隔符(;),注意这里的后台执行符(&)或命令分隔符(;)后仍然要有换行符(newline),之后不再进行特殊说明

结构

        简单命令的第一个单词通常指定要执行的命令,随后的单词是该命令的选项或参数。例如:

ls -l /home/user [newline or & or ;]

        其中,ls是命令名,-l是命令的选项,/home/user是命令的参数。

返回状态

        一般情况下(指没有后台执行),简单命令的返回状态是命令的退出状态(exit status)。POSIX标准定义的waitpid系统调用返回这个状态,通常为零表示成功,非零表示失败。如果命令因信号而终止,则返回128加上信号编号。可以通过特殊变量@?获得上一条前台命令的返回状态。

控制符号

        (1)换行符(newline):换行符是命令的一般默认终止符号,它告诉shell执行命令并在命令结束时将提示符返回给用户。

ls -l /home/user[newline]

        (2)后台执行符(&):使用后台执行符结尾的命令命令将以异步的方式在子shell(注意子shell和子进程shell的区别,见Linux:subshell(子shell)和childprocess(子进程))中执行,shell不会等待该命令完成,而是立即返回提示符让用户执行其他命令,而命令会在后台继续运行。后台执行命令的返回状态永远为0。如果作业控制未激活(即shell无法管理多个作业或命令),后台命令的标准输入会自动从/dev/null重定向。这意味着该命令将无法从终端或任何输入源读取数据,因为/dev/null会丢弃所有输入。

ls -l /home/user &

        (3)命令分隔符(;):命令分隔符用于将多个命令串联在一起(一般用于命令列表),shell会顺序执行这些命令,每个命令之间没有条件依赖,所有命令都会按照出现的顺序执行。

ls -l /home/user ;

2、管道(Pipelines)

        管道是由一个或多个命令组成的序列,每个命令之间通过管道符(|或|&)分隔,由shell的控制符号终止(换行符(newline)、后台执行符(&)或命令分隔符(;))。

结构

        一个管道命令的基本形式如下:

command1 [| or |&] command2 [| or |&]  command3 [newline or & or ;]

        在这个例子中,command1的标准输出会作为command2的标准输入,command2的标准输出会作为 command3的输入,这些连接会在重定向发生前就进行。、

        |&用于将标准错误和标准输出一起传递给下一个命令,相当于重定向2>&1 |的缩写。

执行方式

        管道中的所有命令都是同时执行的,即command2并不会等待command1结束才执行,这可以通过下面的命令进行验证。

sleep 5 | sleep 5 ;

         管道中的所有命令分别在各自的子shell中执行,且shell会等待管道中的所有命令完成(在不使用后台执行符的前提下)。

返回状态

        一般情况下(指没有后台执行),管道的返回状态通常是最右边命令的退出状态。如果启用了pipefail选项,那么返回状态将是最右边第一个非零的返回状态。

3、命令列表(Lists of Commands)

        命令列表是由一个或多个管道(不包括管道最后的终止控制符号)组成的序列,通过控制符号(命令分隔符(;)、后台执行符(&)、与操作符(&&)、或操作符(||))分隔。由shell的控制符号终止(换行符(newline)、后台执行符(&)或命令分隔符(;))。

结构

        (1)用命令分隔符(;)分隔的管道会按顺序执行,shell会等待每个管道结束后再执行下一个管道。

Pipeline1 ; Pipeline2 ; Pipeline3 [newline or & or ;]

        (2)用后台执行符(&)分隔的管道,以后台执行符(&)结尾的管道将以异步的方式在子shell中执行。

Pipeline1 & Pipeline2 & Pipeline3 [newline or & or ;]

        其中Pipeline3是否后台执行,取决于结尾是否是后台执行符(&)。

        (3)用与操作符(&&)分隔的管道,只有左边的管道执行成功(返回状态为0,右边的管道才会执行)。

Pipeline1 && Pipeline2 [newline or & or ;]

        如果Pipeline1执行成功(退出状态为0),则执行Pipeline2。否则,Pipeline2不会执行。

        (4)用或操作符(||)分隔的管道,只有左边的管道执行失败(返回状态非0,右边的管道才会执行)。

Pipeline1 || Pipeline2 [newline or & or ;]

        如果Pipeline1执行失败(退出状态非0),则执行Pipeline2。否则,Pipeline2不会执行。

        这四个控制符号可以混用,其中||和&&的优先级最高且相同,其次是优先级较低的&,优先级最低的是;。

Pipeline1 || Pipeline2 && Pipeline3 &

        上面的命令列表根据相同优先级的结合性被解释为下面的形式。

# 整体后台执行
((Pipeline1 || Pipeline2) && Pipeline3) &
Pipeline1 ; Pipeline2 &

        上面的命令列表根据优先级被解释为下面的形式。

# Pipeline后台执行
(Pipeline1 ;) (Pipeline2 &)

返回状态

        命令列表的返回状态是列表中最后前台执行的管道的返回状态。

Pipeline1 & Pipeline2 [newline]

        上面的命令列表的返回状态是Pipeline2的返回状态,因为Pipeline1后台执行。

这篇关于Linux:Bash中的命令介绍(简单命令、管道以及命令列表)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103742

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon