Shell 指令碼學習 基本元素

2022-01-23 02:08:21 字數 4218 閱讀 2930

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

shell 變數名稱的字元

長度並無限制

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

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

first=isaac middle=bashevis last=singer   #

單行可進行多次賦值

fullname="

isaac bashevis singer"#

值中包含空格時使用引號

oldname=$fullname

#此處不需要引號

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

fullname="

$first $middle $last"#

這裡需要雙引號

$ echonow is the time forall good mennow is the time 

for all good men

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 world

the first program always prints 'hello world!'

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*.txt

dotr -d '\r' < $f >> big-unix-file

.txt

done

*以 | 建立管道

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

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

語法

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 所定義的字元。

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

if grep patten myfile > /dev/null

then

...

#找到模式時

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 用來恢復該功能。

參考:<

HTML基本元素

段落文字格式化 鏈結影象 列表 區塊元素 span 表單form 框架注釋 水平線標籤定義了文件與外部資源之間的關係,通常用於鏈結到樣式表 為網頁定義描述內容 每30秒鐘重新整理當前頁面 這是乙個段落。這是另外乙個段落。這個段落 演示了分行的效果 插入單個折行 換行 標籤 描述定義粗體文字 定義著重...

HTML基本元素

1.使用宣告格式,否則會亂碼。此部分不區分大小寫,用來告知 web 瀏覽器頁面使用了哪種 html 版本。html5 不是基於 sgml,因此不要求引用 dtd。2.使用html 頁面的根元素,它包括兩個標籤 head和body 3.對於中文網頁需要在head中使用宣告編碼,否則會出現亂碼。有些瀏覽...

C 基本元素

注釋和空白編譯器不會編譯,自動忽略 而標記是可以通過編譯器編譯的。官方定義 關鍵字是類似識別符號的保留的字串行,不能用作識別符號 以 字元開頭時除外 通俗的說 關鍵字,是這門語言已經設計好的識別符號,所以不允許開發者自己定義和關鍵字相同的名字的識別符號。運算子是一種類成員,它定義了可應用於類例項的特...