1. shell簡介
shell可直譯為“貝殼”,貝殼是動物作為外在保護的一種工具。 可以理解為:Linux中的 shell就是 Linux內核的一個外層保護工具,并負責完成用戶與內核之間的交互。
命令是用戶向系統(tǒng)內核發(fā)出控制請求,與交互的文本流。 而 shell是一個命令行解釋器,將用戶命令解析為操作系統(tǒng)所能理解的指令,實現用戶與操作系統(tǒng)的交互。 當需要重復執(zhí)行若干命令,可以將這些命令集合起來,加入一定的控制語句,編輯成為 shell腳本文件,交給 shell批量執(zhí)行。
最初的 UNIX shell經過多年的發(fā)展,由不同的機構、針對不同的目錄,開發(fā)出許多不同類型的 shell程序,目前流行的 shell主要有以下幾種:
- Bourne Shell(sh):由 AT&T的 Steve Bourne開發(fā),是第一個流行的 shell,是 UNIX上的標準 shell。 不過 sh的作業(yè)控制功能薄弱,且不支持別名與歷史記錄等功能
- C Shell(csh):sh之后另一個廣為流傳的 shell,由柏克萊大學的 Bill Joy設計,語法有點類似 C語言,其內部命令有52個,較為龐大。 但目前使用的不多
- Korn Shell(ksh):由AT&T 的David Korn開發(fā),語法與 sh相同,同時具備 csh的易用特點。 許多安裝腳本都使用 ksh,有42條內部命令,但與 bash 相比有一定的限制性
- Bourne Again Shell(bash):由 GNU組織開發(fā),保持了對 sh的兼容性,是各種Linux發(fā)行版默認配置的shell。 能夠提供環(huán)境變量以配置用戶 shell環(huán)境,支持歷史記錄,內置算數功能,支持通配符表達式,將常用命令內置簡化
2. shell命令格式
2.1 shell命令提示符
shell提示符標識了命令行的開始。 用戶在提示符后面輸入一條命令并按 Enter鍵,完成向系統(tǒng)提交命令。 通常 shell命令提示符采用以下格式:
username@hostname:direction$
用戶名 主機名 目錄名
- username:用戶名,顯示當前登錄用戶的賬戶名(執(zhí)行命令 whoami)
- hostname:主機名,顯示登錄的主機名(執(zhí)行命令 hostname)
- direction:目錄名,顯示當前所處的路徑,根目錄下顯示為“/”,主目錄下顯示為“~“(執(zhí)行命令 pwd)
2.2 shell命令格式
通常一條 shell命令包含三個要素:命令名稱、選項、參數。 命令名稱是必須的,選項和參數都可選項。 格式如下:
$ Command [-Options] Argument1 Argument2...
指令 選項 參數1 參數2 ...
- :shell提示符,若為超級用戶,提示符為“#”,其他用戶的提示符均為“”
- Command:命令名稱,shell命令或程序,嚴格區(qū)分大小寫
- Options:命令選項,用于改變命令執(zhí)行類型,由“-”引導,可同時帶多個選項
- Argument:命令參數,指出命令作用的對象或目標,允許帶多個參數
一條命令的三要數之間用空格隔開; 若將多個命令在一行書寫,用分號(;)將各命令隔開; 如果一條命令不能在一行寫完,在行尾使用反斜杠()表明該條命令未結束。
2.3 shell命令初體驗
使用shell命令,關閉或重啟系統(tǒng)
sudo shutdown -h now #系統(tǒng)立即關機
sudo shutdown -r now #系統(tǒng)立即重啟
sudo reboot now #系統(tǒng)立即重啟
sudo shutdown -h +45 "That is all!" #系統(tǒng)45分鐘后關機
sudo shutdown -r +60 #系統(tǒng)60分鐘后重啟
3. shell中的特殊字符
3.1 shell中的通配符
當需要用命令處理一組文件,例如 file.txt、file2.txt、file3.txt…,用戶不必一一輸入文件名,可使用 shell通配符。 shell命令的通配符含義如下表
3.2 shell中的管道
管道可以把一系列命令鏈接起來,意味著第一個命令的輸出將作為第二個命令的輸入,通過管道傳遞給第二個命令,第二個命令的輸出又將作為第三個命令的輸入,以此類推。 就像通過使用“|” 符連成一個管道。
ls /use/bin | wc -w
1249
以上操作中,借助管道“|”,將 ls的輸出直接作為 wc命令的輸入。 使用管道可以巧妙的將一些命令聯合使用,得到單個命令所無法實現的效果。 例如使用以上的命令組合,得到的是/usr/bin目錄下文件的個數。
3.3 輸入輸出重定向
輸入輸出重定向是改變 shell命令或程序默認的標準輸入輸出目標,重新定向到新的目標。 linux中默認的標準輸入定義為鍵盤,標準輸出定義為終端窗口。 用戶可以為當前操作改變輸入或輸出,迫使某個特定命令的輸入或輸出來源為外部文件
cat命令功能為在標準輸出上顯示文件。 下面通過一個實例,可以更好地理解重定向的功能:
an@ubuntu:~/di$ cat #使用標準輸入/出設備
hello world! #用戶使用標準輸入設備鍵盤,鍵入字符串,并按Enter鍵
hello world! #系統(tǒng)在標準輸出顯示器上,顯示用戶剛剛輸入的字符串
an@ubuntu:~/di$ cat > file1.txt #輸出重定向,將輸出定向到文件file1.txt
hello world! #用戶使用標準輸入設備鍵盤,鍵入字符串,并按Enter鍵
#用戶輸入的字符串被保存在file1.txt文件中
an@ubuntu:~/di$ cat < file1.txt #輸入重定向,將cat的輸入指定為file1.txt
hello world! #系統(tǒng)在標準輸出顯示器上,顯示cat命令從文件中讀出的字符串
3.4 命令置換
命令替換是將一個命令的輸出作為另一個命令的參數。 命令格式如下所示:
command1 `command2`
其中,命令 command2的輸出將作為命令 command1的參數。 需要注意,命令置換的單引號為ESC鍵下方的“`”鍵
linux@ubuntu:~$ ls `pwd`
Desktop Examples linux andyxi
pwd命令用于顯示當前目錄的絕對路徑。 在上面的命令行中,使用命令置換符,將 pwd的運行結果作為 ls命令的參數。 最終,命令執(zhí)行結果是顯示當前目錄的文件內容。
-
內核
+關注
關注
3文章
1372瀏覽量
40280 -
操作系統(tǒng)
+關注
關注
37文章
6801瀏覽量
123285 -
C語言
+關注
關注
180文章
7604瀏覽量
136694 -
命令
+關注
關注
5文章
683瀏覽量
22011 -
Shell
+關注
關注
1文章
365瀏覽量
23357
發(fā)布評論請先 登錄
相關推薦
評論