Shell 標準輸入、輸出和錯誤

防偽碼:桃花潭水深千尺,不及汪倫送我情。

文件描述符(fd):文件描述符是一個非負整數,在打開現存文件或新建文件時,內核會返回一個

文件描述符,讀寫文件也需要使用文件描述符來訪問文件。

內核為每個進程維護該進程打開的文件記錄表。文件描述符只適于 Unix、Linux 操作系統。

8. 1 ?標準輸入、輸出和錯誤

文件描述符 ?描述 ?映射關系

0 ?標準輸入,鍵盤 ?/dev/stdin -> /proc/self/fd/0

1 ?標準輸出,屏幕 ?/dev/stdout -> /proc/self/fd/1

2 ?標準錯誤,屏幕 ?/dev/stderr -> /proc/self/fd/2

8.2 ?重定向符號

符號 ?描述

> ?符號左邊輸出作為右邊輸入(標準輸出)

>> ?符號左邊輸出追加右邊輸入

< ?符號右邊輸出作為左邊輸入(標準輸入)

<< ?符號右邊輸出追加左邊輸入

& ?重定向綁定符號

輸入和輸出可以被重定向符號解釋到 shell。

shell 命令是從左到右依次執行命令。

下面 n 字母是文件描述符。

8.3 ?重定向 輸出

1)覆蓋輸出

一般格式:[n]>word

如果 n 沒有指定,默認是 1

示例:

打印結果寫到文件:echo "test" > a.txt

當沒有安裝 bc 計算器時,錯誤輸出結果寫到文件:echo "1 + 1" |bc 2> error.log

2)追加重定向輸出

一般格式:[n]>>word

如果 n 沒有指定,默認是 1

示例:

打印結果追加到文件:echo "test" >> a.txt

當沒有安裝 bc 計算器時,錯誤輸出結果追加文件:echo "1 + 1" |bc 2> error.log

8.4 4 重定向輸入

一般格式:[n]<word

如果 n 沒有指定,默認是 0

示例:

a.txt 內容作為 grep 輸入:grep "test" --color < a.txt

8.5 5 重定向標準輸出和標準錯誤

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

將標準輸出和標準標準輸入追加重定向到 word:

<<[-]word

here-document

delimiter

從當前 shell 讀取輸入源,直到遇到一行只包含 delimiter 終止,內容作為標準輸入。

將 eof 標準輸入作為 cat 標準輸出再寫到 a.txt:

# cat <<eof

123

abc

eof

123

abc

# cat > a.txt << eof

> 123

> abc

> eof

8.6 ?重定向到 空設備

/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

d 8.7 read ?命令

read 命令從標準輸入讀取,并把輸入的內容復制給變量。

命令格式: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p

prompt] [-t timeout] [-u fd] [name ...]

-e ?在一個交互 shell 中使用 readline 獲取行

-r ?不允許反斜杠轉義任何字符

-s ?隱藏輸入

-a array ?保存為數組,元素以空格分隔

-d delimiter ?持續讀取直到遇到 delimiter 第一個字符退出

-i text ?將 test 文本作為

-n nchars ?讀取 nchars 個字符返回,而不是等到換行符

-N nchars ?讀取 nchars 個字符返回,除非遇到文件結束符或超時,其他分隔符都被忽略

-p prompt ?提示信息

-t timeout ?等待超時時間,秒

-u fd ?指定文件描述符號碼作為輸入,默認是 0

name ?變量名

示例:

獲取用戶輸入保存到變量:

# read -p "Please input your name: " VAR

Please input your name: lizhenliang

# echo $VAR

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

# echo 1 2 3 | while read a b c;do echo "$a $b $c"; done

1 2 3

謝謝觀看,真心的希望能幫到您!

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

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

相關文章

java需要會的工具_Java開發者必備的幾款工具,一定要掌握!

原標題&#xff1a;Java開發者必備的幾款工具&#xff0c;一定要掌握&#xff01;NotepadNotepad是用于編輯xml、腳本以及記筆記的最佳工具。這個工具的最好部分在于&#xff0c;你在Notepad上打開的任何一個文檔&#xff0c;在關閉后都會有一個殘留文檔&#xff0c;它有助于在…

java的equals方法_Java LocalDateTime類| 帶示例的equals()方法

java的equals方法LocalDateTime類equals()方法 (LocalDateTime Class equals() method) equals() method is available in java.time package. equals()方法在java.time包中可用。 equals() method is used to check whether this date-time and the given object are equal or…

portlet java_Java Portlet 規范概述

前言1、portlet是一種類似servlet的規范。2、servlet是web組件&#xff0c;portlet也是web組件。參考1、百度百科&#xff1a;portlethttp://baike.baidu.com/link?urlvMzVwpkf5WzOL23GLkgM4C5C7Sarqh1XXShS73L7k-MbGgM0ooZ4Dl2Efor3bb4tZmmLo6v-muG5UW7_CYMTUahttp://hintcnu…

Java LocalDate類| minusWeeks()方法與示例

LocalDate類minusWeeks()方法 (LocalDate Class minusWeeks() method) minusWeeks() method is available in java.time package. minusWeeks()方法在java.time包中可用。 minusWeeks() method is used to subtract the given weeks from this LocalDate and return the LocalD…

Android推薦的幾本書

2019獨角獸企業重金招聘Python工程師標準>>> 第一階段 <<第一行代碼Android>><<瘋狂Android>>第二階段 <<Android開發藝術探索>><<Android群英傳>>Android源碼 第三階段 <<Android開發藝術探索>><&…

java數據類型后綴_java基礎知識---基本數據類型

1)四種整數類型(byte、short、int、long)&#xff1a;byte&#xff1a;8 位&#xff0c;用于表示最小數據單位&#xff0c;如文件中數據&#xff0c;-128~127short&#xff1a;16 位&#xff0c;很少用&#xff0c;-32768 ~ 32767int&#xff1a;32 位、最常用&#xff0c;-2^3…

duration java_Java Duration類| minusMillis()方法與示例

duration java持續時間類minusMillis()方法 (Duration Class minusMillis() method) minusMillis() method is available in java.time package. minusMillis()方法在java.time包中可用。 minusMillis() method is used to subtract the given duration in milliseconds from t…

Thread 和 Runnable創建新線程的區別,Runnable可以共享線程類的實例屬性

Thread實現多線程&#xff1a; public class Thread2 extends Thread{ public int i; public void run(){ for(; i < 100 ;i) { System.out.println(getName() " " i); } } public static void main(String[] args){ for (int j 0; j < 100; j) { System…

java編程求最小公約數_java求最大公約數與最小公倍數

public class Gongyueshu{public static void main(String[] args){//從控制臺輸入兩個數據int m Integer.parseInt(args[0]);int n Integer.parseInt(args[1]);int y 1 ;int b 1;if (m > 0 && n >0){//先判定這兩個數是否為倍數關系&#xff0c;如果是則小數…

tdr上升時間什么設定_TDR的完整形式是什么?

tdr上升時間什么設定TDR&#xff1a;時域反射儀/車票寄存收據/定期存款收據 (TDR: Time Domain Reflectometer/ Ticket Deposit Receipt/ Term Deposit Receipt) 1)TDR&#xff1a;時域反射儀 (1) TDR: Time Domain Reflectometer) TDR is an abbreviation of the "Time D…

【java】反射+poi 導出excel

2019獨角獸企業重金招聘Python工程師標準>>> 反射 導出的數組轉變成對象 private static Object expexcelMaptobean(Class<?> cobj,Map<String,String> map,int[] expColums,String[] params) throws InstantiationException, IllegalAccessException…

css設置背景圖片大小_如何使用CSS設置背景圖片大小?

css設置背景圖片大小Introduction: 介紹&#xff1a; As we all know that the images are a very responsive yet very creative way to display your web page or website to the users. The images also play a major role in indulging users to websites or web pages. T…

java gc的特性_Java12新特性 -- 可中斷的G1 Mixed GC

Java 12 中增強了 G1 垃圾收集器關于混合收集集合的處理策略&#xff0c;這節主要介紹在 Java 12 中同時也對 G1垃圾回收器進行了改進&#xff0c;使其能夠在空閑時自動將 Java 堆內存返還給操作系統&#xff0c;這也是 Java 12 中的另外一項重大改進。目前 Java 11 版本中包含…

在Python3中將字符串轉換為字節的最佳方法

To convert a string to bytes, there are more than one way, 要將字符串轉換為字節&#xff0c;有多種方法&#xff0c; Approach 1: use encode() method 方法1&#xff1a;使用encode()方法 test_str "include_help"print(type(test_str))test_bytes test_st…

【Java】PMD規則學習(1) --字符串比較

PMD是一款采用BSD協議發布的Java程序代碼檢查工具。該工具可以做到檢查Java代碼中是否含有未使用的變量、是否含有空的抓取塊、是否含有不必要的對象等。該軟件功能強大&#xff0c;掃描效率高&#xff0c;是Java程序員debug的好幫手。 PMD支持的編輯器包括&#xff1a;JDevelo…

php定義object數據類型,PHP數據類型(4):對象object

//創建一個類class Student{//定義屬性public $name XuGZh;public $age 20;public $sex 男;//定義方法public function getInfo(){//當前對象中訪問自己屬性用偽變量$thisreturn my name:.$this->name..my age:.$this->age..my sex:.$this->sex;}}對象初始化:要創建…

avr計數_使用8位LCD創建計數器| AVR

avr計數This type of counter may be also used in the EVM machines. A counter can be used to count the number of times a button is pressed. It can have many applications. The most widely used counter application is in EVM and also in customer feedback machin…

php將字符變為數字,數字字符怎么轉化為數字 php 怎么將字符轉成數字

java中&#xff0c;String字符串轉化為數字我現在想把一個String字符串轉化為數字&#xff0c; String s"00000123" 我直接使java中String字符串轉化為數字&#xff1a; 轉換為浮點型&#xff1a; 使用Double或者Float的parseDouble或者parseFloat方法進行轉換 Strin…

用U盤作為啟動盤做系統步驟

步驟一&#xff1a;BIOS設置U盤啟動 制作好Win10 U盤系統安裝盤之后&#xff0c;我們需要在電腦的BIOS設置中把第一啟動設備設置為U盤&#xff0c;設置后就可以從我們制作的Win10 U盤系統安裝盤啟動&#xff0c;從而顯示系統安裝界面開始安裝系統。BIOS設置U盤啟動的方法如下&a…

使用tkinter模塊在Python中進行GUI編程

GUI (Graphical User Interface): GUI(圖形用戶界面)&#xff1a; GUI is a simple application which helps the user to interact with the computer or any other electronic device through a graphical icon. This used to perform different tasks on a desktop or lapt…