標籤:
0.shell的變數同環境變數不同,存在使用者環境區。變數賦值的方式是:variable_name = variable_valuea= "hello"$a對a進行取值關於變數,還需要知道幾個與其相關的Linux命令。首個字元必須為字母(a-z,A-Z)。中間不能有空格,可以使用底線(_)。不能使用標點符號。env用於顯示使用者環境區中的變數及其取值;set用於顯示本機資料區和使用者環境區中的變數及其取值;unset用於刪除指定變數當前的取值,該值將被指定為NULL;export命令用於將本機資料區中的變數轉移到使用者環境區。1.if 的使用if …; then…elif …; then…else…fi2.迴圈語句Shell Script中的迴圈有下面幾種格式:while [ cond1 ] && { || } [ cond2 ] …; do…donefor var in …; do…donefor (( cond1; cond2; cond3 )) do…doneuntil [ cond1 ] && { || } [ cond2 ] …; do…doneexample:for s in 1 2 3 4doecho $sdonefor s in ‘this is a test!‘do echo $sdone3.case case var inpattern 1 )… ;;pattern 2 )… ;;*)… ;;esac4.使用說明$#表示包括$0在內的命令列參數的個數,$*表示整個參數列表,不包括$0,也就是說不包括檔案名稱的參數列表。$$ 表示當前Shell進程的ID,即pid,看下面的代碼:$echo $$變數含義$0當前指令碼的檔案名稱$n傳遞給指令碼或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。$#傳遞給指令碼或函數的參數個數。$*傳遞給指令碼或函數的所有參數。[email protected]傳遞給指令碼或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。$?上個命令的退出狀態,或函數的傳回值。$$當前Shell進程ID。對於 Shell 指令碼,就是這些指令碼所在的進程ID。$* 和 [email protected] 的區別$* 和 [email protected] 都表示傳遞給函數或指令碼的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"[email protected]" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。-lt 小於 -gt 大於 -le等於 例子:if [ $# -lt 3 ]; then...[]表示條件測試,常用的條件測試有:[ -f "$file" ] 判斷$file是否是一個檔案[ $a -lt 3 ] 判斷$a的值是否小於3,同樣-gt和-le分別表示大於或小於等於[ -x "$file" ] 判斷$file是否存在且有可執行許可權,同樣-r測試檔案可讀性[ -n "$a" ] 判斷變數$a是否有值,測試空串用-z[ "$a" = "$b" ] 判斷$a和$b的取值是否相等[ cond1 -a cond2 ] 判斷cond1和cond2是否同時成立,-o表示cond1和cond2有一成立shift 將參數列表中的第一個,後面的參數依次變為新的第一,注意參數列表原本也不包括$0。5.唯讀變數 readonly var 刪除變數 unset var 變數被刪除後不能再次使用;unset 命令不能刪除唯讀變數。6.Shell變數替換,命令替換,逸出字元a = 10echo -e "$a \n" -e 表示對逸出字元進行替換。輸出10 不加-e輸出10 \n逸出字元含義\\反斜線\a警報,響鈴\b退格(刪除鍵)\f換頁(FF),將當前位置移到下頁開頭\n換行\r斷行符號\t水平定位字元(tab鍵) \v垂直定位字元命令替換命令替換的文法`command`例:DATE=`date`echo "Date is $DATE"變數替換形式說明${var}變數本來的值${var:-word}如果變數 var 為空白或已被刪除(unset),那麼返回 word,但不改變 var 的值。${var:=word}如果變數 var 為空白或已被刪除(unset),那麼返回 word,並將 var 的值設定為 word。${var:?message}如果變數 var 為空白或已被刪除(unset),那麼將訊息 message 送到標準錯誤輸出,可以用來檢測變數 var 是否可以被正常賦值。若此替換出現在Shell指令碼中,那麼指令碼將停止運行。${var:+word}如果變數 var 被定義,那麼返回 word,但不改變 var 的值。7.shell的運算子使用expr,它是一款運算式計算工具。例:val=`expr 2 + 2`echo "Total value : $val算術運算子列表運算子說明舉例+加法-減法\*乘法/除法%取餘=賦值==相等。用於比較兩個數字,相同則返回 true。!=不相等。用於比較兩個數字,不相同則返回 true。關係運算子-le檢測左邊的數是否小於等於右邊的,如果是,則返回 true。-ge檢測左邊的數是否大等於右邊的,如果是,則返回 true。-lt檢測左邊的數是否小於右邊的,如果是,則返回 true。-gt檢測左邊的數是否大於右邊的,如果是,則返回 true。-ne檢測兩個數是否相等,不相等返回 true。-eq檢測兩個數是否相等,相等返回 true。布林運算子!非運算,運算式為 true 則返回 false,否則返回 true。-o或運算,有一個運算式為 true 則返回 true。、-a與運算,兩個運算式都為 true 才返回 true。字串運算子列表運算子說明舉例=檢測兩個字串是否相等,相等返回 true。[ $a = $b ] 返回 false。!=檢測兩個字串是否相等,不相等返回 true。[ $a != $b ] 返回 true。-z檢測字串長度是否為0,為0返回 true。[ -z $a ] 返回 false。-n檢測字串長度是否為0,不為0返回 true。[ -z $a ] 返回 true。str檢測字串是否為空白,不為空白返回 true。[ $a ] 返回 true。檔案測試運算子列表操作符說明舉例-b file檢測檔案是否是塊裝置檔案,如果是,則返回 true。[ -b $file ] 返回 false。-c file檢測檔案是否是字元裝置檔案,如果是,則返回 true。[ -b $file ] 返回 false。-d file檢測檔案是否是目錄,如果是,則返回 true。[ -d $file ] 返回 false。-f file檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true。[ -f $file ] 返回 true。-g file檢測檔案是否設定了 SGID 位,如果是,則返回 true。[ -g $file ] 返回 false。-k file檢測檔案是否設定了粘著位(Sticky Bit),如果是,則返回 true。[ -k $file ] 返回 false。-p file檢測檔案是否是具名管道,如果是,則返回 true。[ -p $file ] 返回 false。-u file檢測檔案是否設定了 SUID 位,如果是,則返回 true。[ -u $file ] 返回 false。-r file檢測檔案是否可讀,如果是,則返回 true。[ -r $file ] 返回 true。-w file檢測檔案是否可寫,如果是,則返回 true。[ -w $file ] 返回 true。-x file檢測檔案是否可執行,如果是,則返回 true。[ -x $file ] 返回 true。-s file檢測檔案是否為空白(檔案大小是否大於0),不為空白返回 true。[ -s $file ] 返回 true。-e file檢測檔案(包括目錄)是否存在,如果是,則返回 true。[ -e $file ] 返回 true。8.shell字串單引號字串的限制:單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;單引號字串中不能出現單引號(對單引號使用轉義符後也不行)。雙引號的優點:雙引號裡可以有變數雙引號裡可以出現逸出字元拼接字串用雙引號取字串長度:string="abcd" echo ${#string} #輸出 4提取子字串:string="alibaba is a great company" echo ${string:1:4} #輸出liba尋找子字元: string="alibaba is a great company" echo `expr index "$string" is`從位置處抓取字串 expr substr "this is a test" 3 5 is is 9.shell 中數組在Shell中,用括弧來表示數組,數組元素用“空格”符號分割開。定義數組的一般形式為: array_name=(value1 ... valuen)擷取數組的長度# 取得數組元素的個數length=${#array_name[@]}# 或者length=${#array_name[*]}# 取得數組單個元素的長度lengthn=${#array_name[n]}10.重新導向到檔案echo "abc">a.txtprintf也可以輸出test 命令用於檢查某個條件是否成立,與方括弧([ ])類似。11.case語句echo "input a:"read acase $a in#1) echo "1");;1) echo ‘You select 1‘;;2) echo ‘2‘;;*) echo "oth";;esac12.重新導向命令說明command > file將輸出重新導向到 file。command < file將輸入重新導向到 file。command >> file將輸出以追加的方式重新導向到 file。n > file將檔案描述符為 n 的檔案重新導向到 file。n >> file將檔案描述符為 n 的檔案以追加的方式重新導向到 file。n >& m將輸出檔案 m 和 n 合并。n <& m將輸入檔案 m 和 n 合并。<< tag將開始標記 tag 和結束標記 tag 之間的內容作為輸入。13.檔案包含像其他語言一樣,Shell 也可以包含外部指令碼,將外部指令碼的內容合并到當前指令碼。Shell 中包含指令碼可以使用:. filename或複製純文字新視窗source filename
shell學習日誌