国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

30分鐘搞定BASH腳本編程!

2019-11-18 17:24:30
字體:
供稿:網(wǎng)友
chu888@263.net
一個最簡單的腳本
這篇指南將通過一些例子來幫助大家學(xué)習(xí)功能強大的shell腳本編程.
在這一節(jié)中我將學(xué)習(xí)一些簡單的腳本,它將有利于你深入學(xué)習(xí)一些知識。
一個最經(jīng)典的HelloWorld程序
#!/bin/bash
echoHelloWorld

這個腳本只有二行,它的第一行這個腳本程序由那個程序來解釋.第二行只有一個簡單的動作,它的功能是在終端上打印出一行”HelloWorld”。如果你測試著執(zhí)行這個命令時(./hello.sh),你將會得到一個commandnotfound的信息,這種情況大部分可能是你的第一行#!/bin/bash這個程序有問題,你一定要確保bash可以找到并且可用。(一般情況下你還要對這個腳本附一個可執(zhí)行權(quán)限)
#chmodu xhello.sh
一個非常簡單的備份腳本
#!/bin/bash
tar-cZf/var/my-backup.tgz/home/me/

在這個腳本中,它替換了上一個例子的將一行信息打印在終端上的功能,取爾代之的是一個備份/home目錄的tar備份命令。
關(guān)于重定向的一些信息
最基本的理論基礎(chǔ)
這里有對于三個文件的重定向定義:stdin(標準輸入),stdout(標準輸出)andstderr(標準錯誤輸出)(std=standard).
基本上你可以
1.重定向stdout到一個文件
2.重定向stderr到一個文件
3.重定向stdout到stderr
4.重定向stderr到stdout
5.重定向stderr到stdout中并且成為一個文件
6.重定向stderrandstdouttostdout
7.重定向stderrandstdouttostderr
linux中1代表'標準輸出',2代表’標準錯誤’
標準輸出
這個例子將會使ls的顯示結(jié)果重定向到一個文件中.
ls-l>ls-l.txt

標準錯誤
這個例子將會使grep命令在運行過程中出現(xiàn)的錯誤輸出到一個文件中
grepda*2>grep-errors.txt

管道
這一節(jié)我們將解釋一個非常簡單的并且你以后一定會用到的功能,它就是管道。
為什么大家都會用到管道?
管道可以使你非常方便的將一個程序的結(jié)果轉(zhuǎn)向到另外一個程序中。
一個sed的例子
這個例子使用了非常簡單的管道功能:
ls-l|sed-e"s/[aeio]/u/g"

當我們執(zhí)行以下命令后:首先ls–l會先執(zhí)行并且它會輸出結(jié)果信息但是如果它的后面跟是一個管道符的話,那么它就會將結(jié)果重新定向到sed這個程序中,sed使用了替換功能,所以這個例子執(zhí)行完會,會將ls–l結(jié)果中所有含有aeio的英文單詞替換成單詞u.
通過另外的方法實現(xiàn)ls–l*.txt
也許這種方法不同于ls–l*.txt,但是它避免了出現(xiàn)一條NoSuchfileOrDirectory這種信息。
ls-l|grep".txt"

當ls–l執(zhí)行后,它會將程序結(jié)果輸出到grep這個程序中,并且去匹配.txt這條信息。
變量
你可在任何編程語言中使用變量,但是在腳本編程中它們是沒有類型的,簡稱弱類型編程語言,在這個變量中可以保含一個數(shù)字,一個字符串,一個單詞等。你并不需要聲明這個變量,它會在引用這個變量時創(chuàng)建它。
使用變量來實現(xiàn)一個簡單的HelloWorld
#!/bin/bash
STR="HelloWorld!"
echo$STR

第二行建立一個STR的變量并且為其附了一個“HelloWorld”的字符串變量值。當在這個變量前面加上一個$符號時,我們就將會得到這個變量的值。
例子(一個使用變量的備份腳本)
#!/bin/bash
OF=/var/my-backup-$(date Ymd).tgz
tar-cZf$OF/home/me/

局部變量
局部變量的生命是有限的,請看下面的例子
#!/bin/bash
HELLO=Hello
functionhello{
localHELLO=World
echo$HELLO
}
echo$HELLO
hello
echo$HELLO

條件語句
條件語句可以使你決定是完成一個運作或是不去完成一個動作時,通過一些判斷來實現(xiàn),一般情況都是通過一些操作符來實現(xiàn)判斷。
條件語句可以有許多實現(xiàn)方法,最多的情況是基于ifexechoexpressionevaluatedastrue
fi

這段代碼執(zhí)行if判斷,如果foo等于foo的話,那么你就會執(zhí)行then語句下的輸出語句,最后通過fi來結(jié)束,這里我要強調(diào)一點,就是很多新手在輸入
echoexpressionevaluatedastrue
else
echoexpressionevaluatedasfalse
fi

7.循環(huán)結(jié)構(gòu)
在這一節(jié)中,你將會學(xué)習(xí)for、while、untilloops循環(huán)
對于for循環(huán)它有一點不同于其他的編程語言,它有一點像VB中的foreach語句,就是所謂的遞歸的循環(huán)。
對于while循環(huán),它其實是一個加強的if語句,如果它的條件為真,那么它就一直執(zhí)行while循環(huán)中的語句中的內(nèi)容。
7.1Forsample
#!/bin/bash
foriin$(ls);do
echoitem:$i
done

在第二行上,我們聲明了一個i的變量,它將一直將ls命令的結(jié)果全部循環(huán)出來。其中do和done之間是所要執(zhí)行的代碼。
While循環(huán)例子
#!/bin/bash
COUNTER=0
while[$COUNTER-lt10];do
echoThecounteris$COUNTER
letCOUNTER=COUNTER 1
done
這里面大家可能看到一個-lt的命令選項,這里它代表小于等于
-eq等于
-ne不等于
-gt大于
-ge大于等于
-lt小于
-le小于等于
Until的例子
#!/bin/bash
COUNTER=20
until[$COUNTER-lt10];do
echoCOUNTER$COUNTER
letCOUNTER-=1
done

函數(shù)
對于大多數(shù)編程語言,你都可以調(diào)用函數(shù)來執(zhí)行一段代碼,這樣可以使用減少重復(fù)的書寫代碼。
函數(shù)的例子
#!/bin/bash
functionquit{
exit
}
functionhello{
echoHello!
}
hello
quit
echofoo

在2-4行包含了一個quit函數(shù),在5-7行包含了hello函數(shù),如果你不是很確定這個腳本是是什么意思,那么我建議試試它。Noticethatafunctionsdon'tneedtobedeclaredinanyspecificorder.
當你運行這個腳本時你的程序?qū)钕日{(diào)用hello函數(shù),以后再調(diào)用quit函數(shù)最后才執(zhí)行echo輸出命令。
在函數(shù)中使用參數(shù)
#!/bin/bash
functionquit{
exit
}
functione{
echo$1
}
eHello
eWorld
quit
echofoo


這個腳本幾乎和前一個腳本沒有什么不能,但最主要的不同是e這個函數(shù)可以使用參數(shù)了。
用戶接口
使用select命令制作簡單的菜單
#!/bin/bash
OPTIONS="HelloQuit"
selectoptin$OPTIONS;do
if["$opt"="Quit"];then
echodone
exit
elif["$opt"="Hello"];then
echoHelloWorld
else
clear
echobadoption
fi
done

如果你運行這個腳本你將會看到一個非常簡單的菜單
使用read讀入用戶輸入
在多數(shù)情況下你可能會用到提示請進行輸入這種狀態(tài)并且有幾種方法可以用。這是其中的一種方法:
#!/bin/bash
echoPlease,enteryourname
readNAME
echo"Hi$NAME!"

對于變量來說,你可以通過多個值來讀入。
#!/bin/bash
echoPlease,enteryourfirstnameandlastname
readFNLN
echo"Hi!$LN,$FN!"

算術(shù)操作
使用以下的命令:
echo1 1
如果你希望看到2,那么你會很失望,那么我們應(yīng)該如何進行操作哪?echo$((1 1))
我們可以使用以下方法:
echo$[1 1]

算術(shù)操作

-
*
/
(remainder)
關(guān)系操作
-lt(<)
-gt(>)
-le(<=)
-ge(>=)
-eq(==)
-ne(!=)

上一篇:利用ip_conntrack表實現(xiàn)封ip的shell腳本,并有簡單的web發(fā)布

下一篇:Shell初學(xué)者的入門知識

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 囊谦县| 达拉特旗| 陆良县| 财经| 旌德县| 樟树市| 锦州市| 无锡市| 九台市| 屏东县| 夏河县| 旬阳县| 宜阳县| 神池县| 遂宁市| 张家口市| 沂南县| 乐都县| 阜康市| 额敏县| 哈巴河县| 锦州市| 白河县| 汤阴县| 邹城市| 琼海市| 汝州市| 贵州省| 乳源| 吉安市| 辽阳县| 达孜县| 荥阳市| 邢台市| 镇巴县| 哈密市| 清徐县| 景泰县| 益阳市| 襄樊市| 肇庆市|