第1章Shell入門基礎(chǔ)_第1頁
第1章Shell入門基礎(chǔ)_第2頁
第1章Shell入門基礎(chǔ)_第3頁
第1章Shell入門基礎(chǔ)_第4頁
第1章Shell入門基礎(chǔ)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第1章 Shell入門基礎(chǔ)本章主要涉及到的知識點有: 為什么學(xué)習(xí)和使用Shell編程:主要介紹Shell在日常管理工作中的重要作用。 什么是Shell:主要介紹Shell的基本概念、起源、功能和分類等。 作為程序設(shè)計語言的Shell:主要介紹什么是交互式程序,如何創(chuàng)建腳本以及如何將腳本設(shè)置為可執(zhí)行。 向腳本傳遞參數(shù):主要介紹什么是腳本參數(shù)以及腳本參數(shù)的用途等。 第一個Shell程序:Hello,Bash Shell:通過一個簡單的例子來向讀者介紹Shell腳本的基本元素、注釋和風(fēng)格、如何執(zhí)行Shell程序以及Shell程序的退出狀態(tài)。1.1 為什么學(xué)習(xí)和使用Shell編程 對于一個合格的系統(tǒng)管

2、理員來說,學(xué)習(xí)和掌握Shell編程是非常重要的。通過編程,可以在很大程度上簡化日常的維護工作,使得管理員從簡單的重復(fù)勞動中解脫出來。 Shell程序的特點: 1、簡單易學(xué)。 2、解釋性語言,毋需編譯。1.2 什么是Shell 在學(xué)習(xí)Shell編程之前,必須弄清楚什么是Shell。為了能夠使讀者在學(xué)習(xí)具體的Shell編程之前對Shell有個基本的了解,本節(jié)將對Shell進行概括性的介紹,包括Shell的起源、功能和分類。1.2.1 Shell的起源 1964年,美國AT&T公司的貝爾實驗室、麻省理工學(xué)院及美國通用電氣公司共同參與開始研發(fā)一套可以安裝在大型主機上的多用戶、多任務(wù)的操作系統(tǒng),

3、該操作系統(tǒng)的名稱為Multics。 1970年,丹尼斯里奇和湯普遜啟動了另外一個新的多用戶、多任務(wù)的操作系統(tǒng)的項目,他們把這個項目稱之為UNICS。 1973年,使用C語言重寫編寫了Unix。通過這次編寫,使得Unix得以移植到其他的小型機上面。 1979年,第一個重要的標(biāo)準(zhǔn)UNIX Shell在Unix的第7版中推出,并以作者史蒂夫伯恩(Stephen Bourne)的名字命名,叫做Bourne Shell,簡稱為sh。 20世紀(jì)70年代末,C Shell作為2BSD UNIX的一部分發(fā)布,簡稱csh。 之后又出現(xiàn)了許多其他的Shell程序,主要包括Tenex C Shell(tcsh)、K

4、orn Shell(ksh)以及GNU Bourne-Again shell(bash)。1.2.2 Shell的功能 Shell又稱命令解釋器,它能識別用戶輸入的各種命令,并傳遞給操作系統(tǒng)。它的作用類似于Windows操作系統(tǒng)中的命令行,但是,Shell的功能遠比命令行強大的多。在UNIX或者Linux中,Shell既是用戶交互的界面,也是控制系統(tǒng)的腳本語言1.2.3 Shell的分類 Bourne Shell:標(biāo)識為sh,該Shell由Steve Bourne在貝爾實驗室時編寫。在許多Unix系統(tǒng)中,該Shell是root用戶的默認的Shell。 Bourne-Again Shell:標(biāo)識

5、為bash,該Shell由Brian Fox在1987年編寫,是絕大多數(shù)Linux發(fā)行版的默認的Shell。 Korn Shell:標(biāo)識為ksh,該Shell由貝爾實驗室的David Korn在二十世紀(jì)八十年代早期編寫。它完全向上兼容 Bourne Shell 并包含了C Shell 的很多特性。 C Shell:標(biāo)識為csh,該Shell由Bill Joy在BSD系統(tǒng)上開發(fā)。由于其語法類似于C語言,因此稱為C Shell。1.3 作為程序設(shè)計語言的Shell Shell不僅僅是充當(dāng)用戶與UNIX或者Linux交互界面的角色,還可以作為一種程序設(shè)計語言來使用。通過Shell編程,可以實現(xiàn)許多非

6、常實用的功能,提高系統(tǒng)管理的自動化水平。本節(jié)將介紹作為程序設(shè)計語言的Shell的一些特性。1.3.1 交互式程序 通常情況下,Shell腳本程序有兩種執(zhí)行方式:交互式執(zhí)行和作為程序文件執(zhí)行。rootlinux # for filename in ls . do if echo $filename | grep xml then echo $filename“ fi done【例1-1】交互式程序1.3.2 創(chuàng)建腳本對于一組需要經(jīng)常重復(fù)執(zhí)行的Shell語句來說,將它們保存在一個文件中來執(zhí)行是一個非常明智的做法。我們通常稱這種包含多個Shell語句的文件為Shell腳本,或者Shell腳本文件。腳

7、本文件都是普通的文本文件,可以使用任何的文本編輯器查看或者修改Shell腳本文件【例1-2】 腳本程序#! /bin/sh#for循環(huán)開始for filename in ls .do #如果文件名包含xml if echo $filename | grep xml then #輸出文件名 echo $filename fidone1.3.3 把腳本設(shè)置為可執(zhí)行當(dāng)將腳本編輯完成之后,這個腳本還不能馬上可以執(zhí)行。在Linux中,當(dāng)用戶執(zhí)行某個程序時,必須擁有該文件的執(zhí)行權(quán)限。用戶可以通過ls命令查看文件的權(quán)限屬性,rootlinux chapter1# lltotal 4-rw-r-r-1root

8、root116Dec 18 23:11 ex1-2.sh 用戶可以通過chmod命令修改文件的權(quán)限屬性。 chmod options filename 例如,下面的操作授予文件ex1-2.sh的所有者執(zhí)行權(quán)限:rootlinux chapter1# chmod u+x ex1-2.sh rootlinux chapter1# lltotal 4-rwxr-r-1 root root 116Dec 18 23:11 ex1-2.sh 當(dāng)授予用戶執(zhí)行權(quán)限之后,就可以執(zhí)行該腳本了,如下:rootlinux # chapter1/ex1-1.sh 1.4 向腳本傳遞參數(shù) 許多情況下,Shell腳本都需

9、要接收用戶的輸入,根據(jù)用戶輸入的參數(shù)來執(zhí)行不同的操作。本節(jié)將介紹Shell腳本的參數(shù)以及如何在腳本中接收參數(shù)。1.4.1 Shell腳本的參數(shù) 從命令行傳遞給Shell腳本的參數(shù)又稱為位置參數(shù),這主要是因為Shell腳本會根據(jù)參數(shù)的位置來接收它們的值。常用的與參數(shù)傳遞有關(guān)的系統(tǒng)變量常用的與參數(shù)傳遞有關(guān)的系統(tǒng)變量變量變量說明說明$n表示傳遞給腳本的第n個參數(shù),例如$1表示第1個參數(shù),$2表示第2個參數(shù)$#命令行參數(shù)的個數(shù)$0當(dāng)前腳本的名稱$*以“參數(shù)1 參數(shù)2 參數(shù)3”的形式返回所有參數(shù)的值$以“參數(shù)1”“參數(shù)2”“參數(shù)3”的形式返回所有參數(shù)的值$_保存之前執(zhí)行的命令的最后一個參數(shù)#! /bin

10、/bashecho $# parametersecho $rootlinux chapter1# ./ex1-3.sh a b c2 parametersa b c【例1-3】 腳本程序傳遞腳本參數(shù)1.4.2 參數(shù)擴展 參數(shù)擴展是通過選項名稱來獲取選項的值,而不是依靠參數(shù)的位置。用戶可以通過getopts命令來獲取選項的值。#!/bin/bash#輸出參數(shù)索引echo OPTIND starts at $OPTIND#接收參數(shù)while getopts :pq: optname do case $optname in p) echo Option $optname is specified ;

11、 q) echo Option $optname has value $OPTARG ; ?) echo Unknown option $OPTARG ; :) echo No argument value for option $OPTARG ; *) # Should not occur echo Unknown error while processing options ; esac echo OPTIND is now $OPTINDdone【例1-4】演示如何使用參數(shù)擴展rootlinux chapter1# ./ex1-4.sh -p OPTIND starts at 1Opti

12、on p is specifiedOPTIND is now 2rootlinux chapter1# ./ex1-4.sh -qOPTIND starts at 1No argument value for option qOPTIND is now 2rootlinux chapter1# ./ex1-4.sh -fOPTIND starts at 1Unknown option fOPTIND is now 21.5 第一個Shell程序:Hello,Bash Shell! 通過前面幾節(jié)的學(xué)習(xí),讀者已經(jīng)接觸到一些Shell程序了。在本節(jié)中,將介紹一個完整的Shell程序的例子,使得讀者能

13、夠掌握Shell程序的組成元素,并寫出簡單的程序。1.5.1 Shell腳本的基本元素 對于一個基本的Shell程序來說,應(yīng)該擁有以下基本元素: 第1行的“#! /bin/bash”。 注釋:說明某些代碼的功能。 可執(zhí)行語句:實現(xiàn)程序的功能。#! /bin/bash#輸出字符串echo Hello Bash Shell!rootlinux chapter1# chmod +x ex1-5.sh rootlinux chapter1# ./ex1-5.sh Hello, Bash Shell!【例1-5】輸出Hello world!1.5.2 指定命令解釋器 命令解釋器用來解釋并執(zhí)行當(dāng)前腳本文件

14、中的語句,語法: #! path例如:#! /bin/bash#! /usr/local/php5/bin/phprootlinux chapter1# ./ex1-6.php Hello world!【例1-6】在PHP腳本文件中指定PHP語言的解釋器,然后執(zhí)行文件中的PHP代碼。#指定解釋器#! /bin/more#輸出語句echo Hello world!rootlinux chapter1# ./ex1-7.sh #! /bin/moreecho Hello world!【例1-7】介紹如何指定more命令作為腳本文件的解釋器1.5.3 Shell腳本中的注釋和風(fēng)格 通過在代碼中增加注

15、釋可以提高程序的可讀性。傳統(tǒng)的Shell只支持單行注釋,其表示方法是一個井號“#”,從該符號開始一直到行尾都屬于注釋的內(nèi)容。 例如: #注釋1 #注釋2 #注釋3 . 用戶還可以通過其他的一些變通的方法來實現(xiàn)多行注釋,其中,最簡單的方法就是使用冒號“:”配合here document,其語法如下: :BLOCK .注釋內(nèi)容 BLOCK#! /bin/sh:BLOCK本腳本的作用是輸出一行字符串作者:chunxiaoBLOCKecho Hello world!【例1-8】通過here document實現(xiàn)了多行注釋1.5.4 如何執(zhí)行Shell程序 在Linux中,如果要執(zhí)行某個Shell程序,

16、用戶可以通過3種方式來實現(xiàn)。這3種方式分別為: 授予用戶執(zhí)行該腳本文件的權(quán)限,使得該程序能夠直接執(zhí)行。 通過調(diào)用Shell腳本解釋器來執(zhí)行。 通過source命令來執(zhí)行。rootlinux chapter1# /bin/bash ex1-5.sh Hello, Bash Shell! source命令是一個Shell內(nèi)部命令,其功能是讀取指定的Shell程序文件,并且依次執(zhí)行其中的所有的語句。該命令與前面2種方式的區(qū)別在于只是簡單地讀取腳本里面的語句,并且依次在當(dāng)前的Shell里面執(zhí)行,并沒有創(chuàng)建新的子Shell進程。腳本里面所創(chuàng)建的變量都會保存到當(dāng)前的Shell里面。1.5.5 Shell程

17、序的退出狀態(tài) 在UNIX或者Linux中,每個命令都會返回一個退出狀態(tài)碼。退出狀態(tài)碼是一個整數(shù),其有效范圍為0255。通常情況下,成功的命令返回0,而不成功的命令返回非0值。非0值通常都被解釋成一個錯誤碼。行為良好的UNIX命令,程序和工具都會返回0作為退出碼來表示成功。ShellShell腳本中的函數(shù)和腳本本身也會返回退出狀態(tài)碼。在腳腳本中的函數(shù)和腳本本身也會返回退出狀態(tài)碼。在腳本或者是腳本函數(shù)中執(zhí)行的最后的命令會決定退出狀態(tài)碼。另外本或者是腳本函數(shù)中執(zhí)行的最后的命令會決定退出狀態(tài)碼。另外,用戶也可以在腳本中使用,用戶也可以在腳本中使用exitexit語句將指定的退出狀態(tài)碼傳遞給語句將指定的退出狀態(tài)碼傳遞給ShellShell。#!/bin/shecho hello world#退出狀態(tài)為0, 因為命令執(zhí)行成功. echo $? #無效命令.abc#非零的退出狀態(tài), 因為命令執(zhí)行失敗.echo $? echo#返回120退出狀態(tài)給shell. exit 120rootlinux chapter1# ./ex1-9.sh hello wo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論