第二章 bash shell 指令碼介紹

2022-05-06 16:51:15 字數 2989 閱讀 7857

學習linux/unix 程式設計 shell指令碼畢不少。 本文只有全面介紹,詳細介紹查閱相關資料。只讓讀者對指令碼有個簡單了解。現實中也不大可能把所有記住,只要有印象出來查閱資料就行。

(1)基本結構

2>  注釋     以#開始的行

3>  萬用字元   包括正規表示式 * ?    還有i/o重定向   管道 | 等,具體查閱相關知識

4> 顯示輸出  echo 命令

5> 區域性變數  eg:varname=value1  myname=「wxr」   itegernum=10  

6> 全域性變數  eg:  export varname=value1   declare -x varname=value1

7> 提取變數    eg:echo   $varname

8> 讀取使用者輸入 eg: read name

9> 命令列引數 $1 $2 $3 ...  位置引數  $* 或者$@ 所有位置引數 是個陣列 $# 引數個數

11> 命令替換   命令可以賦值給乙個變數 或者單引號來引用  eg: var = 'date' 或者$(date)   echo $var

12> 算數運算   eg:((n=5+5)) echo $n

13> 關係運算子與邏輯運算子  同c語言

14> 條件語句  if then  ....   fi 結構    case  結構

15> 迴圈結構 while untill for selcet

16> 函式  fuction fuctionname {}   或者 fuctionname() {}  

(2)  條件測試test

之所以單獨講這個命令 是因為在shell指令碼中經常要使用這個命令 命令test或[ 可以測試乙個條件是否成立,如果測試結果為真,則該命令的exit status 為0 如果測 試結果為假,則命令的exit status 為1 (注意與c 語言的邏輯表示正好相反)

test 有兩種格式 eg : test -d dir     [ -d dir ]

[ -d dir ]   如果dir 存在並且是乙個目錄則為真

[ -f file]   如果file存在且是乙個普通檔案則為真

[ -z string ] 如果string 的長度為零則為真

[ -n string ]  如果string 的長度非零則為真

[ string1= string2 ] 如果兩個字串相同則為真

[ string1!= string2 ] 如果字串不相同則為真

[ arg1 op arg2 ] arg1和arg2應該是整數或者取值為整數的變數,op是-eq (等於)-ne(不等於)-lt (小於)-le (小於等於)-gt (大於)-ge (大於等於)之中的乙個

[ ! expr ]  expr可以是上表中的任意一種測試條件,! 表示邏輯反

[ expr1 -a expr2] expr1和expr2可以是上表中的任意一種測試條件,-a表示邏輯與

[ expr1 -o expr2] expr1和expr2可以是上表中的任意一種測試條件,-o表示邏輯或

(3)  正規表示式

正規表示式就是字元 數量 位置的字元匹配。之所以在這裡講正規表示式 完全是因為它在shell 字串處理中常用  。

1>  字元類

.  匹配任意乙個字元         eg: abc.可以匹配abcd、abc9等

匹配括號中的任意乙個字元     eg:[abc]d  可以匹配ad、bd或cd

- 在括號內表示字元範圍      eg: [0-9a-fa-f] 可以匹配一位十六進製制數字

^位於括號內的開頭,匹配除括號中的字元之外的任意乙個字元 

2> 數量類

? 緊跟在它前面的單元應匹配零次或一次  eg:[0-9]?\.[0-9] 匹配0.0 、2.3 、.5等,由於. 在正規表示式中是乙個特殊字元,所以需要用\ 轉義一下

* 緊跟在它前面的單元應匹配零次或多次 eg:[0-9][0-9]* 匹配至少一位數字,等價於[0-9]+ ,[a-za-z_]+[a-za-z_0-9]*匹配c 語言的識別符號

緊跟在它前面的單元應精確匹配n 次 eg:[1-9][0-9] 匹配從100 到999 的整數

應匹配至少n 次[1-9][0-9]匹配三位以上(含三位)的整數

緊跟在它前面的單元 應匹配最多m 次 eg: [0-9]相當於[0-9]?

緊跟在它前面的單元應匹配至少n 次,最多m 次

3> 位置限定類 

^ 匹配行首的位置  

$ 匹配行末的位置     eg: ;$匹配位於一行結尾的;

\< 匹配單詞開頭的位置    eg: \\> 匹配單詞結尾的位置  

\b 匹配單詞開頭或結尾的位置

\b 匹配非單詞開頭和結尾的

(4) 範例

判斷輸入引數個數

#!/bin/sh

# remember - an easy command-line-based memory pad.

rememberfile="

$home/.remember

"if [ $# -eq 0 ] ; then

echo

"enter note, end with ^d:

"else

echo"$@

" >>$rememberfile

fi

(5) shell 指令碼除錯方法

-n   讀一遍指令碼 ,檢查語法錯誤    eg:sh -n  ./test.sh

-v  一邊執行指令碼 一邊將執行過的指令碼錯誤列印到標準錯誤流

-x  將每條執行的命令和結果列印出來

有三種方法

1>  命令列引數  eg:sh -n  ./test.sh

2>  指令碼開始行 !/bin/bash -x

3> 程式中使用set 開啟 關閉  set -x  set +x

MySQL第二章總結 Mysql第二章 儲存引擎

1 本章目標 儲存引擎 資料型別 重點 2 儲存引擎 在關係型資料庫中,資料儲存在表中,表由行和列組成。開發中,可能需要各種不同的表,有的表簡單,有的表複雜,有的表讀取快,有的讀取資料慢,有的表更新快等。根據對資料的不同的處理需求,使用不同的儲存引擎,可以將mysql資料庫的效能發揮到最大。查詢my...

領悟(第二章)

當火車緩緩駛進車站的時候,夜幕已經降臨了。終於到了!望著窗外鐵道兩旁的燈火,我的內心不禁再一次的激動起來,一路上對今後在這個大都市的未來生活的想象已經讓我從昨天晚上上車一直興奮到現在了!平常這個時候應該正和朋友們一起在酒吧聊天吧,朋友們,你們現在還在談論我來這裡的目的麼?說實話,這個問題連我自己都說...

第二章 入門

第二章 入門 1 django 安裝 使用 django 的唯一先決條件是安裝 python 在 linux 平台可能包括如下步驟 2 tar xzvf django tar.gz。3 cd django 4 sudo python setup.py install。2 匯入 django模組 im...