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

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h