linux编程22shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)(代码片段)

花阴偷移 花阴偷移     2022-11-23     308

关键词:

1. 输出重定向

  最基本的重定向是将命令的输出发送到一个文件中。在bash shell中用大于号(>) ,格式如下:command > inputfile。例如:将date命令的输出内容,保存到指定的输出文件中。
    
  如果文件已存在,重定向操作符会用新的文件数据覆盖已有文件。这种情况下可以用双大于号(>>) 来追加数据。如下图所示:
    


2. 输入重定向

  输入重定向和输出重定向正好相反。输入重定向是将文件的内容重定向到命令,而非将命令的输出重定向到文件。 输入重定向符号是小于号(<),格式如下:Command < inputfile。下面是test1文件和wc命令一起使用输入重定向的例子。 wc 命令可以对文件内容进行计数包括文本的行数、文本的词数、文本的字节数。
    
  另外一种输入重定向的方法,称内联输入重定向(符号是 <<)。这种方法无需使用文件进行重定向,只需要在命令行中指定用于输入重定向的数据就可以了。计数包括文本的行数、文本的词数、文本的字节数。
    

3. 管道

  管道符号是单个竖线( | ) ,管道被放在命令之间,将一个命令的输出重定向到另一个命令中。格式: command1 | command2 。Linux系统会同时运行这两个命令,在系统内部将它们连接起来。在第一个文件产生输出的同时,输出会被立即送给第二个命令,数据不会用到任何中间文件或缓冲区。例如查找yum安装的所有包,并使用管道立即送给第二个命令 grep 来过滤查询字符中含有mysql的。
    
  下面是使用了二个管道, 排序,分页查看。并将结合重定向来将输出保存到yum.list文件中,下图是通过cat yum.list来查看文件内容。

[hsr@xuegod64 ~]$ yum  list | sort | more
[hsr@xuegod64 ~]$ yum  list | sort  >  yum.list

    

4. 数学运算命令

   在Bourne shell 中使用expr命令来进行数字运算。在bash shell 中也兼容,但它提供了更简单的方法来执行数学表达式, 在bash中, 将一个数学变量结果赋给某个变量时,可以用美元符和方括号( $[operation] ) 将数学表达式围起来(注意运算只支持整数)。
    
  同样也适合于shell脚本中。
    


5. 浮点解决方案
  
有几种方法克服bash中数学运算的整数限制,最常见的方案是用内建的bash计算器叫作bc。
  5.1   bc的基本用法
    bash计算器实际上是一种编程语言,它允许在命令行输入浮点表达式,然后解释并计算该表达式,返回结果。Bash 计算器能够识别: 数字,变量,注释,表达式,编程语句(if -then)。
    用法是在命令行输入bc,接着输入要进行运算的数字表达式,按回车出结果,如下图所示:
    
    对于保留小数位,使用scale指定要保留的小数位,下面先指定保留4位小数。
    
    下面使用 bc –q选项不显示bash计算器的欢迎信息。使用变量来看看,如下图:
    
  5.2  在脚本中使用bc
    使用之前学过的命令替换,可以用命令替换运行bc命令,并将输出赋给一个变量。格式如下: variable=$(echo “options; expression” | bc) options是允许你设置变量,如果不止一个,用分号分开。 expression定义了通过bc执行的数学表达式。
    下面是将scale变量设置成四位小数,并在expression部份指定了特定的运算。
    
    下面是在脚本中使用变量来运算浮点数
    

下面另一种方法是通过内联重定向,格式是 :
variable=$(bc << EOF
Options
Statements
Expressions
EOF)

    

 6. 退出脚本

  6.1 查看退出状态码
    shell中运行的每个命令都有退出状态码(exit status)告诉shell它已经运行完毕。退出状态码是一个0~255的整数值。在命令结束时由命令传给shell,可以捕获这个值并在脚本中使用.
    Linux提供了一个专门的变量$? 来保存上个已执行命令退出状态码。这个类似于一种开发中用断点诊断方式。 如果命令成功结束退出状态码是0,如果命令有错误,退出状态就是一个正整数。如下图所示:
    
    下面是linux退出状态码列表

状态码

描述

0

命令成功结束

1

一般性未知错误

2

不适合的shell命令

126

命令不可执行

127

没有找到命令

130

通过ctrl + c 终止的命令

255

正常范围之外的退出状态码

    需要注意的是退出状态码126 出现,有可能是用户没有执行命令的正确权限. 另一个退出状态码 1的出现,有可能是命令的参数不对。

  6.2 exit
    默认情况下,shell脚本会以脚本中最后一个命令的退出状态码退出。使用exit 命令可以改变这种默认行为,返回自己的的退出状态码,exit 命令允许脚本结束时指定一个退出状态码,但最大状态码只能是255。
    下面在脚本最后自定义退出状态码10,  执行脚本后,使用echo $? 输出了状态码10 。
    

 

 

  

 

shell编程shell中bash基本功能(代码片段)

目录Bash基本功能-历史命令和补全历史命令命令和文件补全Bash基本功能-别名与快捷键命令别名设定别名查询别名命令执行时顺序让别名永久生效删除别名Bash常用快捷键Bash基本功能-输入输出重定向标准输入输出输出重定向标准... 查看详情

shell编程shell中bash基本功能(代码片段)

目录Bash基本功能-历史命令和补全历史命令命令和文件补全Bash基本功能-别名与快捷键命令别名设定别名查询别名命令执行时顺序让别名永久生效删除别名Bash常用快捷键Bash基本功能-输入输出重定向标准输入输出输出重定向标准... 查看详情

linuxshell编程:管道和重定向(代码片段)

标准输入输出执行一个shell命令行时通常会自动打开三个标准文件即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中... 查看详情

linux系统编程:基础io下dup2实现输出重定向输入重定向追加重定向|理解磁盘|理解文件系统中inode的概念|软硬链接(代码片段)

写在前面这里先接着《基础IO上》中的缓冲区的内容作些补充,这里主要补充dup2接口。✔测试用例一:#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>intmain() clos 查看详情

linux系统编程:基础io下dup2实现输出重定向输入重定向追加重定向|理解磁盘|理解文件系统中inode的概念|软硬链接(代码片段)

写在前面这里先接着《基础IO上》中的缓冲区的内容作些补充,这里主要补充dup2接口。✔测试用例一:#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>intmain() clos 查看详情

linux系统编程:基础io下dup2实现输出重定向输入重定向追加重定向|理解磁盘|理解文件系统中inode的概念|软硬链接(代码片段)

写在前面这里先接着《基础IO上》中的缓冲区的内容作些补充,这里主要补充dup2接口。✔测试用例一:#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>intmain() clos 查看详情

反弹shell基础

...重定向。(2)重定向输入的重定向包括,<和<<,输出的重定向包括,>和>>,n<file代表将文件描述符n重定向到file指代的文件(以只读方式打开),如果n省略就是0(标准输入)。同理如果是输出的重定向,n>file,... 查看详情

详解shell输出重定向:>/dev/null2>&1

...要的地方。重定向这个概念在C语言中就有,在C语言编程中,标准输出是屏幕,使用printf()函数默认是输出到屏幕显示。但是有时候我们需要将信息输出到文件或者申请的内存中,这时候就可以用sprintf()和fprintf()函... 查看详情

shell从入门到精通(13)输出重定向(代码片段)

初步认知在写Shell脚本的时候,我们经常会想将命令的输出结果保存到文件中,或者将命令的执行结果保存到日志记录中。这时候就需要把命令的输出结果重定向。而要进行重定向,就要了解Linux的输入输出流。在Linux中有三个经... 查看详情

shell输入输出重定向

标准输入:0 <,<<或者0<0<<标准输出:1 >,>>或者1>,1>>错误输出:2 2>>,2>/dev/null这个设备,是linux中黑洞设备,什么信息只要输出给这个设备,都会给吃掉将标准输出,错误输出都发送给/... 查看详情

十shell篇——管道与重定向(代码片段)

...一样,也是进程通信的方式之一匿名管道(管道符)是Shell编程经常用到的通信工具管道符是“|”,将前一个命令执行的结果传递给后面的命令ps|cat(1)将第一条命令的输出作为第二条命令的输入user1@SC02ZRC4KMD6NGit%ls-l|more(2)cat和... 查看详情

linux常用命令及使用技巧

...的单字符shell的重定向:  输入重定向<和<<  输出重定向>和>>  错误重定向2>和2>>shell的管道  |建立管道连接,将一个命令的输出作为下一个命令的输入shell的引用 查看详情

shell编程总结

...内核与用户之间的绝缘层,同时也是一种功能相当强大的编程语言。一个Shell程序,通常称为脚本,它是一个由系统调用,命令工具,软件包和已编译的二进制包"粘合" 起来的极易使用的工具。事实上,整个UNIX系统命令,软... 查看详情

linux学习输入输出重定向和管道功能cat命令more命令(代码片段)

目录输入输出重定向输出重定向管道功能cat命令more命令@(输入输出重定向和管道功能)输入输出重定向输入重定向可以让用户将某个文件作为输入设备,输出重定向可以把某个文件作为输出设备,从而使文件更加灵活输入重定向... 查看详情

linux重定向与管道

重定向redirection 每个命令有输入源和输出目的地,默认行为,是标准输入和标准输出。大多数情况,标准输入是键盘,标准输出是屏幕。可以为单独的操作修改输入和输出,这就是重定向。重定向可以使某个命令从源文件输... 查看详情

linux学习第一周;标准输入输出和错误重定向与管道

标准输入标准输出标准错误重定向:<#标准输入重定向,默认为键盘输入,利用<可以将文件代替键盘输入>#标准输出重定向(会覆盖1.text里面的内容);例子:ls>/data/1.text(将ls命令输出结果重定向道1.text中)>>#标... 查看详情

标准io和重定向(代码片段)

标准输入和标准输出Linux中执行命令执行一个shell命令行时通常会自动打开三个标准文件即:标准输入(STDIN)-0默认接受来自键盘的输入标准输出(STDOUT)-1默认输出到终端窗口标准错误(STDERR)-2默认输出到终端窗口I/O重定... 查看详情

将程序输出重定向到文件和shell [重复]

】将程序输出重定向到文件和shell[重复]【英文标题】:Redirectingprogramoutputtofileandshell[duplicate]【发布时间】:2014-07-0104:27:22【问题描述】:我有一个python程序,它可以打印一些我尝试从命令行执行的打印。我想将输出重定向到一... 查看详情