Shell入門筆記

Shell腳本:Linux Shell腳本學(xué)習(xí)指南
菜鳥教程 - Shell教程
Linux入門 - Shell腳本是什么
Linux chmod命令

github同步 - Shell入門

一、Shell是什么

Shell 是一個應(yīng)用程序翻斟,它連接了用戶和 Linux 內(nèi)核茫蛹,讓用戶能夠更加高效、安全扯罐、低成本地使用 Linux 內(nèi)核橄登,這就是 Shell 的本質(zhì)轧膘。

?
? shell其實是一個命令解釋器,由于安全舟山、復(fù)雜救崔、繁瑣等原因,用戶不能直接接觸內(nèi)核(也沒有必要)捏顺,需要另外再開發(fā)一個程序六孵,讓用戶直接使用這個程序;該程序的作用就是接收用戶的操作(點擊圖標(biāo)幅骄、輸入命令)劫窒,并進(jìn)行簡單的處理,然后再傳遞給內(nèi)核拆座,這樣用戶就能間接地使用操作系統(tǒng)內(nèi)核了主巍。你看,在用戶和內(nèi)核之間增加一層“代理”挪凑,既能簡化用戶的操作孕索,又能保障內(nèi)核的安全,何樂不為呢躏碳?在Linux下搞旭,這個命令行程序叫做 Shell

? Shell 本身并不是內(nèi)核的一部分菇绵,它只是站在內(nèi)核的基礎(chǔ)上編寫的一個應(yīng)用程序肄渗,它和 QQ、迅雷咬最、Firefox 等其它軟件沒有什么區(qū)別翎嫡。然而 Shell 也有著它的特殊性,就是開機(jī)立馬啟動永乌,并呈現(xiàn)在用戶面前惑申;用戶通過 Shell 來使用 Linux具伍,不啟動 Shell 的話,用戶就沒辦法使用 Linux圈驼。

  • 交互的方式:從鍵盤輸入命令人芽,通過/bin/bash的解析,可以立即得到Shell的回應(yīng)
[root@clsn ~]# ls            
anaconda-ks.cfg  
  • 非交互的方式:如果我們的命令或者應(yīng)用程序不在命令行直接執(zhí)行碗脊,而是通過一個程序文件來執(zhí)行時啼肩,這個程序就被稱之為shell腳本橄妆,通過文件執(zhí)行腳本的方式稱之為非交互方式
[root@clsn ~]# ./firstShell.sh

拓展:命令行提示符

[mozhiyan@localhost ~]$

- []是提示符的分隔符號衙伶,沒有特殊含義。
- mozhiyan表示當(dāng)前登錄的用戶害碾,我現(xiàn)在使用的是 mozhiyan 用戶登錄矢劲。
- @是分隔符號,沒有特殊含義慌随。
- localhost表示當(dāng)前系統(tǒng)的簡寫主機(jī)名(完整主機(jī)名是 localhost.localdomain)芬沉。
- ~代表用戶當(dāng)前所在的目錄為主目錄(home 目錄)。如果用戶當(dāng)前位于主目錄下的 bin 目錄中阁猜,那么這里顯示的就是- bin丸逸。
- $是命令提示符。Linux 用這個符號標(biāo)識登錄的用戶權(quán)限等級:如果是超級用戶(root 用戶)剃袍,提示符就是#黄刚;如果是普通用戶,提示符就是$民效。

二憔维、Shell 是一種腳本語言

任何代碼最終都要被“翻譯”成二進(jìn)制的形式才能在計算機(jī)中執(zhí)行。

有的編程語言畏邢,如 C/C++业扒、Pascal、Go語言舒萎、匯編等程储,必須在程序運(yùn)行之前將所有代碼都翻譯成二進(jìn)制形式,也就是生成可執(zhí)行文件臂寝,用戶拿到的是最終生成的可執(zhí)行文件虱肄,看不到源碼。

這個過程叫做<u>編譯(Compile)</u>交煞,這樣的編程語言叫做<u>編譯型語言</u>咏窿,完成編譯過程的軟件叫做<u>編譯器(Compiler)</u>。

而有的編程語言素征,如 Shell集嵌、JavaScript萝挤、Python、PHP等根欧,需要一邊執(zhí)行一邊翻譯怜珍,不會生成任何可執(zhí)行文件,用戶必須拿到源碼才能運(yùn)行程序凤粗。程序運(yùn)行后會即時翻譯酥泛,翻譯完一部分執(zhí)行一部分,不用等到所有代碼都翻譯完嫌拣。

這個過程叫做<u>解釋</u>柔袁,這樣的編程語言叫做<u>解釋型語言或者腳本語言(Script)</u>,完成解釋過程的軟件叫做<u>解釋器</u>异逐。

編譯型語言的優(yōu)點是執(zhí)行速度快捶索、對硬件要求低、保密性好灰瞻,適合開發(fā)操作系統(tǒng)腥例、大型應(yīng)用程序、數(shù)據(jù)庫等酝润。

腳本語言的優(yōu)點是使用靈活燎竖、部署容易没讲、跨平臺性好猾漫,非常適合 Web 開發(fā)以及小工具的制作揩瞪。

Shell 就是一種腳本語言睹欲,我們編寫完源碼后不用編譯蠢护,直接運(yùn)行源碼即可鱼蝉。

三淑廊、Shell的分類

Shell腳本是什么 - Shell的分類

Shell種類全稱 縮寫 概要
Bourne Shell sh sh 是 UNIX 上的標(biāo)準(zhǔn) shell鸽捻,很多 UNIX 版本都配有 sh凳鬓。sh 是第一個流行的 Shell茁肠。由 AT&T 公司的 Steve Bourne開發(fā),為了紀(jì)念他缩举,就用他的名字命名了垦梆。
Boume Again Bash Bash 由 GNU 組織開發(fā),保持了對 sh shell 的兼容性仅孩,是各種 Linux 發(fā)行版 默認(rèn)配置的 shell托猩。
C Shell csh C Shell 是廣為流行的 Shell 變種。C Shell 主要在 BSD 版的 UNIX 系統(tǒng)中使用辽慕,發(fā)明者是柏克萊大學(xué)的 Bill Joy京腥。C Shell 因為其語法和 C 語言類似而得名,這也使得 UNIX 的系統(tǒng)工程師在學(xué)習(xí) C Shell 時感到相當(dāng)方便溅蛉。
TC Shell tcsh tcsh 是 csh 的增強(qiáng)版公浪,加入了命令補(bǔ)全功能他宛,提供了更加強(qiáng)大的語法支持。
Z Shell zsh Zsh屬于Shell中的一種欠气,但比Bash好用厅各,而且完全兼容Bash,擁有及其豐富的插件预柒。
?  ~ bash -version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

四队塘、查看系統(tǒng)中的shell

4.1、查看系統(tǒng)中的shell

?  ~ cat /etc/shells 
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

4.2宜鸯、查看默認(rèn)shell

?  ~ echo $SHELL
/bin/zsh

4.3憔古、修改系統(tǒng)默認(rèn)shell

當(dāng)前默認(rèn)為zsh,改為bash

?  ~ chsh -s /bin/bash
Changing shell for qiyeyun.
Password for qiyeyun: 

輸入密碼顾翼,重啟Terminal投放,完成奈泪。

4.4适贸、切換shell

// 默認(rèn)shell
?  ~ echo $SHELL
/bin/zsh

// 切換bash
?  ~ bash
bash-3.2$ 

// 返回默認(rèn)shell
?  ~ bash
bash-3.2$ exit
exit
?  ~ 

4.5、查看zsh/bash版本

?  ~ zsh --version
zsh 5.3 (x86_64-apple-darwin18.0)
?  ~ bash -version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

五涝桅、Hello World

5.1拜姿、編寫hello world腳本

?  ~ vim helloworld.sh

// 在文本寫入
#!/bin/bash
echo "Hello World!!!"

// :wq 保存

5.2、執(zhí)行報錯冯遂,添加權(quán)限

1.執(zhí)行報錯

?  ~ ./helloworld.sh
permission denied: ./helloworld.sh         // 錯誤提示蕊肥,沒有權(quán)限執(zhí)行

2.添加權(quán)限 - Linux chmod命令

?  ~ chmod abc file

其中a,b,c各為一個數(shù)字,分別表示<u>User蛤肌、Group壁却、及Other</u>的權(quán)限。

r=4裸准,w=2展东,x=1

  • 若要rwx屬性則4+2+1=7;
  • 若要rw-屬性則4+2=6炒俱;
  • 若要r-x屬性則4+1=5盐肃。

3.再次執(zhí)行腳本

?  ~ chmod 777 helloworld.sh 
?  ~ ./helloworld.sh 
Hello World!!!

5.3、執(zhí)行腳本的幾種方式

1. 直接使用 Bash 去解釋腳本中的內(nèi)容

?  ~ bash helloworld.sh 
Hello World!!!

2. 絕對路徑/相對路徑執(zhí)行

?  ~ /Users/github/Shell學(xué)習(xí)/helloworld.sh 
Hello World!!!
?  ~ ./helloworld.sh 
Hello World!!!

3. source命令 等同于 .

?  ~ source helloworld.sh 
Hello World!!!
?  ~ . helloworld.sh 
Hello World!!!

4. 將腳本加入系統(tǒng)命令

macOS/Linux 環(huán)境變量設(shè)置

Shell 腳本是否可以像 Linux 系統(tǒng)命令一樣权悟,不用指定路徑砸王,直接運(yùn)行呢?當(dāng)然是可以的峦阁,不過需要進(jìn)行環(huán)境變量的配置谦铃。

====== 測試在bash環(huán)境下,而不是zsh下 ======
1榔昔、打開環(huán)境變量文件
$ open ./.bash_profile

2驹闰、在.bash_profile文件中加入shell腳本的路徑凿跳, 注意:是目錄,不需要文件
# add by linxiang 2019.08.07 for shell script
export PATH=/Users/qiyeyun/Downloads:$PATH

3疮方、執(zhí)行命令立即加載生效
$ source ./.bash_profile

4控嗜、查看PATH
$ echo $PATH
/Users/qiyeyun/Downloads:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOS:/Users/qiyeyun/.rvm/bin

5、腳本能在任意目錄下用啦
$ helloworld.sh 
Hello World!!!

5. 拓展:(source與.命令)

source命令(從 C Shell 而來)是bash shell的內(nèi)置命令骡显。

. 命令 就是個點符號(從Bourne Shell而來)是source的另一名稱疆栏。

六、執(zhí)行方式 bash惫谤、 "." 壁顶、"./" 、source比較

新建一個 test.sh

#!/bin/bash

# PPID父進(jìn)程 溜歪,當(dāng)前進(jìn)程為$$
echo PID is $$
echo Parent PID is $PPID

開啟全部權(quán)限

$ chmod 777 test.sh

6.1若专、是否創(chuàng)建子shell

分別用不同方式執(zhí)行

$ echo $$
2163
$ bash test.sh 
PID is 2253
Parent PID is 2163
$ ./test.sh 
PID is 2254
Parent PID is 2163
$ /Users/qiyeyun/github/iOS-/Shell學(xué)習(xí)/test.sh
PID is 2258
Parent PID is 2163
$ source test.sh 
PID is 2163
Parent PID is 2162
$ . test.sh 
PID is 2163
Parent PID is 2162

結(jié)論:

  1. bash和"./"命令都是打開一個子shell來讀取并執(zhí)行FileName中命令;
  2. source是與"."類似,是在當(dāng)前工作環(huán)境中執(zhí)行蝴猪,配置文件就是影響當(dāng)前的工作環(huán)境调衰,這種情況下用source;

6.2自阱、關(guān)閉執(zhí)行權(quán)限

將執(zhí)行權(quán)限全部關(guān)閉

$ chmod 666 test.sh

再一次執(zhí)行

$ bash test.sh 
PID is 2234
Parent PID is 2163
$ ./test.sh
-bash: ./test.sh: Permission denied
$ /Users/qiyeyun/github/iOS-/Shell學(xué)習(xí)/test.sh 
-bash: /Users/qiyeyun/github/iOS-/Shell學(xué)習(xí)/test.sh: Permission denied
$ source test.sh 
PID is 2163
Parent PID is 2162
$ . test.sh 
PID is 2163
Parent PID is 2162

結(jié)論:

  1. "./"(相對/絕對路徑)執(zhí)行需要執(zhí)行權(quán)限嚎莉;

6.3、表格

執(zhí)行方式 無執(zhí)行權(quán)限是否可執(zhí)行 是否打開子shell
bash 可執(zhí)行 打開子shell
./(相對/絕對路徑) 無法執(zhí)行 打開子shell
source / . 可執(zhí)行 當(dāng)前shell環(huán)境
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沛豌,一起剝皮案震驚了整個濱河市趋箩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌加派,老刑警劉巖叫确,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異芍锦,居然都是意外死亡竹勉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門醉旦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饶米,“玉大人,你說我怎么就攤上這事车胡∶适洌” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵匈棘,是天一觀的道長丧慈。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么逃默? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任鹃愤,我火速辦了婚禮,結(jié)果婚禮上完域,老公的妹妹穿的比我還像新娘软吐。我一直安慰自己,他們只是感情好吟税,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布凹耙。 她就那樣靜靜地躺著,像睡著了一般肠仪。 火紅的嫁衣襯著肌膚如雪肖抱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天异旧,我揣著相機(jī)與錄音意述,去河邊找鬼。 笑死吮蛹,一個胖子當(dāng)著我的面吹牛荤崇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匹涮,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼天试,長吁一口氣:“原來是場噩夢啊……” “哼槐壳!你這毒婦竟也來了然低?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤务唐,失蹤者是張志新(化名)和其女友劉穎雳攘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枫笛,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吨灭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刑巧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喧兄。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖啊楚,靈堂內(nèi)的尸體忽然破棺而出吠冤,到底是詐尸還是另有隱情,我是刑警寧澤恭理,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布拯辙,位于F島的核電站,受9級特大地震影響颜价,放射性物質(zhì)發(fā)生泄漏涯保。R本人自食惡果不足惜诉濒,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夕春。 院中可真熱鬧未荒,春花似錦、人聲如沸及志。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽困肩。三九已至划纽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锌畸,已是汗流浹背勇劣。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留潭枣,地道東北人比默。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像盆犁,于是被迫代替她去往敵國和親命咐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345