一 、爲什麼要學習 shell
Shell 腳本語言是Linux/UNIX系統上一種重要的腳本語言,在Linux/UNIX領域應用極爲普遍,熟練掌握Shell腳本語言是一個優秀的Linux/UNIX開發者和系統管理員的必經之路。利用Shell 腳本語言能夠簡潔地實現複雜的操做,並且Shell 腳本程序每每能夠在不一樣版本的Linux/UNIX系統上通用。
腳本語言的靈活性是以執行效率爲代價的,腳本語言的執行效率一般不如編譯型語言。固然,腳本語言通常不適用於大型的項目、計算複雜的工程或有高級需求的應用軟件,它適用於系統管理、文本處理等方面完成特定功能的經常使用的小工具或小程序。
二 、什麼是shell
shell就是系統跟計算機硬件交互時使用的中間介質,它只是系統的一個工具。實際上,在shell和計算機硬件之間還有一層東西那就是系統內核了。打個比方,若是把計算機硬件比做一我的的軀體,而系統內核則是人的大腦,至於shell,把它比做人的五官彷佛更加貼切些。回到計算機上來,用戶直接面對的不是計算機硬件而是shell,用戶把指令告訴shell,而後shell再傳輸給系統內核,接着內核再去支配計算機硬件去執行各類操做。
在計算機科學中,Shell俗稱殼(用來區別於核),是指「提供使用者使用界面」的軟件(命令解析器)。它相似於DOS下的command和後來的cmd.exe。它接收用戶命令,而後調用相應的應用程序。同時它又是一種程序設計語言。做爲命令語言,它交互式解釋和執行用戶輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;做爲程序設計語言,它定義了各類變量和參數,並提供了許多在高級語言中才具備的控制結構,包括循環和分支。
三 、shell的分類
1 、圖形界面shell
應用最爲普遍的 Windows Explorer (微軟的windows系列製做系統),還有也包括廣爲人知的 Linux shell,其中linux shell 包括 X window manger (BlackBox和FluxBox),以及功能更強大的CDE、GNOME、KDE、 XFCE。
2 、命令行式shell
傳統意義上的shell指的是命令行式的shell,之後若是不特別註明,shell是指命令行式的shell。
文字操做系統與外部最主要的接口就叫作shell。shell是操做系統最外面的一層。shell管理你與操做系統之間的交互:等待你輸入,向操做系統解釋你的輸入,而且處理各類各樣的操做系統的輸出結果。shell提供了你與操做系統之間通信的方式。
3 、交互式shell和非交互式shell
交互式模式就是shell等待你的輸入,而且執行你提交的命令。這種模式被稱做交互式是由於shell與用戶進行交互。這種模式也是大多數用戶很是熟悉的:登陸、執行一些命令、簽退。當你簽退後,shell也終止了。
shell也能夠運行在另一種模式:非交互式模式。在這種模式下,shell不與你進行交互,而是讀取存放在文件中的命令,而且執行它們。當它讀到文件的結尾,shell也就終止了。
4 、shell的類型
Bourne shell (包括 sh,ksh,and bash)
Bourne shell ( sh) ,Korn shell ( ksh)
Bourne Again shell ( bash),POSIX shell ( sh)
C shell (包括 csh and tcsh),C shell ( csh)
TENEX/TOPS C shell ( tcsh)
以下咱們查看有哪些shell可用
四 、bash shell 的功能及特色
1 、命令記憶能力(history)
保存用戶曾經執行過的命令操做,linux系統中存放位置:~/.bash_history 文件
a 、查看歷史命令 history
b 、調用歷史命令
c 、!n:執行歷史記錄中的第n條命令
d 、!str:執行歷史記錄中以「str」開頭的命令
e 、設置記錄歷史命令的條數 /etc/profile
修改 HISTSIZE 參數(默認爲1000條)
f 、history -c 爲清空 ~/.bash_history中的記錄
2 、指令和文件名補全
按tab鍵,它能夠幫你補全一個指令,也能夠幫你補全一個路徑或者一個文件名。連續按兩次tab鍵,系統則會把全部的指令或者文件名都列出來。
3 、命令別名的設置
alias把一個經常使用的而且很長的指令別名一個簡潔易記的指令。若是不想用了,還能夠用unalias解除別名功能。直接敲alias會看到目前系統預設的alias ,alias 別名 =「正常命令」
4 、做業控制,前臺、後臺控制
當運行一個進程時,你可使它暫停(按Ctrl+z),而後使用fg命令恢復它,利用bg命令使他到後臺運行,你也可使它終止(按Ctrl+c)。
5 、通配符
*:任意長度的任意字符
?: 任意單個字符
[]:指定範圍內的任意字符;[a-z]
[0-9]:全部數字,[a-z]:全部小寫字母,[A-Z]:全部大寫字母
[a-zA-Z]全部字母
[^]:脫字符,取反,指定範圍外的任意單個字符,[^0-9]
[^0-9][^0-9]
6 、輸入輸出重定向
輸入重定向用於改變命令的輸入,輸出重定向用於改變命令的輸出。輸出重定向更爲經常使用,它常常用於將命令的結果輸入到文件中,而不是屏幕上。輸入重定向的命令是<,輸出重定向的命令是>,另外還有錯誤重定向2>,以及追加劇定向>>。
7 、管道符
管道符」|」,就是把前面的命令運行的結果丟給後面的命令
五 、bash 的變量
1 、bash變量類型;
本地變量:只對當前shell進程有效
局部變量:local VAR_NAME-Value
環境變量:export VAR_NAME=Value,對當前shell及其子shell有效
位置變量; $1,$2...
特殊變量; $$,$!,$#,$?
2 、變量的定義與顯示及其引用
定義變量:
[set] VAR_NAME=Value (set可省略)
變量顯示 :echo
引用變量 :
${VAR_NAME}
3 、變量的設置及其設置規則
變量與變量的內容以一個等號「=」來鏈接,等號兩邊不能直接使用空格符
變量內容如有空格符可使用雙引號「」或是單引號‘’將變量內容結合起來,可是雙引號內的特殊字符如$能夠保持本來的特性,單引號的特殊字符則僅爲通常字符(純文本)。
4 、取消變量的方法
爲使用「unset 變量名稱」例如取消「NAME」的設置
「unset NAME」
5 、變量的命名風格
a:只能包含字母、數字和下劃線
b:不能以數字開頭
c:嚴格區分大小寫
d:要作到見名知義
e:命名規範,風格統一
六 、系統環境變量與我的環境變量的配置文件
1 、bash的環境變量
使用env(environment)查看環境變量與常見環境變量的說明,固然使用export也會查看到一樣的內容。
2 、環境變量的功能
PATH 決定了shell將到哪些目錄中尋找命令或程序
HOME 當前用戶主目錄
HISTSIZE 歷史記錄數
LOGNAME 當前用戶的登陸名
HOSTNAME 指主機的名稱
SHELL 前用戶Shell類型
LANG 語言相關的環境變量,多語言能夠修改此環境變量
MAIL 當前用戶的郵件存放目錄
PWD 當前目錄
3 、bash的配置文件
(1) 、profile類:交互式登陸用戶
文件:/etc/profile:全局,對全部用戶有效
/etc/profile.d/*.sh:全局,對全部用戶有效
~/.bash_profile:僅對某用戶本身有效
功能:設定環境變量;運行命令或腳本
(2)、 bashrc類:非交互式登陸用戶
文件: /etc/bashrc:全局有效
~/.bashrc:僅對某用戶本身有效
功能: 設定環境變量; 定義命令別名;
4 、在配置文件更新後,新的定義不會當即生效,要想生效,
有兩種方式:
a,從新登陸;
b,source FILE
七、bash經常使用的基礎命令的應用
1 、數據流的重定向
將默認數據流改成其餘設備,就稱爲IO重定向
a 、輸出重定向:
>,覆蓋重定向;set -C關閉覆蓋,避免覆蓋
set +C 關閉上述功能,強制覆蓋:>|
>>,追加劇定向
/dev/null;數據黑洞,bit bucket
b 、錯誤輸出重定向:
2>;覆蓋重定向
2>>: 追加劇定向
c 、同時重定標準輸出和錯誤輸出
COMMAND >/path/to/stdout 2> /path/to/error
標準輸出和錯誤輸出定向至一個文件
&> ,&>>
COMMAND &> /path/to/somewhere
COMMAND > /path/to/somewhere 2>&1
d 、輸入重定向:
<:COMMAND < /from/somewhere
<<: Here Document ,此處建立文檔
2 、管道
管道: shell COMMAND1 |
程序:讀入數據,執行結果輸出
cat 重定向:輸入重定向,輸出重定向
stdin :Standard Input (標準輸入,默認輸出)
stdout; Standard output (標準輸出,默認輸出)
3 、選取命令 grep ,cut
對於grep上期《Linux grep命令的使用及正則表達式》中詳細介紹過, 咱們來看看cut命令的使用
語法:cut -d 「分隔字符」 [-cf] n 這裏的n是數字
-d :後面跟分隔字符,分隔字符要用雙引號括起來
-c :後面接的是第幾個字符
-f :後面接的是第幾個區塊
4 、sort:用作排序
語法:sort [-t 分隔符] [-kn1,n2] [-nru] 這裏的n1 < n2
-t 分隔符:做用跟cut的-d一個意思
-n :使用純數字排序
-r :反向排序
-u :去重複
5 、wc:統計文檔的行數、字符數、詞數,
經常使用的選項爲:
-l :統計行數
-m :統計字符數
-w :統計詞數
6 、uniq:去重複的行
-c :統計重複的行數,並把行數寫在前面
-d: 只顯示重複的行
-u:只顯示沒重複的行
7、tr:替換字符,經常使用來處理文檔中出現的特殊符號,經常使用的選項有兩個:
-d :刪除某個字符,-d 後面跟要刪除的字符
-s :把重複的字符去掉
最經常使用的就是把小寫變大寫:tr ‘[a-z]’ ‘[A-Z]’