Shell編寫指令碼的筆記

2021-06-23 02:28:45 字數 3548 閱讀 2593

1.記錄命令歷史:

預設為記錄1000條歷史命名;這些命令儲存在使用者的根目錄中的.bash_history檔案中;正常退出才會儲存執行的命令到.bash_history中;

2.別名:

alias [命名別名]=['具體的命令']

3.萬用字元

用*來匹配零個或多個字元  例如:ls -d test*

用?來匹配乙個字元    例如:ls -d test?

4.管道符

| 是報前面的命令執行的結果對給後面的命令;

| :管道符,前面多次說過,它的作用在於將符號前面命令的結果丟給符號後面的命令。這裡提到的後面的命令,並不是所有的命令都可以的,一般針對文件操作的命令比較常用,例如cat, 

less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk等等,其中grep, sed, awk為正規表示式必須掌握的工具;

5.作業控制

當執行乙個程序時候,用ctrl+z暫停,用fg恢復,用bg使它在後台執行,用ctrl+c 終止

6. # :這個符號在linux中表示注釋說明的意思,即」#」後面的內容linux忽略掉。

在命令的開頭或者中間插入」#」 ,linux都會忽略掉的;

7.\ :脫意字元,將後面的特殊符號(例如」*」 )還原為普通字元;

8.$ :除了用於變數前面的識別符號外,還有乙個妙用,就是和』!』結合起來使用

『!$』表示上條命中中最後乙個變數(也許稱為變數不合適,總之就是上條命令中最後出現的那個東西)例如上邊命令最後是test.txt那麼在當前命令下輸入!$則代表test.txt

9.grep :過濾乙個或多個字元

例如:cat /etc/passwd |grep root

10.cut :擷取某乙個字段

語法:cut -d 「分隔字元」 [-cf] n 這裡的n是數字

-d :後面跟分隔字元,分隔字元要用雙引號括起來

-c :後面接的是第幾個字元

-f :後面接的是第幾個區塊

例如:cat /etc/passwd |cut -d ":" -f 1 

或者 cat /etc/passwd |cut -d ":" -f1 

-d 後面跟分隔字元,這裡使用冒號作為分割字元,-f 1 就是擷取第一段,-f和1之間的空格可有可無。

11.sort :用做排序

語法:sort [-t 分隔符] [-kn1,n2] [-nru] 這裡的n1 < n2

-t 分隔符 :作用跟cut的-d乙個意思

-n :使用純數字排序

-r :反向排序

-u :去重複

-kn1,n2 :由n1區間排序到n2區間,可以只寫-kn1,即對n1欄位排序

12.wc :統計文件的行數、字元數、詞數,常用的選項為:

-l :統計行數

-m :統計字元數

-w :統計詞數

例如:cat test.txt |wc -l

13.uniq :去重複的行,筆者常用的選項只有乙個:

-c :統計重複的行數,並把行數寫在前面

例如:cat test.txt |uniq

14.tee :後跟檔名,類似與重定向」>」,但是比重定向多了乙個功能,在把檔案寫入後面所跟的檔案中的同時,還顯示在螢幕上

16.tr :替換字元,常用來處理文件中出現的特殊符號,如dos文件中出現的^m符號。常用的選項有兩個:

-d :刪除某個字元,-d 後面跟要刪除的字元

-s :把重複的字元去掉

最常用的就是把小寫變大寫: tr 『[a-z]』 『[a-z]』

例如:head -n1 /etc/passwd |tr '[a-z]' '[a-z]'

17.split :切割文件,常用選項:

-b :依據大小來分割文件,單位為byte

例如:split -b 500 /etc/passwd passwd

格式如上例,後面的passwd為分割後檔名的字首,分割後的檔名為passwdaa, passwdab, passwdac … 

-l :依據行數來分割文件 

例如:split -l 10 /etc/passwd passwd

18.; :分號。平時我們都是在一行中敲乙個命令,然後回車就執行了,那麼想在一行中執行兩個或兩個以上的命令如何呢?則需要在命令之間加乙個」;」了;

19.~ :使用者的根目錄,如果是root則是 /root ,普通使用者則是 /home/username

20. & :如果想把一條命令放到後台執行的話,則需要加上這個符號。通常用於命令執行時間非常長的情況;

21.jobs 檢視當前shell中後台執行的任務

22.[ ] :中括號,中間為字元組合,代表中間字元中的任意乙個

例如;ls -d test[a-c]

23. && 與 ||  用於多條命令間的分隔符。另外還有兩個可以用於多條命令中間的特殊符號,那就是 「&&」和」||」。下面筆者把這幾種情況全列出:

1) command1 ; command2

2) command1 && command2

3) command1 || command2

使用」;」時,不管command1是否執行成功都會執行command2; 使用」&&」時,只有command1執行成功後,command2才會執行,否則command2不執行;使用」||」時,command1執行成功後

command2 不執行,否則去執行command2,總之command1和command2總有一條命令會執行。

【變數】

1.用echo命令顯示變數的值 

例如: echo $path

2.用env 顯示環境變數 例如:env

3.用set 把系統預設定的全部變數顯示出來 例如:set

【系統環境變數與個人環境變數的配置檔案】

上面講了很多系統的變數,那麼在linux系統中,這些變數被存到了**呢,為什麼使用者一登陸shell就自動有了這些變數呢?

/etc/profile :這個檔案預設了幾個重要的變數,例如path, user, logname, mail, inputrc, hostname, histsize, umas等等。

/etc/bashrc :這個檔案主要預設umask以及ps1。這個ps1就是我們在敲命令時,前面那串字元了,例如筆者的linux系統ps1就是 [root@localhost ~]# ,你不妨看一下ps1的值。

\u就是使用者,\h 主機名, \w 則是當前目錄,\$就是那個』#』了,如果是普通使用者則顯示為』$』

除了兩個系統級別的配置檔案外,每個使用者的主目錄下還有幾個這樣的隱藏檔案:

.bash_profile :定義了使用者的個人化路徑與環境變數的檔名稱。每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅僅執行一次。

.bashrc :該檔案包含專用於你的shell的bash資訊,當登入時以及每次開啟新的shell時,該該檔案被讀取。例如你可以將使用者自定義的alias或者自定義變數寫到這個檔案中。

.bash_history :記錄命令歷史用的。

.bash_logout :當退出shell時,會執行該檔案。可以把一些清理的工作放到這個檔案中。

編寫Shell指令碼

獲取變數的方式 1 echo path 2 echo 3 echo path 引數的提取 引數的個數 n 第n個引數 0 當前指令碼名稱 取出所有引數 shift 引數左移 執行過程 2 編寫指令碼內容 單獨講解 3 新增執行許可權 chmod a x abc.sh 4 當前目錄執行 abc.sh ...

Shell 指令碼編寫

shell 指令碼與 windows dos 下的批處理相似,也就是用各類命令預先放入到乙個檔案中,方便一次性執行的乙個程式檔案,主要是方便管理員進行設定或者管理用的。但是它比 windows 下的批處理更強大,比用其他程式設計程式編輯的程式效率更高,它使用了 linux unix 下的命令。方法一...

shell指令碼編寫

echo echo n不換行輸出,echo e會處理特殊字元,比如有 n則會換行 printf 不自動換行輸出 print 自動換行輸出 傳遞到指令碼的引數個數 以乙個單字串顯示所有向指令碼傳遞的引數。指令碼執行的當前程序id號 後台執行的最後乙個程序的id號 與 相同,但是使用時加引號,並在引號中...