`

《Linux Shell》之八:I/O重定向

阅读更多

10.1.3 sed命令与管道

sed [option] 'sed command' inputfile

管道格式: | sed [option] 'sed command'

var1="Yahoo develops"

replace=Google

var2=$(echo $var1 | sed "s/Yahoo/$replace/g")

echo $var2

 

10.1.4 awk命令与管道

# awk -F ":" '{print $1 | "sort"}' /etc/passwd

# df -k | awk '$4>1000000'

 

10.2 I/O重定向

当linux系统启动一个进程时,将自动为该进程打开三个文件:stdin、stdout、stderr,分别由文件标识符0、1、2标识。

tee 命令 可以将shell命令的输出从stdout复制一份到某个文件中去

比如  

# who | tee output

# who | tee -a output  --> 追加到末尾

tee命令主要用于shell脚本的调试,尤其是管道的调试

基本I/O重定向符号及其意义:

符号 意义
cmd1 | cmd2 管道符,cmd1的输出当做cmd2的输入
> filename 标准输出写到filename中,覆盖
< filename 将文件内容读入到标准输入中去
>> filename 标准输出写到filename中,追加
>| filename 即使noclobber已开启,也写到文件中去,覆盖
n>| filename 即使noclobber已开启,也将FD为n的输出写到filename中去,覆盖
n> filename 将FD为n的输出写到文件filename中去
n< filename 将filename内容读入到FD为n中过去
n>> filename 将FD为n的输出写到filename中去,添加
<<delimiter 此处文档Here-document 

 

另外,介绍下bash的内置set命令选项:

set命令可以用来定制shell环境,使用选项“o”来打开或者关闭选项。例如打开选项:set -o 选项,关闭选项目:set +o 选项

# set -o #查看当前设置情况

noclobber选项设置是否能覆盖文件,如果设置了on就表示不允许覆盖文件,但是 >| 和 >>|是忽略这个选项的。可以自己试验下,不解释。

 

10.2.3 exec命令的用法:

exec命令可以通过文件标识符打开或关闭文件,也可以将标准输入从键盘输入重定向到文件,以及将标准输出重定向到文件。

先看将标准输入重定向到文件的例子:

#!/bin/bash

exec 8<&0  #FD 8是FD 0即标准输入的副本,用于恢复FD 0

exec < hfile
read a
read b
echo "-----------------"
echo $a
echo $b
echo "close FD 8"
exec 0<&8 8<&-  #将FD 8恢复给FD 0后,关闭FD 8,以便其它进程可以使用FD 8这个文件标识符

echo -n "Pls. enter data: "
read c
echo $c

 < 等价于 0<符号

 

再看将标准输出重定向到文件的例子:

#!/bin/bash

exec 8>&1
exec > logger

echo "output ...."
date
echo "----------"
df
exec 1>&8 8>&- # 将FD 8复制到FD 1 并关闭FD 8好让其它进程可以使用这个文件标识符
echo "after reset...."
date
df

 > 符号和 1>等价

 

高级I/O重定向符号及其意义:

符号 意义
n>&m 将FD为m的输出复制到FD为n的文件
n<&m 将FD为m的输入复制到FD为n的文件
n>&- 关闭FD为n的输出
n<&- 关闭FD为n的输入
&>file 将stdout和stderr重定向到file

 

10.2.4 代码块重定向或者函数重定向

#!/bin/bash

ls /etc > logger

while [ "$filename" != "rc.d" ]
do
    read filename
    let "count += 1"
done < logger

echo "$count times read"
echo -n "---------Pls input file"
read test
echo $test

 

10.3.2 eval命令

eval命令将其参数作为命令行,让shell重新执行该命令行,eval的参数再次经过shell命令行处理的12个步骤

如果变量中包含任何需要shell直接在命令中看到的字符,就需要使用eval命令。命令结束符(; | &)、IO重定向符(< >)和引号这些对shell具有特殊意义的符号,就必须直接出现在命令行中,否则就要使用eval

#!/bin/bash

echo "the number is $#"
echo -n "the arg is : $(eval echo \$$#)"
echo "----------END---------------"

 

 本人博客已搬家,新地址为:http://yidao620c.github.io/

 

分享到:
评论

相关推荐

    基于C++实现的Linux的 Shell 程序+项目开发文档,实现基本的命令执行功能,支持 I/O 重定向和管道操作

    本项目旨在开发一个用于 Linux 的 Shell 程序,利用 C++ 标准库和 Linux 系统调用来实现。该 Shell 程序提供了基本的命令执行功能,支持 I/O 重定向和管道操作,并实现了一些内置命令

    Linux下重定向详解

    在深入了解Linux下的I/O重定向之前,首先需要掌握一些基础的概念。 - **I/O重定向**:通常与文件描述符(File Descriptor, FD)有关,shell中通常包含10个文件描述符,编号为0至9。 - **常用文件描述符**: - 0 ...

    Linux实验八:LinuxC-编程-IO-重定向和管道.doc

    在Linux系统中,I/O重定向和管道是两种重要的进程间通信(IPC)方式,它们允许我们改变程序的标准输入、输出和错误流,或者在不同的进程中传递数据。本实验主要涵盖了这两个主题,通过编写和运行C语言程序来实践。 ...

    Shell脚本学习指https://pan.baidu.com/s/1sPfOlmfcq1PmzOkD0ZnsyA

    3. **命令行I/O**:理解标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的概念,以及重定向和管道(|)的用法。 4. **函数**:创建和使用自定义函数来组织和重用代码。 5. **文件和目录操作**:学习如何...

    shell浅谈之八IO重定向.docx

    总结,I/O 重定向是 Linux shell 中的重要特性,它提供了灵活的数据流控制,允许用户和程序以非交互方式处理输入和输出。通过管道、重定向操作符以及 tee 命令,我们可以构建复杂的命令链,实现数据处理和自动化任务...

    OS + Linux Shell bash / sh / ksh / csh / tcsh / adb shell

    - **I/O重定向**:如标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的概念,以及如何通过文件描述符进行管理。 - **bash扩展**:如数组、关联数组、预定义变量、内建命令等bash特有的特性。 在提供的...

    shell(C语言开发)

    4. I/O 重定向:myshell 支持 I/O 重定向,stdin 和 stdout。 5. 后台程序执行:myshell 支持后台程序执行。 myshell 的源代码 myshell 的源代码主要包括以下部分: 1. 头文件引用:myshell.c 文件中引用了 stdio...

    main_linuxC语言shell_shell_linuxshell编程_

    基于linux的操作系统外壳。编写一个C 语言程序作为Linux 内核的shell 命令行解释程序,所执行的结果需和...修改程序,增加I/O 重定向功能。即用户可以使用”&lt;”、”&gt;”和”|”符号改变程序/文件的输入和输出。

    编的一个linux Shell ,能实现管道,重定向,以及一些基本的Shell 编程功能.zip

    虽然两者之间直接的关系不明显,但你可以考虑使用C#编写一个命令行应用程序,实现类似Shell的功能,这将涉及到进程管理和I/O操作等C#编程知识。 总结来说,你创建的这个Linux Shell项目涵盖了命令行工具的核心要素...

    Linuxshell程序设计(一).ppt

    Shell提供了丰富的功能,包括命令执行、文件名扩展(通配符)、I/O重定向、管道、环境控制、后台处理、结构化编程以及脚本编写等。 6.1 Shell概述: - Shell的特点包括命令执行能力,它允许用户通过键盘输入命令...

    关于shell语言的,是从C语言改变过来的

    Shell语言,源自C语言,是Unix/Linux操作系统中的命令解释器,它为用户提供了与操作系统进行交互的接口。作为脚本编程语言,Shell不仅用于执行单个命令,还能编写复杂的脚本来自动化日常任务,提高工作效率。在本文...

    linux,unix系统:用户的登录与退出、IO重定向与简单文件操作.pdf

    本实验旨在掌握 Linux/Unix 系统的用户登录与退出、IO 重定向和简单文件操作,熟悉系统的图形界面和字符界面,并了解命令操作方法和I/O 的重定向机制。 一、系统的开启和关闭 1. 系统的开启:通过 Windows 系统...

    linux shell 编程经典 教程

    1. 标准输入(stdin)、标准输出(stdout)和标准错误(stderr)是Shell的基本I/O流。 2. 使用重定向符号(&lt;, &gt;, &gt;&gt;)可以改变程序的输入源或输出目标。 3. 管道(|)允许将一个命令的输出作为另一个命令的输入。 ...

    《LINUX与UNIX SHELL编程指南》读书笔记-二次发布版

    5. I/O重定向和管道:在脚本中可以使用上述I/O重定向和管道功能。 四、Shell特殊字符和引用 1. 特殊字符:比如`$`用于引用变量,`#`用于注释,`&`表示后台运行,`*`和`?`作为通配符。 2. 引用:单引号`' '`和双引号...

    LINUX SHELL脚本攻略(中文版带书签).rar

    1. **I/O重定向**:`&gt;`将输出重定向到文件,`&gt;&gt;`追加到文件,`将文件内容作为输入。 2. **管道**:`|`将一个命令的输出作为另一个命令的输入,实现命令间的串联。 **六、Shell脚本实战应用** 1. **系统监控**:编写...

    一个简单的shell

    5. **I/O重定向和管道**: Shell还支持输入/输出重定向(如`&gt;`和`)和管道(`|`),使用户能够灵活地组合命令和数据流。 **基本流程** 1. **读取用户输入**: Shell会持续监听终端输入,当用户键入一行命令并按下...

    Linux 操作系统内核实验-Shell命令解释系统设计

    Shell命令解释系统设计: 问题A: 实现一个能处理前后台运行命令的shell 问题B: 实现一个带有管道功能的shell 问题C: 实现一个能处理I/O重定向的shell 问题D: 实现一个能在一行上处理多条命令的shell

    Shell命令解释系统设计

    在本文中,我们将深入探讨如何设计一个具备处理前后台运行命令、管道、I/O重定向以及多命令执行功能的Shell。 首先,我们要理解Shell命令解释器的核心职责。它的主要工作是接收用户的命令输入,解析这些命令,并...

    linux shell编程从初学到精通源码4-17全

    4. **文件和目录操作**:熟悉I/O重定向(标准输入、输出、错误)、管道、文件描述符,以及与文件和目录相关的命令,如cd、ls、mkdir、rm、cp、mv等。 5. **正则表达式**:学习使用正则表达式进行模式匹配,这对于...

Global site tag (gtag.js) - Google Analytics