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