Linux之Shell编程(12)--Shell输入/输出重定向实例演示

Posted 菠萝印象威

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之Shell编程(12)--Shell输入/输出重定向实例演示相关的知识,希望对你有一定的参考价值。

一.Shell重定向简介

从标题我们可以知道,Shell的重定向有两种,第一种是输入重定向,另外一种就是输出重定向。其实,输入输出重定向就是改变输入与输出的方向。

输入输出方向是什么?
1.从键盘读取输入的数据,把数据拿到程序中(C语言程序、Shell 脚本程序等)使用,这是一种标准的输入方向,从键盘到程序。如果改变了它的方向,数据就从其它地方流入,这就是输入重定向

2.程序中会产生数据,这些数据直接呈现到屏幕上,这是另一种标准的输出方向,也就是从程序到显示器。如果改变了它的方向,数据就流向其它地方,这就是输出重定向

二.Shell输出重定向

输出重定向是指命令的结果不输出到显示器上,而是输出到其它地方,一般是文件中,这样做的好处是可以将结果保存起来

输出重定向命令如下:

命令解释
command > file将输出重定向到 file
command >> file将输出以追加的方式重定向到 file。
command 2>file以覆盖的方式,把 command 的错误信息输出到 file 文件中。
command 2>>file以追加的方式,把 command 的错误信息输出到 file 文件中。
command >file 2>&1以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(file)中。
command >>file 2>&1以追加的方式,把正确输出和错误信息同时保存到同一个文件(file)中。
command >file1 2>file2以覆盖的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。
command >>file1 2>>file2以追加的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。

注意:
1.在输出重定向中,>代表的是覆盖,>>代表的是追加。
2.command >file或者command >> file,完整的写法是command 1 >file或者command 1 >> file.默认为1,即标准输出文件。
3.如果大于1则必须写,比如:command 2>file,即将错误的输出结果重定向到file中,这里的2和>之间不能有空格。

输出重定向实例演示:

#!/bin/bash
i=10
echo $i >log.txt

在这里插入图片描述
发现在本地会生成log.txt,打开会得到10。
在这里插入图片描述
如果改成echo $i >>log.txt
在这里插入图片描述
在这里插入图片描述
演示输入错误内容
在这里插入图片描述

#!/bin/bash
file="Java"
cd $file 2>>log.txt

结果:
在这里插入图片描述
这里执行output.sh不会报错,而是会把错误信息重定向到log.txt中。
在这里插入图片描述
去掉2直接运行会报错。
在这里插入图片描述
循环输出重定向实例演示:

#!/bin/bash
for i in i love china
do
    echo $i >>log.txt
done

在这里插入图片描述
结果:
在这里插入图片描述
演示将正确信息和错误信息同时重定向到文件中

#!/bin/bash
for i in i love china
do
    echo $i >>log.txt
done

j=Java
cd $j >>log.txt 2>&1

在这里插入图片描述
结果:
在这里插入图片描述

三.Shell输入重定向

输入重定向就是改变输入的方向,不使用键盘作为命令输入的来源,而是使用文件作为命令的输入。

输入重定向命令如下:

命令解释
command <file将 file 文件中的内容作为 command 的输入。
command <file1 >file2将 file1 作为 command 的输入,并将 command 的处理结果输出到 file2。
command <<END从键盘中读取数据,直到遇见结束符 END 才停止(结束符可以是任意的字符串,可以自己定义)。

和输出重定向类似,输入重定向的写法由>变为<,完整的写法是command 0<file,不写默认为0。

实例演示输入重定向
以log.txt作为输入,输出log.txt的行数。
在这里插入图片描述
将log.txt作为输入,将对log.txt操作的结果输出到outfile.txt。
在这里插入图片描述
从键盘读取数据,直到遇到END才结束。
在这里插入图片描述
逐行读取文件内容。
在这里插入图片描述

#!/bin/bash
while read str; do
    echo $str
done <log.txt

结果:
在这里插入图片描述

今天是高考的第一天,我在这里祝愿各位高考的学生旗开得胜。

以上是关于Linux之Shell编程(12)--Shell输入/输出重定向实例演示的主要内容,如果未能解决你的问题,请参考以下文章

linux12shell编程 -->流程控制之for循环1

linux12shell编程 -->流程控制之case

linux12shell编程 --> 流程控制之select语句

linux12shell编程 --> 三剑客之grep命令

linux12shell编程 -->流程控制之while循环

linux12shell编程 --> 三剑客之awk命令