Shell 指令碼學習 — 基本元素

來源:互聯網
上載者:User
文章目錄
  • 4.1 重新導向與管道
  • tr 命令詳解
  • 4.2  特殊檔案:/dev/null 與 /dev/tty
1 變數

Shell 變數名稱的開頭是一個字母或底線符號,後面可以接著任意長度的字母、數字或底線符號。

Shell 變數名稱的字元長度並無限制

Shell 變數可以用來儲存字串值,所能儲存的字元數同樣沒有限制。

變數的賦值方式為:先寫變數名稱,緊接著 = 字元,最後是新值,中間完全沒有任何空格。當你想取出 Shell 變數的值時,需於變數名稱前面加 $ 字元。當所賦予的值內含空格時,請加上引號:

first=isaac middle=bashevis last=singer   #單行可進行多次賦值fullname="isaac bashevis singer"          #值中包含空格時使用引號oldname=$fullname                         #此處不需要引號

不過,當你將幾個變數串連起來時,就需要使用引號了:

fullname="$first $middle $last"           #這裡需要雙引號
 2 簡單的 echo 輸出
$ echo Now is the time for all good menNow is the time for all good men
 3 華麗的 printf 輸出

printf 命令模仿 C 程式庫裡的 printf() 程式。它幾乎複製了該函數所有的功能,如果你曾使用C、C++、awk、Perl、Python 或 Tcl 寫過程式,對它的基本概念應該不陌生。當然,它在 Shell 層級的版本上,會有些差異。

如同 echo 命令, printf 命令可以輸出簡單的字串:

printf "hello, world\n"

printf 不像 echo 那樣會自動提供一個分行符號號。你必須顯示地將分行符號號指定成 \n 。printf 命令的完整文法分為兩部分:

printf format-string [arguments ...]

第一部分(format-string)是一個字串,用來描述輸出的相片順序,最好為此字串加上引號。此字串包含了按字面顯示的字元以及格式聲明,後者是特殊的預留位置,用來描述如何顯示相應的參數。格式聲明分成兩部分:百分比符號(%)和指示符。最常用的格式指示符有兩個,%s 用於字串,而 %d 用於十進位整數。

第二部分(arguments ...)是與格式聲明想對應的參數列表。

格式字串中,一般字元會按字面顯示,逸出序列則解釋後再輸出成相應的字元。格式什麼以 % 符號開頭,並以定義的字母集中的一個字元來結束,用來控制相應參數的輸出。例如,%s 使用者字串的輸出:

$ printf "The first program always prints '%s, %s!'\n" Hello worldThe first program always prints 'Hello world!'

 

4 基本的 I/O 重新導向4.1 重新導向與管道

Shell 提供了數種文法標記,可以用來改變預設 I/O 的來源端與目的端。

* 以 < 改變標準輸入

program < file 可將 program 的標準輸入修改為 file:

tr -d '\r' < dos-file.txt

 * 以 > 改變標準輸出

program > file  可將 program 的標準輸出修改為 file:

tr -d '\r' < dos-file.txt > UNIX-file.txt

 這條命令會先以 tr 將 dos-file.txt 裡的 ASCII 斷行符號刪除,再將轉換完成的資料輸出到 UNIX-file.txt。(dos-file.txt 裡的未經處理資料不會有變化)。

> 重新導向符在目的檔案不存在時,會建立一個。然而,如果目的檔案已存在,它就會被覆蓋掉;原本的資料都會丟失。

* 以 >> 附加到檔案

program >> file 可將 program 的標準輸出附加到 file 的結尾處。

如同 >,如果目的檔案不存在,>>重新導向符便會建立一個。然而,如果目的檔案存在,它不會直接覆蓋掉檔案,而是將程式所產生的資料附加到檔案結尾處:

for f in dos-file*.txtdo    tr -d '\r' < $f >> big-UNIX-file.txtdone

* 以 | 建立管道

 program1 | program2  可將 program1 的標準輸出修改為 program2 的標準輸入。

tr -d '\r' < dos-file.txt | sort > UNIX-file.txt

 

tr 命令詳解

文法

tr [ options ] source-char-list replace-char-list

用途

  轉換字元。例如,將大寫字元轉換成小寫。選項可讓你指定要刪除的字元,以及將一串重複出現的字元濃縮成一個。

常用選項

- c

  取 source-char-list 的反義。tr 要轉換的字元,變成未列在 source-char-list 中的字元。此選項通常與  -d 或 -s 配合使用。

- C

  與 -c 相似,但所處理的是字元(可能是包含多個位元組的寬字元),而非二進位的位元組值。

-d

  自標準輸入刪除 source-char-list 裡所列的字元,而不是轉換它們。

-s

  濃縮重複的字元。如果標準輸入中連續重複出現 source-char-list 裡的所列的字元,則將其濃縮成一個。

行為模式

  如同過濾器:自標準輸入讀取字元,再將結果寫到標準輸出。任何輸入字元只要出現在 source-char-list 中,就會置換成 replace-char-list 裡相應的字元。POSIX 風格的字元與等效的字元集也適用,而且 tr 還支援 replace-char-list 中重複字元的標記法。

警告

  根據 POSIX 標準的定義,-c 處理的是二進位位元組值,而 -C 處理的是現行 locale 所定義的字元。

4.2  特殊檔案:/dev/null 與 /dev/tty

UNIX 系統提供了兩個對 Shell 編程特別有用的特殊檔案。第一個檔案 /dev/null,就是大家所熟知的位桶(bit bucket)。傳說到此檔案的資料都會被系統丟掉。也就是說,當程式將資料寫到此檔案時,會認為它已經成功完成寫入資料的操作,但實際上什麼事都沒做。如果你需要的是命令的退出狀態,而非它的輸出,次功能會很有用。例如,測試一個檔案是否包含某個模式:

if grep patten myfile > /dev/nullthen    ...      #找到模式時else    ...      #找不到模式時fi

 相對地,讀取 /dev/null 則會立即返迴文件結束符號。讀取 /dev/null 的操作很少會出現在 Shell 程式裡,不過瞭解這個檔案的行為模式還是非常重要的。

 另一個特殊檔案為 /dev/tty 。當程式開啟此檔案時,UNIX 會自動將它重新導向到一個終端 [ 一個實體的控制台或序列埠,也可能是一個通過網路與視窗登入的偽終端 ] 再也程式結合。這在程式必須讀取人工輸入時(例如密碼)特別有用。此外,用它來產生錯誤資訊也很方便,只是比較少人這麼做:

printf "Enter new password: "   #提示輸入stty -echo                      #關閉自動列印輸入字元的功能read pass < /dev/tty            #讀取密碼printf "Enter again: "          #提示再輸入一次read pass2 < /dev/tty           #再讀取一次以確認stty echo                       #別忘了開啟自動列印輸入字元的功能#...

stty 命令用來控制終端的各種設定。 -echo 選項用來關閉自動列印每個輸入字元的功能;stty echo 用來恢複該功能。

 

參考:<<Shell 指令碼學習指南>>

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.