LINUX基礎培訓二十七之shell標準輸入、輸出、錯誤

一、Shell 輸入/輸出重定向

大多數 UNIX 系統命令從你的終端接受輸入并將所產生的輸出發送回??到您的終端。一個命令通常從一個叫標準輸入的地方讀取輸入,默認情況下,這恰好是你的終端。同樣,一個命令通常將其輸出寫入到標準輸出,默認情況下,這也是你的終端。

文件描述符(fd):文件描述符是一個非負整數,在打開現存文件或新建文件時,內核會返回一個文件描述符,讀寫文件也需要使用文件描述符來訪問文件。
內核為每個進程維護該進程打開的文件記錄表。文件描述符只適于 Unix、Linux 操作系統。

文件描述符 0 通常是標準輸入(STDIN),1 是標準輸出(STDOUT),2 是標準錯誤輸出(STDERR)。

二、重定向符號

輸入和輸出可以被重定向符號解釋到 shell。
shell 命令是從左到右依次執行命令。
> ?符號左邊輸出作為右邊輸入(標準輸出)
>> 符號左邊輸出追加右邊輸入
< ?符號右邊輸出作為左邊輸入(標準輸入)
<< 符號右邊輸出追加左邊輸入
& ?重定向綁定符號

1、重定向輸出
重定向一般通過在命令間插入特定的符號來實現。
實例:
執行下面的 who 命令,它將命令的完整的輸出重定向在用戶文件中(users):
$ who > users
執行后,并沒有在終端輸出信息,這是因為輸出已被從默認的標準輸出設備(終端)重定向到指定的文件。
你可以使用 cat 命令查看文件內容:
$ cat users

輸出重定向會覆蓋文件內容,請看下面的例子:
$ echo "username is john" > users
$ cat users
username is john

如果不希望文件內容被覆蓋,可以使用 >> 追加到文件末尾,例如:

$ echo "username is john" >> users
$ cat users
username is john
username is john
?

2、重定向輸入
一般格式:[n]<word
如果 n 沒有指定,默認是 0
示例:
a.txt 內容作為 grep 輸入:
# grep "test" --color < a.txt

實例:
接著以上實例,我們需要統計 users 文件的行數,執行以下命令:

$ wc -l users
? ? ? ?2 users
也可以將輸入重定向到 users 文件:

$ ?wc -l < users
? ? ? ?2 ?
?

三、重定向標準輸出和標準錯誤

1)覆蓋重定向標準輸出和標準錯誤
&>word 和>&word 等價于 >word 2>&1?
&將標準輸出和標準輸入綁定到一起,重定向 word 文件。
示例:
當不確定執行對錯時都覆蓋到文件:
# echo "1 + 1" |bc &> error.log
當不確定執行對錯時都覆蓋到文件:
# echo "1 + 1" |bc > error.log 2>&1

2)追加重定向標準輸出和標準錯誤
&>>word 等價于>>word 2>&1
示例:
當不確定執行對錯時都追加文件:
# echo "1 + 1" |bc &>> error.log

?

3)重定向操作符command << delimiter
shell將分界符delimiter之后直至下一個同樣的分界符之前的所有內容都作為輸入,遇到下一個分界符,shell就知道輸入結束了。
這一命令對于自動或遠程的例程非常有用。可以任意定義分界符delimiter,最常見的是EOF。

示例:自動登錄ftp下載文件
ftp -in 192.168.100.100 <<EOF
user test test
get 1.txt
bye
EOF

四、重定向到空設備

/dev/null 是一個空設備,向它寫入的數組都會丟棄,但返回狀態是成功的。與其對應的還有一個/dev/zero 設備,提供無限的 0 數據流。
在寫 Shell 腳本時我們經常會用到/dev/null 設備,將 stdout、stderr 輸出給它,也就是我們不想要這些輸出的數據。
通過重定向到/dev/null 忽略輸出,比如我們沒有安裝 bc 計算器,正常會拋出沒有發現命令:
# echo "1 + 1" |bc >/dev/null 2>&1
這就讓標準和錯誤輸出到了空設備。
忽略標準輸出:
# echo "test" >/dev/null
忽略錯誤輸出:
# echo "1 + 1" |bc 2>/dev/null
?

五、read 命令

read 命令從標準輸入讀取,并把輸入的內容復制給變量。
命令格式: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p?
prompt] [-t timeout] [-u fd] [name ...]

獲取用戶輸入保存到變量:
# read -p "Please input your name: " VAR
Please input your name: lizhenliang

用戶輸入保存為數組:
# read -p "Please input your name: " -a ARRAY
Please input your name: a b c
# echo ${ARRAY[*]}
a b c

遇到 e 字符返回:
# read -d e VAR
123
456
e
# echo $VAR
123 456
?

從文件作為 read 標準輸入: # cat a.txt adfasfd # read VAR < a.txt # echo $VAR adfasfd while 循環讀取每一行作為 read 的標準輸入: # cat a.txt |while read LINE; do echo $LINE; done 123 abc 分別變量賦值: # read a b c 1 2 3 # echo $a 1 # echo $b 2 # echo $c 3

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/710622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710622.shtml
英文地址,請注明出處:http://en.pswp.cn/news/710622.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【樹莓派系統配置+python3.8+環境配置踩坑點匯總】raspberrypi

最近又開始搞樹莓派的深度學習模型。很多windows端的環境需要在樹莓派上重新部署&#xff0c;中間出現了非常多的問題。主要以各種庫的下載安裝為主要。 首先&#xff0c;第一個問題&#xff1a; 樹莓派系統燒錄之后&#xff0c;默認apt一般需要升級看&#xff0c;而默認下載…

無窮級數法求Π

任務描述 本關任務&#xff1a;編寫一個無窮級數法計算圓周率的小程序。 相關知識 為了完成本關任務&#xff0c;你需要掌握&#xff1a; 無窮級數法 無窮級數法 π 是個超越數&#xff0c;圓周率的超越性否定了化圓為方這種尺規作圖精確求解問題的可能性。有趣的是&…

【Spring】18 Bean 定義繼承

文章目錄 介紹聲明式配置抽象Bean定義繼承的配置項注意&#xff1a;抽象Bean預實例化結論 Spring 框架提供了一個強大的功能&#xff0c;稱為 Bean 定義繼承&#xff0c; 允許開發人員高效地在 bean 之間重用和自定義配置。在本篇文章中我們將介紹 Bean 定義繼承的概念&#x…

JVM性能優化

運行時優化 方法內聯 方法內聯&#xff0c;是指 JVM在運行時將調用次數達到一定閾值的方法調用替換為方法體本身 &#xff0c;從而消除調用成本&#xff0c;并為接下來進一步的代碼性能優化提供基礎&#xff0c;是JVM的一個重要優化手段之一。 注&#xff1a; C的inline屬于編…

babylonsjs入門-基礎模版

基于babylonjs封裝的一些功能和插件 &#xff0c;希望有更多的小伙伴一起玩babylonjs&#xff1b; 歡迎加群&#xff08;點擊群號傳送&#xff09;&#xff1a;464146715 官方文檔 中文文檔 案例傳送門 ? 懶得打字&#xff0c;你們直接去copy組件吧&#xff0c;主要看這2…

舊版android模擬器,37歲程序員被裁

前言 從18年畢業至今&#xff0c;就職過兩家公司&#xff0c;大大小小項目做了幾個&#xff0c;非常感謝我的兩位老大&#xff0c;在我的android成長路上給予我很多指導&#xff0c;亦師亦友的關系。 從年前至今參加面試了很多公司&#xff0c;也收到了幾家巨頭的offer&#…

transformer--編碼器2(前饋全連接層、規范化層、子層鏈接結構、編碼器層、編碼器)

前饋全連接層 什么是前饋全連接層: 在Transformer中前饋全連接層就是具有兩層線性層的全連接網絡 前饋全連接層的作用: 考慮注意力機制可能對復雜過程的擬合程度不夠,通過增加兩層網絡來增強模型的能力 code # 前饋全連接層 class PositionwiseFeedForward(nn.Module):de…

絕地求生:發現吃雞號被盜,怎么操作才是最正確的

首先閑游盒先了解一下盜號者的盜號流程 一般盜號的流程是先把你steam上的皮膚飾品出售&#xff0c;然后把余額轉走&#xff0c;再把steam賬號作為黑號進行出售。 所以當閑游盒發現號被盜的時候也分為兩種情況&#xff1a;一種是他正在出售商品的時候&#xff0c;你收到郵箱提示…

Linux命令行與shell腳本編程大全-3-4

第三部分高級shell腳本編程 第17章創建函數 17.1 腳本函數基礎 17.1.1 創建函數 在bash shell 腳本中創建函數的語法有兩種。第一種語法是使用關鍵字function&#xff0c;隨后跟 上分配給該代碼塊的函數名&#xff1a; function name { commands } 17.1.2 使用函數 要在腳…

代碼隨想錄算法訓練營Day46 | 139.單詞拆分、多重背包(卡碼網56.攜帶礦石資源)

139.單詞拆分 可以理解為一道 完全背包 排列 的題&#xff0c;dp數組定義和遞推公式部分腦子需要轉個彎 1、DP數組定義&#xff1a;一維滾動數組vector<bool>。dp[j]表示字符串s的[0, j]子串是否能夠匹配。 2、DP數組初始化&#xff1a;dp[0]初始化為true&#xff0c;其…

Multi-Head Attention詳解

文中大部分內容以及圖片來自&#xff1a;https://medium.com/hunter-j-phillips/multi-head-attention-7924371d477a 當使用 multi-head attention 時&#xff0c;通常d_key d_value &#xff08;d_model / n_heads&#xff09;&#xff0c;其中n_heads是頭的數量。研究人員稱…

01-Vue2 介紹與指令的使用

1. Vue核心 1.1. Vue簡介 1.1.1. 官網 中文官網Vue.js - 漸進式 JavaScript 框架 | Vue.js (vuejs.org)https://cn.vuejs.org/ 英文官網Vue.js - The Progressive JavaScript Framework | Vue.js (vuejs.org)https://vuejs.org/ 1.1.2. 介紹與描述 VUE是構建于用戶界面的漸進…

靶機滲透之sar

Name: Sar: 1Date release: 15 Feb 2020Author: LoveSeries: Sar Download: https://drive.google.com/open?id1AFAmM21AwiAEiVFUA0cSr_GeAYaxd3lQ 對于vulnhub中的靶機&#xff0c;我們都需先下載鏡像&#xff0c;然后導入VM&#xff0c;并將網絡連接改為NAT模式。首先我們…

UDP數據報套接字編程入門

目錄 1.TCP和UDP的特點及區別 1.1TCP的特點 1.2UDP的特點 1.3區別 2.UDP Socket的api的介紹 2.1DatagramSocket API 2.2DatagramPacket API 3.回顯客戶端與服務器 3.1回顯服務器 3.1.1UdpEchoServer類的創建 3.1.2服務器的運行方法start() 3.1.3main部分 3.1.4.完整…

C# CAD PaletteSet.Style各種外觀和行為樣式

ps.Style 是 Autodesk.AutoCAD.Windows.PaletteSet 類的一個屬性&#xff0c;用于定義調色板集&#xff08;PaletteSet&#xff09;的各種外觀和行為樣式。它可以是 PaletteSetStyles 枚舉類型的組合值 PaletteSetStyles 枚舉中包含以下一些選項&#xff1a; NameEditable&am…

統計子矩陣

一、題目描述 P8783 [藍橋杯 2022 省 B] 統計子矩陣 二、算法簡析 2.1 二維前綴和 我們知道&#xff0c;只要確定了矩陣的左上頂點和右下頂點&#xff0c;一個矩陣就被固定了。因此&#xff0c;我們可以遍歷這兩個頂點&#xff0c;達到遍歷所有子矩陣的目的&#xff0c;復雜…

AutoSAR(基礎入門篇)12.5-Dem

目錄 一、Dem簡介 二、Dem消抖 1、計數模式 1. 普通增減計數 2. 反向歸零增減模式

在微服務整合dubbo,以為微服務版的若依為例

在微服務整合dubbo&#xff0c;以為微服務版的若依為例 一、環境二、整合過程1、父模塊依賴2、生產者3、消費者 三、修改若依的服務調用方式為dubbo1、改造系統模塊2、改造認證授權中心 四、整合過程遇到的問題1、出現循環引用2、出現依賴沖突3、啟動出現端口號被占用4、出現某…

UVa11726 Crime Scene

題目鏈接 UVa11726 - Crime Scene 題意 給定n&#xff08;n≤100&#xff09;個物體&#xff0c;每個物體都是一個圓或者k&#xff08;k≤10&#xff09;邊形&#xff0c;用長度盡量小的繩子把它們包圍起來。 分析 孟加拉國Manzurur Rahman Khan (Sidky)大神出的難題&#xff…

MySQL 核心模塊揭秘 | 07 期 | 二階段提交 (1) prepare 階段

二階段提交的 prepare 階段&#xff0c;binlog 和 InnoDB 各自會有哪些動作&#xff1f; 本文基于 MySQL 8.0.32 源碼&#xff0c;存儲引擎為 InnoDB。 1. 二階段提交 二階段提交&#xff0c;顧名思義&#xff0c;包含兩個階段&#xff0c;它們是&#xff1a; prepare 階段。…