0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

shell腳本基礎(chǔ):重定向和管道符

FPGA學(xué)姐 ? 來源:FPGA學(xué)姐 ? 2023-05-04 11:09 ? 次閱讀

重定向符

一、輸出重定向

標(biāo)準(zhǔn)輸出的目標(biāo)位置通常指向的是終端屏幕??梢允褂?符號(hào)修改標(biāo)準(zhǔn)輸出的目標(biāo)位置。比如下面的示例就會(huì)將ps命令的輸出重定向到result.txt文件。描述符和>之間不能有空格

$ ps > result.txt  ←----- 由于已經(jīng)重定向到 result.txt 文件,所以屏幕上不會(huì)輸出任何內(nèi)容
$ cat result.txt
  PID TTY          TIME CMD
10745 pts/0    0000 bash
10873 pts/0    0000 ps

如果文件已經(jīng)存在,則該文件會(huì)被覆蓋,文件內(nèi)容將丟失

如果不想使用>覆蓋原文件,而想向原文件追加寫入,可以使用>>重定向

$ echo line1 >> echo.txt
$ echo line2 >> echo.txt
$ echo line3 >> echo.txt
$ cat echo.txt
line1
line2
line3

重定向并不是命令的功能,而是shell的功能,只要命令能將執(zhí)行結(jié)果輸出到標(biāo)準(zhǔn)輸出,就可以實(shí)現(xiàn)重定向。但是只有標(biāo)準(zhǔn)輸出會(huì)被重定向,標(biāo)準(zhǔn)錯(cuò)誤輸出還是會(huì)直接顯示到屏幕上,那么如何將錯(cuò)誤輸出重定向?

可以使用2>符號(hào),數(shù)字2是稱為文件描述符的編號(hào)

$ ls /xxx 2> error.txt
$ cat error.txt
ls: 無法訪問'/xxx': 沒有那個(gè)文件或目錄

0edc28de-e633-11ed-ab56-dac502259ad0.png

也就是說例子1中相當(dāng)于是1>

或者2>>指令對(duì)錯(cuò)誤進(jìn)行重定向

$ ls /xxx 2>> error.txt
$ cd /xxx 2>> error.txt
$ cat error.txt
ls: 無法訪問 '/xxx': 沒有那個(gè)文件或目錄
-bash:cd:/xxx:沒有那個(gè)文件或目錄

標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到同一個(gè)文件(n>&m的含義是將文件描述符n設(shè)置為文件描述符m的副本)

$ ls /usr /xxx > ls_result.txt 2>&1

輸出到不同文件(將ls命令的標(biāo)準(zhǔn)輸出重定向到result.txt文件,并將標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到error.txt文件)

$ ls /usr /xxx > result.txt 2> error.txt

使用分組命令重定向(如果想在使用{ }時(shí)將多條命令寫到一行,需要在每條命令后面加上;)

#!/bin/bash
{
    date +%Y-%m-%d
    echo '/usr list'
    ls /usr
} > result.txt
#------------------------------------------------------------
$ { date +%Y-%m-%d; echo '/usr list'; ls /usr; } > result.txt

分組命令的{后面要有空格,還可以使用( )代替{ }

二、輸入重定向

$ tr b B
abcd←-----從鍵盤輸ru
aBcd     ←----- b 被替換為 B
my book  ←----- 從鍵盤輸入
my Book  ←----- b 被替換為 B

tr命令對(duì)鍵盤輸入的東西進(jìn)行替換吧

$ cat word.txt
abcd                 ←----- word.txt 文件的內(nèi)容
my book
$trbB

管道

命令的輸出內(nèi)容除了可以重定向輸出到文件,還可以作為其他命令的輸入使用。

使用less命令顯示ls命令的標(biāo)準(zhǔn)輸出內(nèi)容

$ ls | less
...            <-----(本行及以下5行)less 命令輸出示例
Documents      
Movies         
Music          
Public         
(END)

等效于

$ ls > result.txt
$ less < result.txt

注意:管道只會(huì)將前一條命令的標(biāo)準(zhǔn)輸出傳遞給之后的命令,而第1條命令的標(biāo)準(zhǔn)錯(cuò)誤輸出則不會(huì)傳遞給后面的命令。

$ ls /usr/bin | grep 'py' | wc -l
6

如果使用管道來連接一個(gè)同時(shí)顯示標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出的命令,那么屏幕上將只顯示標(biāo)準(zhǔn)錯(cuò)誤輸出的內(nèi)容。如果想將標(biāo)準(zhǔn)錯(cuò)誤輸出和標(biāo)準(zhǔn)輸出一起傳遞給后面的命令,那么使用前面介紹的2>&1這種重定向方式即可

$ ls /usr /xxx 2>&1 | less
ls: 無法訪問'/xxx': 沒有那個(gè)文件或目錄

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    551

    瀏覽量

    24559
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    658

    瀏覽量

    21927
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    359

    瀏覽量

    23192
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    382

    瀏覽量

    14761
  • Shell腳本
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    7944

原文標(biāo)題:shell腳本基礎(chǔ)(四)重定向和管道符

文章出處:【微信號(hào):FPGA學(xué)姐,微信公眾號(hào):FPGA學(xué)姐】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    shell腳本進(jìn)階】幾個(gè)常用的shell進(jìn)階腳本

    shell腳本進(jìn)階】幾個(gè)常用的shell進(jìn)階腳本
    的頭像 發(fā)表于 09-19 08:59 ?1724次閱讀
    【<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>進(jìn)階】幾個(gè)常用的<b class='flag-5'>shell</b>進(jìn)階<b class='flag-5'>腳本</b>

    shell核心知識(shí)常見符號(hào)和流程控制:13.1 重定向 管道符

    Shell
    充八萬
    發(fā)布于 :2023年07月12日 11:18:39

    Linux后臺(tái)程序重定向的問題

    目前有一種方法是在程序后臺(tái)啟動(dòng)的時(shí)候,直接重定向到某個(gè)shell或telnet。方法如下:如tty命令查看目標(biāo)shell為 /dev/pts/0./yourapp & > /dev
    發(fā)表于 08-22 13:54

    linux shell數(shù)據(jù)重定向(輸入重定向與輸出重定向)詳細(xì)分析

    使用實(shí)例介紹這些默認(rèn)的輸出,輸入都是linux系統(tǒng)內(nèi)定的,我們在使用過程中,有時(shí)候并不希望執(zhí)行結(jié)果輸出到屏幕。我想輸出到文件或其它設(shè)備。這個(gè)時(shí)候我們就需要進(jìn)行輸出重定向了。linux shell下常用
    發(fā)表于 03-02 13:59

    Linux Shell系列教程之(十六) Shell輸入輸出重定向

      一、Shell輸入輸出重定向概述  在了解重定向相關(guān)知識(shí)之前,我們先來看看Linux的文件描述符?! inux的文件描述符可以理解為linux跟蹤打開文件,而分配的一個(gè)數(shù)字,這個(gè)數(shù)字有點(diǎn)類似c
    發(fā)表于 09-12 15:53

    嵌入式和物聯(lián)網(wǎng)的shell腳本學(xué)習(xí)指南之shell腳本入門免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)技術(shù)的是嵌入式和物聯(lián)網(wǎng)的shell腳本學(xué)習(xí)指南之shell腳本入門免費(fèi)下載。
    發(fā)表于 09-11 17:15 ?20次下載
    嵌入式和物聯(lián)網(wǎng)的<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>學(xué)習(xí)指南之<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>入門免費(fèi)下載

    shell腳本最簡明的教程

    Shell腳本,就是利用Shell的命令解釋的功能,對(duì)一個(gè)純文本的文件進(jìn)行解析,然后執(zhí)行這些功能,也可以說Shell腳本就是一系列命令的集合
    的頭像 發(fā)表于 10-16 11:27 ?4592次閱讀
    <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>最簡明的教程

    管道符、重定向與環(huán)境變量

    1.標(biāo)準(zhǔn)輸入重定向(STDIN,文件描述符為0):默認(rèn)從鍵盤輸入,也可從其他文件或命令中輸入。 3.錯(cuò)誤輸出重定向(STDERR,文件描述符為2):默認(rèn)輸出到屏幕。 表2 輸出重定向中用到的符號(hào)及其
    發(fā)表于 04-29 08:48 ?574次閱讀

    Keil下使用STlink重定向printf的配置

    Keil下使用STlink重定向printf的配置1. printf 重定向Keil默認(rèn)下使用Micro LIB庫,該庫調(diào)用 fputs 實(shí)現(xiàn) printf,所以需要重新定義fputs函數(shù),以重定向
    發(fā)表于 12-27 18:43 ?18次下載
    Keil下使用STlink<b class='flag-5'>重定向</b>printf的配置

    109個(gè)實(shí)用shell腳本分享

    Shell腳本,就是利用Shell的命令解釋的功能,對(duì)一個(gè)純文本的文件進(jìn)行解析,然后執(zhí)行這些功能,也可以說Shell腳本就是一系列命令的集合
    的頭像 發(fā)表于 03-16 08:58 ?2482次閱讀

    shell腳本基礎(chǔ)知識(shí)

    shell腳本是一個(gè)文件,里面存放的是特定格式的指令,系統(tǒng)可以使用腳本解析器翻譯或解析指令并執(zhí)行(無需編譯),shell腳本的本質(zhì)是
    的頭像 發(fā)表于 04-17 15:00 ?965次閱讀

    Linux I/O重定向詳解

    Linux I/O重定向可以定義為,更改從命令讀取輸入到命令發(fā)送輸出的方式。你可以重定向命令的輸入和輸出。對(duì)于重定向符號(hào),可以是 或者 | 。
    的頭像 發(fā)表于 05-04 14:34 ?737次閱讀

    Linux Shell腳本經(jīng)典案例分享

    ? 作為一名 Linux 運(yùn)維工程師,會(huì)寫好的腳本不僅能提高工作效率,還能有更多的時(shí)間做自己的事。最近在網(wǎng)上沖浪的時(shí)候,發(fā)現(xiàn)大家對(duì)Shell腳本都有“心結(jié)”,要么覺得自己寫出來不好看,要么根本無從下手。 下面分享249個(gè)真實(shí)
    發(fā)表于 06-16 14:03 ?588次閱讀
    Linux <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>經(jīng)典案例分享

    Linux管道符不是你想用就能亂用的!

    管道符號(hào),是unix一個(gè)很強(qiáng)大的功能,符號(hào)為一條豎線:"|"。
    的頭像 發(fā)表于 06-28 09:12 ?732次閱讀

    linux知識(shí)中常用到的管道符號(hào)有哪些

    作為一個(gè)高級(jí)linux運(yùn)維人員所要知道的,為什么要少用管道符?并不是說方便就可以大量使用,我們需要考慮到其執(zhí)行的速度及效率,下面一起通過實(shí)例看看管道符要少用的原因!
    發(fā)表于 09-29 07:00 ?1853次閱讀