day64-shell編程之-Shell入門

1、什么是shell魁袜?

Shell其實(shí)是一個(gè)命令解釋器,作用是解釋執(zhí)行用戶輸入的命令以及程序等敦第,用戶每輸入一條命令峰弹,Shell給予解釋執(zhí)行一條。這種鍵盤一輸入命令申尼,就可以立即得到回應(yīng)的對(duì)話方式垮卓,稱為交互模式。
Shell存在于操作系統(tǒng)的最外層师幕,負(fù)責(zé)與用戶直接對(duì)話粟按。處理用戶的輸入,并將操作系統(tǒng)執(zhí)行結(jié)果返回給用戶霹粥。在用戶登陸到操作系統(tǒng)之后的所有操作均由Shell解釋執(zhí)行灭将。Shell在操作系統(tǒng)中所處的位置如下

1.2 什么是shell腳本?

簡言之后控,如果shell命令通過寫入到一個(gè)程序文件并執(zhí)行的時(shí)候庙曙,此程序我們就稱之為shell腳本(即:由命令組合成的一個(gè)可執(zhí)行的文件)。但是在生產(chǎn)環(huán)境中的Shell腳本不僅僅是這么簡單浩淘,而是將一些命令捌朴、變量以及流程控制語句有機(jī)結(jié)合并生成的功能完善的強(qiáng)大的應(yīng)用程序。舉例說明:

清除/var/log下message日志文件簡單腳本
cat /dev/null > /var/log/messages
reboot
生產(chǎn)環(huán)境中清除/var/log下message的腳本
#!/bin/bash
# 清除日志腳本张抄,版本 2 
LOG_DIR=/var/log
# 腳本需要使用root用戶權(quán)限來執(zhí)行砂蔽,因此,對(duì)當(dāng)前用戶進(jìn)行判斷署惯,則不和要求的用戶給出友好提示左驾,并終止程序執(zhí)行
ROOT_UID=0
if [ "$UID" -ne "$ROOT_UID" ] # <== 如果當(dāng)前用戶不是root外厂,則不允許執(zhí)行腳本
  then
    echo "Must be root to run this script." # <== 給出提示后退出
    exit 1
fi
# 如果切換目錄不成功呵晨,則給出提示并中止程序執(zhí)行
cd $LOG_DIR || {
    echo "Cannot change to necessary directory."
    exit 1
}
# 經(jīng)過上述判斷之后,此處的用戶權(quán)限應(yīng)該是對(duì)的了驾荣,只有清空成功轻猖,再能打印成功提示
cat /dev/null >messages &&{
    echo "Logs cleaned up."
    exit 0    # 返回0則成功
}
echo "Logs cleaned up fail."
exit 1        # 返回1則失敗

1.3 什么時(shí)候使用shell腳本帆吻?

1>Linux批量管理
2>自動(dòng)化完成系統(tǒng)優(yōu)化
3>自動(dòng)化安裝Linux操作系統(tǒng)(kickstart和cobbler)
4>測試工具和內(nèi)容自動(dòng)化
5>郵件自動(dòng)發(fā)送
6>服務(wù)自動(dòng)重啟
7>代碼上線
8>定時(shí)備份和定時(shí)啟停服務(wù)
9>Linux系統(tǒng)監(jiān)控、服務(wù)監(jiān)控咙边、端口監(jiān)控桅锄、IP黑名單監(jiān)控琉雳、流量監(jiān)控(腳本+zabbix)
10>服務(wù)的日志切割、存儲(chǔ)備份友瘤、日志分析等等

1.4 如何學(xué)好shell腳本翠肘?

1>基礎(chǔ)變量、條件表達(dá)式辫秧、流程判斷束倍、if、for循環(huán)盟戏、while循環(huán)绪妹、case語句、循環(huán)控制
2>從簡單的判斷和循環(huán)開始寫
3>閱讀柿究、模仿邮旷、嘗試從零開始寫
4>寫注釋,將任務(wù)分解成一個(gè)個(gè)小任務(wù)蝇摸,類似于打游戲闖關(guān)
5>找一本合適的教材婶肩,或者自己認(rèn)真記筆記
6>多練習(xí)-思考-練習(xí)-思考,循環(huán)往復(fù)

1.5 解釋型語言和編譯型語言

1.5.1 編譯型語言:

指用專用的編譯器貌夕,針對(duì)特定的操作平臺(tái)(操作系統(tǒng))將某種高級(jí)語言源代碼一次性翻譯成可被硬件平臺(tái)直接運(yùn)行的二進(jìn)制機(jī)器碼律歼,這個(gè)過程叫做編譯。
編譯好的可執(zhí)行文件(.exe)啡专,可在相對(duì)應(yīng)的平臺(tái)運(yùn)行(移植性差险毁,但是效率高)。
C\C++.....

1.5.2 解釋型語言:

用專門解釋器對(duì)源程序逐行解釋成特定平臺(tái)的機(jī)器碼并立即執(zhí)行的語言们童,相當(dāng)于把編譯型語言的編譯執(zhí)行過程混合在一起同時(shí)完成的畔况。
編譯型語言執(zhí)行效率較低,切不能脫離解釋器運(yùn)行慧库。但是跨平臺(tái)比較容易问窃,只需提供相應(yīng)的解釋器
shell\python
注:Java屬于特殊的。既可以說成是解釋型語言完沪,又可以說成是編譯型語言

1.6 shell腳本建立和執(zhí)行

1.6.1 解釋器類型

sh、bash是centos中的默認(rèn)解釋器

1.6.2 腳本定義

腳本開頭
#!/bin/bash

1.6.3 父shell和子shell

腳本嵌套
父shell中的環(huán)境變量嵌戈,在子shell中可以看到
而子shell中的變量覆积,在父shell中看不到

1.6.4 shell執(zhí)行方式

1>sh & bash,最常用的使用方式
2>cat .sh | bash熟呛,適用于執(zhí)行多個(gè)腳本
3>sh < oldboy.sh宽档,了解一下,輸入重定向
4>/root/oldboy.sh庵朝,需要執(zhí)行權(quán)限
5>
. oldboy.sh*
6>source oldboy.sh

1.6.5 shell開發(fā)習(xí)慣

1>腳本存放在固定目錄
2>開頭加腳本解釋器信息
3>附帶作者和版權(quán)信息
4>腳本中盡量不用中文
5>腳本擴(kuò)展名用.sh
6>成對(duì)的符號(hào)一次性書寫完成
7>注意縮進(jìn)
8>養(yǎng)成寫注釋的良好習(xí)慣

總結(jié):

1>腳本放在指定目錄
2>創(chuàng)建腳本吗冤,后綴是.sh
3>在第一行頂格添加命令解釋器的聲明#!/bin/bash
4>添加作者時(shí)間和版權(quán)信息
5>養(yǎng)成良好習(xí)慣又厉,添加注釋
6>Centos7默認(rèn)解釋器是/bin/bash
7>退出當(dāng)前shell的命令是:exit
8>在使用history的時(shí)候,加入腳本中椎瘟,執(zhí)行什么也不會(huì)輸出覆致,在9>腳本中加入set -o history即可解決,但是默認(rèn)顯示的是這個(gè)腳本里的歷史命令肺蔚。但是如果還想顯示腳本外的歷史記錄煌妈,可以使用source 執(zhí)行腳本。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宣羊,一起剝皮案震驚了整個(gè)濱河市璧诵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仇冯,老刑警劉巖之宿,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苛坚,居然都是意外死亡比被,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門炕婶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姐赡,“玉大人,你說我怎么就攤上這事柠掂∠罨” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵涯贞,是天一觀的道長枪狂。 經(jīng)常有香客問我,道長宋渔,這世上最難降的妖魔是什么州疾? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮皇拣,結(jié)果婚禮上严蓖,老公的妹妹穿的比我還像新娘。我一直安慰自己氧急,他們只是感情好颗胡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吩坝,像睡著了一般毒姨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钉寝,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天弧呐,我揣著相機(jī)與錄音闸迷,去河邊找鬼。 笑死俘枫,一個(gè)胖子當(dāng)著我的面吹牛腥沽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播崩哩,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼巡球,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了邓嘹?” 一聲冷哼從身側(cè)響起酣栈,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汹押,沒想到半個(gè)月后矿筝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棚贾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年窖维,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妙痹。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铸史,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怯伊,到底是詐尸還是另有隱情琳轿,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布耿芹,位于F島的核電站崭篡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吧秕。R本人自食惡果不足惜琉闪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望砸彬。 院中可真熱鬧颠毙,春花似錦、人聲如沸砂碉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绽淘。三九已至,卻和暖如春闹伪,著一層夾襖步出監(jiān)牢的瞬間沪铭,已是汗流浹背壮池。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杀怠,地道東北人椰憋。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像赔退,于是被迫代替她去往敵國和親橙依。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,407評(píng)論 0 5
  • 1.1 為什么要學(xué)Shell編程硕旗? Shell腳本語言是實(shí)現(xiàn)Linux/UNIX系統(tǒng)管理及自動(dòng)化運(yùn)維所必備的重要工...
    張鑫澤_2109閱讀 471評(píng)論 0 0
  • Shell入門 什么是shell窗骑? Shell其實(shí)是一個(gè)命令解釋器,作用是解釋執(zhí)行用戶輸入的命令以及程序等漆枚,用戶每...
    酷酷的偉閱讀 425評(píng)論 0 1
  • 1创译、為什么要學(xué)習(xí)Shell編程? Linux系統(tǒng)中會(huì)大量的使用Shell墙基,工作中我們也需要自動(dòng)化實(shí)現(xiàn)業(yè)務(wù)软族, 例如:...
    放手吧_e512閱讀 295評(píng)論 0 0
  • 一、什么是Shell腳本 示例 看個(gè)例子吧: 示例解釋 第1行:指定腳本解釋器残制,這里是用/bin/sh做解釋器的 ...
    Rick617閱讀 788評(píng)論 0 1