主頁 > 知識庫 > Linux shell腳本的建立與執(zhí)行

Linux shell腳本的建立與執(zhí)行

熱門標(biāo)簽:外呼系統(tǒng)的合法性 武漢語音電銷機(jī)器人加盟 同花順電話機(jī)器人微信 輝縣市地圖標(biāo)注 房產(chǎn)證地圖標(biāo)注的兩個(gè)面積 北京電銷機(jī)器人對市場的影響 威海電銷外呼系統(tǒng)好用嗎 湖北孝感如何辦理 地圖標(biāo)注x是啥意思

在進(jìn)行l(wèi)inux測試時(shí)編寫腳本是必不可少的。最近經(jīng)常使用Linux,感覺太頻繁地敲擊鍵盤有些累了,于是想到了Shell腳本。可以把太多的命令寫成一個(gè)腳本,這樣每次執(zhí)行一遍  shell文件,就可以省去了敲擊鍵盤的時(shí)間。于是在網(wǎng)上搜了一些有關(guān)Linux下腳本編程的內(nèi)容。

Shell不僅僅是命令的收集,而且是一門非常棒的編程語言。您可以通過使用shell使大量的任務(wù)自動(dòng)化,shell特別擅長系統(tǒng)管理任務(wù),尤其適合那些易用性、可維護(hù)性和便攜性比效率更重要的任務(wù)。

用戶可以使用任何文本編輯器編輯shell腳本文件,例如VI、gedit等。

Shell腳本的名稱可以隨便定義,也不要什么后綴名,例如可以寫abc,smartzip這類名稱。

下面我們開始編寫一個(gè)Shell腳本:

1. 程序必須以下面的行開始(必須放在文件的第一行):

#!/bin/sh

符號#!用來告訴系統(tǒng)它后面的參數(shù)是用來執(zhí)行該文件的程序。在這個(gè)例子中我們使用/bin/sh來執(zhí)行程序。

2. 注釋

在進(jìn)行shell編程時(shí),以#開頭的句子表示注釋,直到這一行的結(jié)束。如同其他編程語言一樣,我們在編寫腳本時(shí)也應(yīng)該盡可能地添加注釋,那么即使相當(dāng)長的時(shí)間內(nèi)沒有使用該腳本,我們也能在很短的時(shí)間內(nèi)明白該腳本的作用及工作原理。

3. 變量

在其他編程語言中您必須使用變量。在shell編程中,所有的變量都由字符串組成,并且您不需要對變量進(jìn)行聲明。要賦值給一個(gè)變量,您可以這樣寫:變量名=值

取出變量值可以加一個(gè)美元符號($)在變量前面:

#!/bin/sh
#對變量賦值:
a="hello world"
# 現(xiàn)在打印變量a的內(nèi)容:
echo "A is:"
echo $a

4. Shell命令和流程控制

在shell腳本中可以使用三類命令:

1)Unix 命令:

雖然在shell腳本中可以使用任意的unix命令,但是還是由一些相對更常用的命令。這些命令通常是用來進(jìn)行文件和文字操作的。

常用命令語法及功能

  • echo "some text": 將文字內(nèi)容打印在屏幕上
  • ls: 文件列表
  • wc –l filewc -w filewc -c file:
  • 計(jì)算文件行數(shù)計(jì)算文件中的單詞數(shù)計(jì)算文件中的字符數(shù)
  • cp sourcefile destfile: 文件拷貝
  • mv oldname newname : 重命名文件或移動(dòng)文件
  • rm file: 刪除文件
  • grep ''pattern'' file: 在文件內(nèi)搜索字符串比如:grep
  • ''searchstring'' file.txt
  • cut -b colnum file:指定欲顯示的文件內(nèi)容范圍,并將它們輸出到標(biāo)準(zhǔn)輸出設(shè)備比如:輸出每行第5個(gè)到第9個(gè)字符cut -b5-9 file.txt千萬不要和cat命令混淆,這是兩個(gè)完全不同的命令
  • cat file.txt: 輸出文件內(nèi)容到標(biāo)準(zhǔn)輸出設(shè)備(屏幕)上
  • file somefile: 得到文件類型
  • read var: 提示用戶輸入,并將輸入賦值給變量
  • sort file.txt: 對file.txt文件中的行進(jìn)行排序
  • uniq: 刪除文本文件中出現(xiàn)的行列比如: sort file.txt | uniq
  • expr: 進(jìn)行數(shù)學(xué)運(yùn)算Example: add 2 and 3expr 2 "+" 3
  • find: 搜索文件比如:根據(jù)文件名搜索find . -name filename -print
  • tee: 將數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出設(shè)備(屏幕) 和文件比如:somecommand | tee  outfile
  • basename file: 返回不包含路徑的文件名比如: basename /bin/tux將返回 tux
  • dirname file: 返回文件所在路徑比如:dirname /bin/tux將返回/bin
  • head file: 打印文本文件開頭幾行
  • tail file : 打印文本文件末尾幾行

sed: Sed是一個(gè)基本的查找替換程序??梢詮臉?biāo)準(zhǔn)輸入(比如命令管道)讀入文本,并將結(jié)果輸出到標(biāo)準(zhǔn)輸出(屏幕)。該命令采用正則表達(dá)式(見參考)進(jìn)行搜索。不要和shell中的通配符相混淆。比如:將linuxfocus 替換為 LinuxFocus :cat text.file | sed ''s/linuxfocus/LinuxFocus/'' > newtext.fileawk: awk

用來從文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat   file.txt | awk -F, ''{print $1 "," $3  }''這里我們使用,作為字段分割符,同時(shí)打印第一個(gè)和第三個(gè)字段。如果該文件內(nèi)容如下: AdamBor, 34, IndiaKerry Miller, 22, USA命令輸出結(jié)果為:AdamBor, IndiaKerry Miller, USA

2) 概念: 管道, 重定向和 backtick

這些不是系統(tǒng)命令,但是他們真的很重要。管道 (|) 將一個(gè)命令的輸出作為另外一個(gè)命令的輸入。

grep "hello" file.txt | wc -l

在file.txt中搜索包含有”hello”的行并計(jì)算其行數(shù)。

在這里grep命令的輸出作為wc命令的輸入。當(dāng)然您可以使用多個(gè)命令。

重定向:將命令的結(jié)果輸出到文件,而不是標(biāo)準(zhǔn)輸出(屏幕)。

>  寫入文件并覆蓋舊文件

>> 加到文件的尾部,保留舊文件內(nèi)容。

反短斜線

使用反短斜線可以將一個(gè)命令的輸出作為另外一個(gè)命令的一個(gè)命令行參數(shù)。

命令: find . -mtime -1 -type f -print 用來查找過去24小時(shí)(-mtime –2則表示過去48小時(shí))內(nèi)修改過的文件。如果您想將所有查找到的文件打一個(gè)包,則可以使用以下腳本:

#!/bin/sh
# The ticks are backticks (`) not normal quotes (''):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f 
-print`

3) 流程控制

"if" 表達(dá)式 如果條件為真則執(zhí)行then后面的部分:

 if ....; then
....
elif ....; then
....
 else
 ....
 fi

大多數(shù)情況下,可以使用測試命令來對條件進(jìn)行測試。比如可以比較字符串、判斷文件是否存在及是否可讀等等…通常用" [ ] "來表示條件測試。注意這里的空格很重要。要確保方括號的空格。

  •  [ -f "somefile" ] :判斷是否是一個(gè)文件
  •  [ -x "/bin/ls" ] :判斷/bin/ls是否存在并有可執(zhí)行權(quán)限
  •  [ -n "$var" ] :判斷$var變量是否有值
  •  [ "$a" = "$b" ] :判斷$a和$b是否相等

5. 執(zhí)行腳本 Linux下的sh文件默認(rèn)是有執(zhí)行權(quán)限的。我們可以用命令:ls -l file_name來查看用戶對文件的權(quán)限。如果沒有執(zhí)行權(quán)限,可以執(zhí)行以下命令添加:chmod +x file_name 。然后可以通過運(yùn)行:sh XX.sh這樣的命令來運(yùn)行腳本。當(dāng)然不同的系統(tǒng)可能不完全相同,需要根據(jù)實(shí)際情況來。例如有的Linux下是./XX.sh就可以運(yùn)行。

概括地來說,shell對shell腳本的調(diào)用可以采用3種方式:

(1)一種是將文件名作為shell命令的參數(shù),其調(diào)用格式為:

$ Bash script_file

當(dāng)要被執(zhí)行的腳本文件沒有可執(zhí)行權(quán)限時(shí),只能使用這種調(diào)用方式。

(2)另一種調(diào)用的方法是先將腳本文件的訪問權(quán)限更改為可執(zhí)行,以便該文件可以作為執(zhí)行文件調(diào)用。

具體的方法是:$chmod +x  script_file

$PATH=$PATH:$PWD
$script_file

(3)當(dāng)執(zhí)行一個(gè)腳本文件時(shí),Shell就產(chǎn)生了一個(gè)Shell(即一個(gè)子進(jìn)程)去執(zhí)行文件中的命令。因此,腳本文件的變量值不能傳遞到當(dāng)期Shell(即父進(jìn)程)。為了使腳本文件中的變量值傳遞到當(dāng)前Shell,必須在命令文件名前面加“.”。即:

$./script_file

“.”命令的功能是在當(dāng)前shell中執(zhí)行腳本文件中的命令,而不是產(chǎn)生一個(gè)子shell執(zhí)行命令文件中的命令。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

您可能感興趣的文章:
  • Ubuntu、Linux Mint一鍵安裝Chrome瀏覽器的Shell腳本分享
  • Linux下實(shí)現(xiàn)SNMP一鍵安裝的Shell腳本
  • 阿里云ECS(linux)一鍵安裝web環(huán)境sh安裝步驟
  • Linux一鍵安裝web環(huán)境全攻略(阿里云服務(wù)器)
  • Linux中shell腳本獲取當(dāng)前工作目錄的方法
  • 詳解在linxu下Svn一鍵安裝shell腳本

標(biāo)簽:蚌埠 迪慶 西寧 麗江 日喀則 安康 紹興 武威

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux shell腳本的建立與執(zhí)行》,本文關(guān)鍵詞  Linux,shell,腳本,的,建立,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux shell腳本的建立與執(zhí)行》相關(guān)的同類信息!
  • 本頁收集關(guān)于Linux shell腳本的建立與執(zhí)行的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章