2019-05-27day51Shell編程入門1-3章

第一章 如何才能學(xué)號(hào)Shell編程

學(xué)好Shell編程所需的基礎(chǔ)知識(shí):

(1) 熟練使用vim編輯器。
(2) 要有一定的Linux命令基礎(chǔ),120個(gè)常用命令以上。
(3) 熟練掌握Linux正則表達(dá)式以及三劍客命令。

如何能學(xué)號(hào)Shell編程之“老鳥(niǎo)”經(jīng)驗(yàn)談:

(1) 掌握Shell腳本基本語(yǔ)法的方法
(2) 掌握Shell腳本的各種常見(jiàn)語(yǔ)法。
(3) 形成自己的腳本開(kāi)發(fā)風(fēng)格。
(4) 從簡(jiǎn)單做起,簡(jiǎn)單判斷,簡(jiǎn)單循環(huán)。
(5) 多模仿,多放下參考資料練習(xí),多思考。
(6) 學(xué)會(huì)分析問(wèn)題,逐漸形成編程思維。
(7) 編程變量名字要規(guī)范,采用駝峰語(yǔ)法表示。
(8) 不要拿來(lái)主義,特別是新手。

第二章 Shell腳本初步入門

1、 什么是Shell?

Shell是一個(gè)命令解釋器,作用是解釋執(zhí)行用戶輸入的命令以及程序,用戶每輸入一條Shell就解釋執(zhí)行一條。

2、 什么是Shell腳本?

當(dāng)命令或程序語(yǔ)句不在命令行下執(zhí)行,而是通過(guò)一個(gè)程序文件來(lái)執(zhí)行時(shí),該程序就被稱為Shell腳本。用戶可以在Shell腳本中敲入一系列的命令及命令語(yǔ)句組合。這些命令、變量和流程控制語(yǔ)句等有機(jī)地結(jié)合起來(lái),就形成了一個(gè)功能強(qiáng)大的Shell腳本。

P8案例2-3

第一關(guān),必須是root才能執(zhí)行腳本,否則給出友好提示并終止腳本運(yùn)行。
第二關(guān),成功切換目錄,否則給出友好提示并終止腳本運(yùn)行。
第三關(guān),清理日志,如清理成功,則給出正確提示。
第四關(guān),通關(guān)或失敗,分別給出相應(yīng)的提示。

2.1 Shell腳本在Linux運(yùn)維工作中的地位:

Shell腳本語(yǔ)言很適合用于處理純文本類型的數(shù)據(jù)。

2.2 腳本語(yǔ)言的種類:

Shell腳本語(yǔ)言是弱類型語(yǔ)言(無(wú)需定義變量的類型即可使用)。
(1) Bounrne shell
Bourne shell又包括Bourne shell(sh)、Korn shell(ksh)、Bounrne Again Shell (bash)。
(2) C shell
C shell又包括csh、tcsh兩種類型。

Linux系統(tǒng)中的主流Shell是bash。

2.3 其他常用的腳本語(yǔ)言種類:

(1)PHP語(yǔ)言。
(2)Perl語(yǔ)言
(3)Python語(yǔ)言

2.4 Shell腳本語(yǔ)言優(yōu)勢(shì):

Shell腳本語(yǔ)言的優(yōu)勢(shì)在于處理偏操作系統(tǒng)底層的業(yè)務(wù)。使用Shell開(kāi)發(fā)會(huì)更簡(jiǎn)單、更快捷。例如:讓軟件一鍵自動(dòng)化安裝、優(yōu)化,監(jiān)控報(bào)警腳本,軟件啟動(dòng)腳本,日志分析腳本等。使用Shell更符合Linux運(yùn)維簡(jiǎn)單、易用、高效的三大基本原則。

PHP語(yǔ)言的優(yōu)勢(shì)在于小型網(wǎng)站系統(tǒng)的開(kāi)發(fā),只能應(yīng)用于網(wǎng)頁(yè)。

Python語(yǔ)言的優(yōu)勢(shì)在于開(kāi)發(fā)較復(fù)雜的運(yùn)維工具軟件。

Java適用于中大型網(wǎng)站開(kāi)發(fā)。

書(shū)寫(xiě)規(guī)范:

1、腳本里加#!/bin/bash
2、bash a.sh
3、. /a.sh 默認(rèn)也是bash。Linux默認(rèn)就是bash。

bash和sh的區(qū)別:

CentOS7:sh是bash的軟鏈接。

bash –version    #查看bash版本。

Shell腳本的基本執(zhí)行流程:

image.png

執(zhí)行腳本的5種方法

方式1:不需要執(zhí)行權(quán)限
[root@web01 ~]# sh oldboy.sh #推薦

I am oldboy

[root@web01 ~]# bash oldboy.sh

I am oldboy
方法2:
[root@web01 ~]# cat oldboy.sh|bash

I am oldboy
方法3:輸入重定向
[root@web01 ~]# sh <oldboy.sh

I am oldboy
方法4:執(zhí)行權(quán)限
[root@web01 ~]# /root/oldboy.sh

-bash: /root/oldboy.sh: 權(quán)限不夠

[root@web01 ~]#

[root@web01 ~]#

[root@web01 ~]# chmod +x /root/oldboy.sh

[root@web01 ~]# /root/oldboy.sh

I am oldboy
方法5:
[root@web01 ~]# . /root/oldboy.sh

I am oldboy

[root@web01 ~]# source /root/oldboy.sh

I am oldboy

結(jié)論:通過(guò)source或”.”加載執(zhí)行過(guò)的腳本,由于是在當(dāng)前Shell中執(zhí)行腳本,因此在腳本結(jié)束之后,腳本中的變量(包括函數(shù))值在當(dāng)前Shell中依然存在,而sh和bash執(zhí)行腳本都會(huì)啟動(dòng)新的子Shell執(zhí)行,執(zhí)行完后退回到Shell。因此,變量(包括函數(shù))值無(wú)法保留。在進(jìn)行Shell腳本開(kāi)發(fā)時(shí),如果腳本中有引用或執(zhí)行其他腳本的內(nèi)容或配置文件的需求時(shí),最好用”.” 或source先加載該腳本或配置文件,處理完之后,再將他們加載到腳本的下面,就可以調(diào)用source加載的腳本及配置文件中的變量及函數(shù)等內(nèi)容了。

P18范例2-5

結(jié)論:
(1)兒子Shell腳本會(huì)直接繼承父親Shell腳本的變量、函數(shù)(就好像是兒子隨父親姓,基因也會(huì)繼承父親的)等,反之則不可以。
(2)如果希望反過(guò)來(lái)繼承(就好像是讓父親隨兒子姓,讓父親的基因也繼承兒子的,)就要用source或”.”在父親Shell腳本中事先加載兒子的Shell腳本。

Shell腳本開(kāi)發(fā)的基本規(guī)范及習(xí)慣

(1) Shell腳本的第一行是指定腳本解釋器。
(2) Shell腳本的開(kāi)頭會(huì)加版本、版權(quán)等信息。
(3) 在Shell腳本中盡量不用中文(不限于注釋)。
(4) Shell腳本的命名應(yīng)以.sh為擴(kuò)展名。
(5) Shell腳本應(yīng)存放在固定的路徑下.

第三章 Shell變量的核心基礎(chǔ)知識(shí)與實(shí)踐

什么是Shell變量?

變量就是用一個(gè)固定的字符串(也可能是字符、數(shù)字等的組合)代替更多、更復(fù)雜的內(nèi)容,該內(nèi)容里可能還會(huì)包含變量、路徑、字符串等其他的內(nèi)容。

變量類型:

(1) 環(huán)境變量(全局變量):可以創(chuàng)建它們的Shell及其派生出來(lái)的任意子進(jìn)程Shell中使用,環(huán)境變量又可分為自定義環(huán)境變量和bash內(nèi)置的環(huán)境變量。
(2) 普通變量(局部變量):只能在創(chuàng)建它們的Shell函數(shù)或Shell腳本中使用。普通變量一般由開(kāi)發(fā)者在開(kāi)發(fā)腳本程序時(shí)創(chuàng)建。

環(huán)境變量:

環(huán)境變量一般是指export內(nèi)置命令導(dǎo)出的變量,用于定義Shell的運(yùn)行環(huán)境,保證Shell命令的正確執(zhí)行。Shell通過(guò)環(huán)境變量來(lái)確定登錄用戶名、命令路徑、終端類型、登錄目錄等。

因?yàn)橄到y(tǒng)需要,自身存在的變量。

按照規(guī)范,所有環(huán)境變量名字均采用大寫(xiě)形式。

自定義環(huán)境變量

定義方法1:
 [root@web01 ~]# export OLDBOY=1

 [root@web01 ~]# echo $OLDBOY

 1
定義方法2:
 [root@web01 ~]# OLDGIRL=2

 [root@web01 ~]# export OLDGIRL

 [root@web01 ~]# echo $OLDGIRL

 2
定義方法3:
 -x to make NAMEs export

 [root@web01 ~]# declare -x OLD=3

 [root@web01 ~]# echo $OLD

 3
環(huán)境變量永久生效
 (1)/etc/profile

 (2)~/.bash_profile

 (3)~/.bashrc

 (4)/etc/bashrc

#  優(yōu)先順序(4)到(1)

環(huán)境變量的知識(shí)小結(jié):

(1) 變量名通常要大寫(xiě)。
(2) 變量可以在自身的Shell及子Shell中使用。
(3) 常用的export來(lái)定義環(huán)境變量。
(4) 執(zhí)行env默認(rèn)可以顯示所有的環(huán)境變量名稱及對(duì)應(yīng)的值。
(5) 輸出環(huán)境變量時(shí)用“$變量名”,取消環(huán)境變量時(shí)用“unset變量名”。
(6) 書(shū)寫(xiě)crond定時(shí)任務(wù)時(shí)要注意,腳本要用到的環(huán)境變量最好現(xiàn)在所執(zhí)行的Shell腳本中重新定義。
(7) 如果希望環(huán)境變量永久生效,則可以將其放在用戶環(huán)境變量文件或全局環(huán)境變量文件里。

環(huán)境變量初始化與對(duì)應(yīng)文件的生效順序:

系統(tǒng)運(yùn)行Shell的方式一般有3種:

(1) 通過(guò)系統(tǒng)用戶登錄后默認(rèn)運(yùn)行的Shell。
(2) 非登錄交互式運(yùn)行Shell。
(3) 執(zhí)行腳本運(yùn)行非交互式Shell。

如果用戶的Shell不是登錄時(shí)啟動(dòng)的,就需要將變量設(shè)定等寫(xiě)入$HOME/.bashrc或者/etc/bashrc。

普通變量賦值一般有三種寫(xiě)法:不加引號(hào),加單引號(hào),加雙引號(hào)。

在Shell中定義變量名以及為變量?jī)?nèi)容賦值的要求:

變量名一般是由字母、數(shù)字、下劃線組成的,可以以字母或下劃線開(kāi)頭,但不能是數(shù)字開(kāi)頭。

局部(普通)變量定義及賦值的經(jīng)驗(yàn)小結(jié):

(1) 若變量?jī)?nèi)容為連續(xù)的數(shù)字或字符串,賦值時(shí),變量?jī)?nèi)容兩邊可以不加引號(hào)。
(2) 變量的內(nèi)容很多時(shí),如果有空格且希望解析內(nèi)容中的變量,就加雙引號(hào)。
(3) 希望原樣輸出變量中的內(nèi)容時(shí)就用單引號(hào)引起內(nèi)容進(jìn)行賦值。
(4) 要使用反引號(hào)將賦值的命令括起來(lái)。

老男孩建議:

(1) 在腳本中定義普通字符串變量時(shí),應(yīng)盡量把變量的內(nèi)容用雙引號(hào)括起來(lái)。
(2) 單純數(shù)字的變量?jī)?nèi)容可以不加引號(hào)。
(3) 希望變量的內(nèi)容原樣輸出時(shí)需要加單引號(hào)。
(4) 希望變量值引用命令并獲取命令的結(jié)果時(shí)就用反引號(hào)或$()。

一、變量名及變量?jī)?nèi)容定義小結(jié)

(1) 變量名只能為字母、數(shù)字或下劃線,只能以字母或下劃線開(kāi)頭。
(2) 變量名的定義要有一定的規(guī)范,并且要見(jiàn)名知意。
(3) 一般的變量定義、賦值常用雙引號(hào),簡(jiǎn)單連續(xù)的字符串可以不加引號(hào),希望原樣輸出時(shí)使用單引號(hào)。
(4) 希望變量的內(nèi)容時(shí)命令的解析結(jié)果時(shí),要用反引號(hào)``,或者用$()把命令括起來(lái)再賦值。

二、Shell定義變量時(shí)使用“=”的知識(shí)。

三、打印輸出及使用變量的知識(shí)

(1) 打印輸出或使用變量時(shí),變量名前要接符號(hào),變量名后面緊接其他字符的時(shí)候要用大括號(hào)將變量部分單獨(dú)括起來(lái),在unset、export、(())等場(chǎng)景使用但不打印變量時(shí)不加,這個(gè)有些例外。
(2) 打印輸出或使用變量時(shí),一般加雙引號(hào)或不加引號(hào),如果是字符串變量,最好加雙引號(hào),希望原樣輸出時(shí)使用單引號(hào)。

[root@webol ~]# oldboy="I am oldboy"

[root@webol ~]# echo $oldboy

I am oldboy

1、 變量名

變量名組成、定義規(guī)范

2####、 等號(hào)

賦值符,兩邊不能有空格

3、 變量?jī)?nèi)容

單引號(hào)、雙引號(hào)、反引號(hào)、不加引號(hào)

4、 輸出變量?jī)?nèi)容

變量名加$符號(hào),如果變量后面有內(nèi)容,用{}引用變量部分。
單引號(hào)、雙引號(hào)、反引號(hào)、不加引號(hào)
用echo或者printf

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,786評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,986評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,204評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,964評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,354評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,554評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,106評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,918評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,093評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,342評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,755評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,009評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,839評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,107評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,424評(píng)論 0 5
  • 什么是運(yùn)維 術(shù)語(yǔ)名詞 IDC--(Internet Data Center)互聯(lián)網(wǎng)數(shù)據(jù)中心,主要服務(wù)包括整機(jī)租用、...
    lyh165閱讀 2,740評(píng)論 0 19
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,792評(píng)論 0 10
  • 第 2 章 SHELL 基礎(chǔ)知識(shí)2.1 shell腳本我們?cè)谏厦婧?jiǎn)單介紹了一下什么是shell腳本,現(xiàn)在我們來(lái)進(jìn)一...
    LiWei_9e4b閱讀 1,587評(píng)論 0 0
  • 本文是對(duì)Linux shell編程的一個(gè)學(xué)習(xí)比較,共包括如下章節(jié)的內(nèi)容: 概述 基本語(yǔ)法 結(jié)構(gòu)化語(yǔ)句 函數(shù) 小結(jié) ...
    我是老薛閱讀 842評(píng)論 0 5