shell 基本學習

2022-05-02 12:00:11 字數 3671 閱讀 5987

1)檢視當前shell

echo $shell

2)檢視相容shell

more /etc/shells

3) 指令碼第一行

#!/bin/bash

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

first=isaac middle=bashevis last=singer   #單行可進行多次賦值

fullname="

isaac bashevis singer

"#值中包含空格時使用引號

oldname=$fullname #此處不需要引號

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

fullname="

$first $middle $last

" #這裡需要雙引號

5) 簡單的 echo 輸出

$ echo now is the time for

all good men

now

is the time for all good men

6) 華麗的 printf 輸出

printf "hello, world\n"

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

printf format-string [arguments ...]

$ printf "

the first program always prints '%s, %s!'\n

"hello world

the first program always prints

'hello world!

'

7) 基本的 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

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

9) 特殊檔案:/dev/null 與 /dev/tty

nix 系統提供了兩個對 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 用來恢復該功能。

shell學習1 基本的shell命令

基本指令碼 反引號 反引號裡面的內容是命令列,通過反引號使用者可以將shell命令的輸出賦給變數,比如 test date echo the time is test 重定向 輸出重定向 就是將shell命令的輸出結果傳送到乙個檔案裡面 格式 command file 如果目標檔案裡面已經有內容了,...

學習 shell 編寫基本指令碼

一般而言,shell 會通過 path 變數來查詢命令,如果要執行使用者編寫的指令碼 未新增進 path 路徑 還需兩步操作 使用read命令讀取來自鍵盤輸入的變數。該變數常用於 shell script 的編寫當中,用於和使用者互動。read pt variable p prompt 後面可以跟提...

linux學習 基本shell命令

shell命令 1,目錄資訊檢視命令 ls xx ls a 可以列出所有檔案,包括隱藏檔案,比如以.開頭的 ls l 列出檔案的詳細資訊 建立者,建立時間,檔案許可權等 ls t 將檔案按照建立時間列出 ls r 遞迴列出所有檔案包括子目錄的檔案 注 命令引數可以組合,如 ls al 2,目錄切換命...