Shell腳本語言
bash:是Linux標準默認的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的縮寫,內部命令一共有40個。
sh: 由Steve Bourne開發,是Bourne Shell的縮寫,sh 是Unix 標準默認的shell。
另外還有:ash、 csh、 ksh等。
常見的編程語言分為兩類:一個是編譯型語言,如:c/c++/java等,它們遠行前全部一起要經過編譯器的編譯。另一個解釋型語言,執行時,需要使用解釋器一行一行地轉換為代碼,如:awk, perl, python與shell等。
Shell 經過了POSIX的標準化,所以它是可以在不同的linux系統上進行移植。
關於註釋的問題: 在shell中使用#進行註釋,註意,sh裏面沒有多行註釋,只能每一行加一個#號;
第一個shell腳本程序:
#!/bin/bash
上面中的 #! 是一種約定標記, 它可以告訴系統這個腳本需要什麽樣的解釋器來執行;
echo "Hello, world!"
變量:
定義變量:
country="China"
Number=100
註意: 1,變量名和等號之間不能有空格;
2,首個字符必須為字母(a-z,A-Z)。
3, 中間不能有空格,可以使用下劃線(_)。
4, 不能使用標點符號。
5, 不能使用bash裏的關鍵字(可用help命令查看保留關鍵字)。
使用變量:
只需要在一個定義過的變量前面加上美元符號 $ 就可以了, 另外,對於變量的{} 是可以選擇的, 它的目的為幫助解釋器識別變量的邊界.
復制代碼
country="China"
echo $country
echo ${country}
echo "I love my ${country}abcd!"
#這個需要有{}的;
復制代碼
重定義變量: 直接把變量重新像開始定義的那樣子賦值就可以了:
country="China"
country="ribenguizi"
readonly country="China"
#或
country="China"
readonly country
刪除變量: 使用unset命令可以刪除變量,但是不能刪除只讀的變量。用法:
unset variable_name
變量類型
運行shell時,會同時存在三種變量:
1) 局部變量
局部變量在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程序不能訪問局部變量。
2) 環境變量
所有的程序,包括shell啟動的程序,都能訪問環境變量,有些程序需要環境變量來保證其正常運行。必要的時候shell腳本也可以定義環境變量。
3) shell變量
shell變量是由shell程序設置的特殊變量。shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了shell的正常運行
特殊變量:
image
$ 和 $@ 的區別為: $ 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。
$? 可以獲取上一個命令的退出狀態。所謂退出狀態,就是上一個命令執行後的返回結果。退出狀態是一個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1。
Shell中的替換
轉義符:
在echo中可以用於的轉義符有:
image
使用 echo 命令的 –E 選項禁止轉義,默認也是不轉義的; 使用 –n 選項可以禁止插入換行符;
使用 echo 命令的 –e 選項可以對轉義字符進行替換。
另外,註意,經過我的實驗,得到:
echo "\" #得到 \
echo -e "\" #得到 \
echo "\\" #得到 \
echo -e "\" #得到 \
命令替換:
它的意思就是說我們把一個命令的輸出賦值給一個變量,方法為把命令用反引號(在Esc下方)引起來. 比如:
directory=pwd
echo $directory
Shell腳本語言