亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

Bash快速入門指南
來源:易賢網(wǎng) 閱讀:1790 次 日期:2015-04-02 13:04:28
溫馨提示:易賢網(wǎng)小編為您整理了“Bash快速入門指南”,方便廣大網(wǎng)友查閱!

簡單shell腳本

!/bin/bash

這一行表明,不管用戶選擇的是那種交互式shell,該腳本需要使用bash shell來運行。由于每種shell的語法大不相同,所以這句非常重要。

簡單實例

下面是一個非常簡單的shell腳本。它只是運行了幾條簡單的命令

#!/bin/bash

echo "hello, $USER. I wish to list some files of yours"

echo "listing files in the current directory, $PWD"

ls # 列出當前目錄所有文件

首先,請注意第四行。在bash腳本中,跟在#符號之后的內(nèi)容都被認為是注釋(除了第一行)。Shell會忽略注釋。這樣有助于用戶閱讀理解腳本。 ?$USER和 $PWD都是變量。它們是bash腳本自定義的標準變量,無需在腳本中定義即可使用。請注意,在雙引號中引用的變量會被展開(expanded)。“expanded”是一個非常合適的形容詞:基本上,當shell執(zhí)行命令并遇到$USER變量時,會將其替換為該變量對應的值。

變量

任何編程語言都會用到變量。你可以使用下面的語句來定義一個變量:

X="hello"

并按下面的格式來引用這個變量:

$X

更具體的說,$X表示變量X的值。關(guān)于語義方面有如下幾點需要注意:

等于號兩邊不可以有空格!例如,下面的變量聲明是錯誤的 :

X = hello

在我所展示的例子中,引號并不都是必須的。只有當變量值包含空格時才需要加上引號。例如:

X = hello world # 錯誤

X = "hello world" # 正確

這是由于shell將每一行命令視為命令及其參數(shù)的集合,以空格分隔。 foo=bar就被視為一條命令。foo = bar 的問題就在于shell將空格分開的foo視為命令。同樣,X=hello world的問題就在于shell將X=hello視為一條完整的命令,而”world”則被徹底無視(因為賦值命令不需其他參數(shù))。

單引號 VS 雙引號

基本上來說,變量名會在雙引號中展開,單引號中則不會。如果你不需要引用變量值,那么使用單引號可以很直觀的輸出你期望的結(jié)果。 An example 示例

#!/bin/bash

echo -n '$USER=' # -n選項表示阻止echo換行

echo "$USER"

echo "$USER=$USER" # 該命令等價于上面的兩行命令

輸出如下(假設(shè)你的用戶名為elflord)) $USER=elflord $USER=elflord

$USER=elflord

$USER=elflord

從例子中可以看出,在雙引號中使用轉(zhuǎn)義字符也是一種解決方案。雖然雙引號的使用更靈活,但是其結(jié)果不可預見。如果要在單引號和雙引號之間做出選擇,最好選擇單引號。

使用引號封裝變量

有時候,使用雙引號來保護變量名是個很好的點子。如果你的變量值存在空格或者變量值為空字符串,這點就顯得尤其重要。看下面這個例子:

#!/bin/bash

X=""

if [ -n $X ]; then # -n 用來檢查變量是否非空

echo "the variable X is not the empty string"

fi

運行這個腳本,輸出如下:

the variable X is not the empty string

為何?這是因為shell將$X展開為空字符串,表達式[-n]返回真值(因為改表達式?jīng)]有提供參數(shù))。再看這個腳本:

#!/bin/bash

X=""

if [ -n "$X" ]; then # -n 用來檢查變量是否非空

echo "the variable X is not the empty string"

fi

在這個例子中,表達式展開為[ -n ""],由于引號中內(nèi)容為空,因此該表達式返回false值。

在執(zhí)行時展開變量

為了證實shell就像我上面說的那樣直接展開變量,請看下面的例子:

#!/bin/bash

LS="ls"

LS_FLAGS="-al"

$LS $LS_FLAGS $HOME

乍一看可能有點不好理解。其實最后一行就是執(zhí)行這樣一條命令:

Ls -al /home/elflord

(假設(shè)當前用戶home目錄為/home/elflord)。這就說明了shell僅僅只是將變量替換為對應的值再執(zhí)行命令而已。

使用大括號保護變量

這里有一個潛在的問題。假設(shè)你想打印變量X的值,并在值后面緊跟著打印”abc”。那么問題來了:你該怎么做呢? 先試一試:

#!/bin/bash

X=ABC

echo "$Xabc"

這個腳本沒有任何輸出。究竟哪里出了問題?這是由于shell以為我們想要打印變量Xabc的值,實際上卻沒有這個變量。為了解決這種問題可以用大括號將變量名包圍起來,從而避免其他字符的影響。下面這個腳本可以正常工作:

!/bin/bashX=ABCecho “${X}abc”

#!/bin/bash

X=ABC

echo "${X}abc"

條件語句, if/then/elif

在某些情況下,我們需要做條件判斷。比如判斷字符串長度是否為0?判斷文件foo是否存在?它是一個鏈接文件還是實際文件?首先,我們需要if命令來執(zhí)行檢查。語法如下:

if condition

then

statement1

statement2

..........

fi

當指定條件不滿足時,可以通過else來指定其他執(zhí)行動作。

if condition

then

statement1

statement2

..........

else

statement3

fi

當if條件不滿足時,可以添加多個elif來檢查其他條件是否滿足。

if condition1

then

statement1

statement2

..........

elif condition2

then

statement3

statement4

........

elif condition3

then

statement5

statement6

........

fi

當相關(guān)條件滿足時,shell會執(zhí)行在相應的if/elif與下個elif或fi之間的語句。事實上,判斷條件可以是任意命令,當且只當命令返回并且退出狀態(tài)為0時,才會執(zhí)行該條件塊中的語句(換句話說,就是當命令成功返回時)。不過在本文的學習中,我們只會關(guān)注“test”或“[]”形式的條件判斷。

Test命令與操作符

條件判斷中的命令幾乎都是test命令。test根據(jù)測試條件通過或失敗來返回true或false(更準確的說是返回0或非0值)。如下所示:

test operand1 operator operand2

對某些測試來說,只需要一個操作數(shù)(operand2)通常是下面這種情況的簡寫:

[ operand1 operator operand2 ]

為了讓我們的討論更接地氣一點,給出下面一些例子:

#!/bin/bash

X=3

Y=4

empty_string=""

if [ $X -lt $Y ]# is $X less than $Y ?

then

echo "$X=${X}, which is smaller than $Y=${Y}"

fi

if [ -n "$empty_string" ]; then

echo "empty string is non_empty"

fi

if [ -e "${HOME}/.fvwmrc" ]; then # test to see if ~/.fvwmrc exists

echo "you have a .fvwmrc file"

if [ -L "${HOME}/.fvwmrc" ]; then # is it a symlink ?

echo "it's a symbolic link

elif [ -f "${HOME}/.fvwmrc" ]; then # is it a regular file ?

echo "it's a regular file"

fi

else

echo "you have no .fvwmrc file"

fi

需要注意的細節(jié)

Test命令的格式為“操作數(shù)< 空格 >操作符< 空格 >操作數(shù)”或者“操作符< 空格 >操作數(shù)”,這里特別說明必須要有這些空格,因為shell將沒有空格的第一串字符視為一個操作符(以-開頭)或者操作數(shù)。比如下面這個:

if [ 1=2 ]; then echo “hello”fi

它會打印出hello,這明顯與預期結(jié)果是不一致的(因為shell只看到操作數(shù)1=2,沒看到操作符)。

還有一種隱藏陷阱是未加引號的變量。像我們之前例子說的-n測試時變量須加引號的情形。其實,不管在什么情況下,加上引號總是沒有壞處的,還有可能規(guī)避一些很奇葩的錯誤。因為有時候不加引號的變量擴展開的測試結(jié)果會讓人非常困惑。例如:

#!/bin/bash

X="-n"

Y=""

if [ $X = $Y ] ; then

echo "X=Y"

fi

這個腳本打印出來的結(jié)果是錯誤的,因為shell將判斷展開為 [ -n = ],但是”=”的長度不為0,所以條件判斷通過從而導致輸出結(jié)果為“X=Y”。

Test操作符簡介

下圖是test操作符的快速查詢列表。當然這個列表并不全面,但記下這些就足夠平常使用了(如果還需要了解其他操作符,可以查看man手冊)。

operatorproduces true if…number of operands

-noperand non zero length1

-zoperand has zero length1

-dthere exists a directory whose name is operand1

-fthere exists a file whose name is operand1

-eqthe operands are integers and they are equal2

-neqthe opposite of -eq2

=the operands are equal (as strings)2

!=opposite of =2

-ltoperand1 is strictly less than operand2 (both operands should be integers)2

-gtoperand1 is strictly greater than operand2 (both operands should be integers)2

-geoperand1 is greater than or equal to operand2 (both operands should be integers)2

-leoperand1 is less than or equal to operand2 (both operands should be integers)2

循環(huán)

循環(huán)結(jié)構(gòu)允許我們執(zhí)行重復的步驟或者在若干個不同條目上執(zhí)行相同的程序。Bash中有下面兩種循環(huán)

for 循環(huán)

while 循環(huán)

For 循環(huán)

直接來個例子,來直觀地感受for循環(huán)的語法。

#!/bin/bash

for X in red green blue

do

echo $X

done

For循環(huán)會遍歷空格分開的條目。注意,如果某一項含有空格,必須要用引號引起來,例子如下:

#!/bin/bash

colour1="red"

colour2="light blue"

colour3="dark green"

for X in "$colour1" $colour2" $colour3"

do

echo $X

done

如果我們漏掉for循環(huán)中的引號,你能猜想出會發(fā)生什么嗎?這個例子說明,除非你確認變量中不會包含空格,否則最好都用引號將變量保護起來。

在for循環(huán)中使用通配符

如果shell解析字符串時遇到*號,會將它展開為所有匹配的文件名。當且僅當目標文件與號展開后的字符串一致才會匹配成功。例如,單獨的*號展開為當前目錄的所有文件,中間以空格分開(包含隱藏文件)。

所以:

echo *

列出當前目錄下的所有文件和目錄。

echo *.jpg

列出所有的jpeg圖片格式的文件。

echo ${HOME}/public_html/*.jpg

列出home目錄中public_html目錄下的所有jpeg文件。

正是由于這種特性,使得我們可以很方便的來操作目錄和文件,尤其是和for循環(huán)結(jié)合使用時,更是便利。例子如下:

#!/bin/bash

for X in *.html

do

grep -L '<UL>' "$X"

done

打印出當前目錄下所有不包含<UL>字段的html文件。

While 循環(huán)

當給定條件為真值時,while循環(huán)會重復執(zhí)行。例如:

#!/bin/bash

X=0

while [ $X -le 20 ]

do

echo $X

X=$((X+1))

done

這樣導致這樣的疑問: 為什么bash不能使用C風格的for循環(huán)呢?

for (X=1,X<10; X++)

這也跟bash自身的特性有關(guān),之所以不允許這種for循環(huán)是由于:bash是一種解釋性語言,因此其運行效率比較低。也正是由于這個原因,高負荷迭代是不允許的。

命令替換

Bash shell有個非常好用的特性叫做命令替換。允許我們將一個命令的輸出當做另一個命令的輸入。比如你想要將命令的輸出賦值給變量X,你可以通過變量替換來實現(xiàn)。

有兩種命令替換的方式:大括號擴展和反撇號擴展。

大括號擴展: $(commands) 會展開為命令commands的輸出結(jié)果。并且允許嵌套使用,所以commands中允許包含子大括號擴展。

反撇好擴展:將commands擴展為命令commands的輸出結(jié)果。不允許嵌套。

這里有一個例子:

#!/bin/bash

files="$(ls)"

web_files=`ls public_html`

echo "$files" # we need the quotes to preserve embedded newlines in $files

echo "$web_files" # we need the quotes to preserve newlines

X=`expr 3 * 2 + 4` # expr evaluate arithmatic expressions. man expr for details.

echo "$X"

$()替換方式的優(yōu)點不言自明:非常易于嵌套。并且大多數(shù)bourne shell的衍生版本都支持(POSIX shell 或者更好的都支持)。不過,反撇號替換更簡單明了,即使是最基本的shell它也提供了支持(任意版本的#!/bin/sh都可以)。

更多信息請查看IT技術(shù)專欄

更多信息請查看技術(shù)文章
易賢網(wǎng)手機網(wǎng)站地址:Bash快速入門指南
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權(quán)所有:易賢網(wǎng)

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
国产一区二区三区久久| 在线视频亚洲| 一本色道久久| 久久国产精品久久精品国产| 欧美一区在线看| 亚洲综合欧美| 国产精品www.| 一区二区冒白浆视频| 性久久久久久| 欧美日韩亚洲一区三区| 一级成人国产| 欧美在线二区| 美女视频一区免费观看| 亚洲另类黄色| 影音先锋中文字幕一区| 亚洲在线日韩| 1024成人| 1024成人| 在线看片一区| 久久亚洲综合网| 亚洲精品三级| 欧美激情日韩| 性8sex亚洲区入口| 亚洲全部视频| 在线观看不卡| 欧美久色视频| 欧美专区一区二区三区| 亚洲影院免费| 伊人久久亚洲影院| 伊人久久av导航| 国内一区二区在线视频观看| 性色一区二区| 99pao成人国产永久免费视频| 欧美精品一区在线| 久久精品导航| 欧美成ee人免费视频| 99精品视频免费| 国产综合久久| 亚洲精品一区二区三区蜜桃久| 激情综合激情| 欧美日韩一区在线播放| 国产精品v欧美精品∨日韩| 欧美日韩国产三区| 国内精品久久久久久久97牛牛| 久久av免费一区| 欧美日产一区二区三区在线观看| 久久久久久色| 欧美精品麻豆| 国产精品成人观看视频免费| 亚洲乱码视频| 亚洲激情女人| 9色精品在线| 国产欧美韩日| 免费在线一区二区| 久久一区精品| 在线日本高清免费不卡| 影音国产精品| 国产欧美高清| 欧美日韩mv| av成人国产| 国产精品一级| 亚洲一级网站| 久久久久久久久久久久久久一区| 久久久久综合| 欧美日韩在线一二三| 国内一区二区三区在线视频| 亚洲欧美大片| 欧美久久成人| 国产欧美在线| 久久不射中文字幕| 欧美激情日韩| 亚洲大胆在线| 老司机一区二区三区| 欧美精品成人| 一区二区三区视频在线播放| 欧美日韩国内| 久久日韩精品| 国产精品久久久久毛片大屁完整版 | 91久久极品少妇xxxxⅹ软件| 亚洲视频成人| 欧美日本不卡高清| 国产精品手机在线| 欧美色123| 亚洲一区免费看| 99精品国产在热久久| 欧美一级一区| 日韩视频一区| 在线综合视频| 国产精品mv在线观看| 久久国产欧美| 精品二区视频| 欧美 日韩 国产 一区| 久久精品国产99精品国产亚洲性色| 在线日韩电影| 91久久中文| 99视频+国产日韩欧美| 精品动漫3d一区二区三区免费版 | 国产精品日韩| 欧美日韩三级| 欧美日韩在线一区二区三区| 国产免费成人| 亚洲三级电影在线观看| 亚洲欧洲午夜| 欧美午夜精品久久久久免费视| 免播放器亚洲| 午夜久久资源| 久久久精品性| 午夜欧美精品久久久久久久| 亚洲一区免费| 国产毛片久久| 欧美激情精品久久久六区热门| 欧美freesex交免费视频| 亚洲一区网站| 欧美日韩国产免费观看| 国产精品国产精品| 欧美成人一区二区在线| 好吊色欧美一区二区三区四区 | 欧美色123| 狠狠综合久久| 欧美日韩综合网| 欧美日韩成人| aa级大片欧美三级| 国产精品久久亚洲7777| 欧美一区1区三区3区公司 | 久久午夜电影| 麻豆91精品| 久久久久久亚洲精品不卡4k岛国| 男人的天堂亚洲在线| 欧美成熟视频| 欧美激情四色| 国内精品福利| 91久久精品国产91久久性色tv| 亚洲精品看片| 欧美在线二区| 欧美色综合网| 日韩视频一区| 国模吧视频一区| 亚洲免费黄色| 国内精品福利| 国产精品午夜av在线| 久久人人九九| 亚洲午夜高清视频| 国产区二精品视| 久久国产主播精品| 激情综合久久| 国产精品婷婷| 国产主播一区| 亚洲欧美久久| 亚洲成色www久久网站| 香蕉久久a毛片| 日韩视频一区| 美女黄网久久| 亚洲一区三区视频在线观看| 欧美成人免费在线| 午夜亚洲伦理| 国产精品v欧美精品v日韩精品| 免费视频一区| 亚洲午夜激情在线| 欧美午夜不卡影院在线观看完整版免费| 欧美日韩天天操| 亚洲欧美久久| 免费一级欧美片在线播放| 午夜日韩福利| 欧美私人啪啪vps| 国产日韩欧美| 亚洲激情av| 欧美精品aa| 午夜在线观看免费一区| 亚洲国产欧洲综合997久久| 国产精品www.| 久久riav二区三区| 欧美在线1区| 欧美国产综合视频| 欧美福利视频| 国产精品二区在线观看| 久久国产日韩| 亚洲视频综合| 国产精品mm| 午夜欧美精品久久久久久久| 美女久久网站| 欧美一区三区二区在线观看| 国产精品久久久久久久久久直播| 精品69视频一区二区三区Q| 日韩视频一区| 久久久久久婷| 久久伊人亚洲| 欧美二区视频| 欧美涩涩视频| 国产一区二区三区的电影| 男女精品视频| 国产一区高清视频| 一本色道久久综合亚洲精品不卡| 国产精品入口| 国产精品国产精品| 韩日成人av| 在线观看亚洲| 99在线精品免费视频九九视| 99精品视频免费观看| 媚黑女一区二区| 久久国产66| 亚洲黄网站黄| 麻豆精品传媒视频| 樱桃成人精品视频在线播放| 亚洲一区二区三区高清| 亚洲一区二区免费看| 国产精品一区二区a| 校园春色综合网| 伊人久久亚洲热| 亚洲精品三级| 六月天综合网| 国内一区二区三区在线视频| 亚洲经典在线| 男女精品网站| 国产欧美日韩亚洲| 免费h精品视频在线播放| 久久蜜桃精品| 最新国产乱人伦偷精品免费网站| 亚洲欧美在线网| 国产精品区一区| 欧美久久成人| 国产一区二区三区奇米久涩| 精品999网站| 欧美精品导航| 一本久道久久综合狠狠爱| 久久亚洲国产精品日日av夜夜| 国产精品v日韩精品v欧美精品网站 | 久久精品日韩欧美| 伊人激情综合| 亚洲欧美日韩精品综合在线观看| 亚洲高清视频在线观看| 欧美1区2区| 亚洲日本无吗高清不卡| 国产精品九九| 国产精品一区二区你懂得| 99国产精品久久久久久久| 香蕉久久国产| 欧美亚洲免费| 亚洲激情成人| 欧美日本一区| 黄色成人在线网址| 国产精品分类| 亚洲一级一区| 在线看片一区| 欧美激情一区二区三区在线视频| 免费在线国产精品| 亚洲人成高清| 99国产精品| 国产区欧美区日韩区| 一区二区91| 国产综合网站| 欧美激情第六页| 亚洲永久网站| 国产精品美女黄网| 亚洲免费黄色| 亚洲一区二三| 久久久久久久久久久一区| 老司机午夜精品视频| 欧美三级黄美女| 伊人久久综合| 国产一级久久| 亚洲黑丝一区二区| 国产精品丝袜xxxxxxx| 免费在线国产精品| 国产亚洲精品自拍| 久久久久网址| 精品999日本| 亚洲在线电影| 国产精品xxx在线观看www| 亚洲黄色影片| 亚洲国产精品一区在线观看不卡| 亚洲视频中文| 伊人久久亚洲美女图片| 国产精品久久久久久久免费软件 | 美女尤物久久精品| 国产一区清纯| 在线亚洲成人| 亚洲欧美综合国产精品一区| 亚洲男女自偷自拍| 国自产拍偷拍福利精品免费一| 亚洲精品一二| 久久久精品网| 1024日韩| 国产精品久久久久久模特| 性色一区二区三区| 久久天堂国产精品| 国内精品久久久久久久97牛牛| 亚洲国产精品综合| 国产精品一区二区在线观看 | 欧美一级视频| 欧美激情91| 国内一区二区在线视频观看| 亚洲精品一区二区三区樱花 | 国产欧美大片| 久久国产精品毛片| 国内自拍视频一区二区三区| 国产欧美韩日| 亚洲国产免费| 欧美亚洲视频| 狠狠噜噜久久| 亚洲欧美精品| 狠狠入ady亚洲精品| 亚洲一区二区精品在线| 欧美日韩国产精品一区二区亚洲| 亚洲九九精品| 欧美视频不卡| 欧美 亚欧 日韩视频在线| 国产精品免费一区二区三区在线观看| 欧美日韩系列| 国产精品一级久久久| 欧美日韩一区二区高清| 国产亚洲在线观看| 亚洲美女网站| 亚洲人体大胆视频| 欧美一区二区三区在线播放 | 狠狠爱www人成狠狠爱综合网 | 亚洲欧美日韩国产| 在线看片一区| 欧美激情成人在线| 国产嫩草一区二区三区在线观看| 日韩一级欧洲| 欧美日本国产| 国产精品第十页| 欧美视频亚洲视频| 国产一区二区三区四区hd| 国产亚洲激情| 久久国产精品亚洲77777| 国产精品久久亚洲7777| 国产精品视频久久一区| 亚洲欧美清纯在线制服| 国产一区二区高清视频| 国产精品免费看| 最新成人av网站| 欧美日韩日本国产亚洲在线| 黑人一区二区三区四区五区| 影音先锋亚洲一区| 一区二区冒白浆视频| 香蕉国产精品偷在线观看不卡| 亚洲欧洲精品一区二区三区波多野1战4 | 国产精品二区在线| 亚洲全部视频| 美女黄色成人网| 欧美网站在线| 欧美啪啪一区| 国产日韩欧美| 国产精品视频免费观看| 国产精品裸体一区二区三区| 久久九九99| 在线看片一区| 久久久久久9| 亚洲欧洲日本国产| 亚洲人成网站在线观看播放| 亚洲激情成人| 国产日韩欧美在线播放不卡| 午夜精品久久久久99热蜜桃导演| 亚洲经典视频在线观看| 亚洲在线免费| 好看的av在线不卡观看| 伊人激情综合| 久久综合九色综合欧美狠狠| 亚洲国产精品毛片| 一区二区三区福利| 欧美主播一区二区三区美女 久久精品人| 亚洲欧美日韩综合国产aⅴ| 久久久久.com| 国产精品老牛| 欧美一区不卡| 美女精品一区| 日韩亚洲国产精品| 午夜亚洲伦理| 国产欧美精品| 久久亚洲不卡| 午夜在线a亚洲v天堂网2018| 久久综合五月| 亚洲欧美卡通另类91av| 午夜精品一区二区三区四区| 新67194成人永久网站| 欧美日韩视频在线一区二区观看视频 | 久久久xxx| 国产亚洲成人一区| 久久久久免费| 亚洲第一在线| 蜜桃av久久久亚洲精品| 国产乱人伦精品一区二区| 久久午夜av| 老鸭窝亚洲一区二区三区| 一区二区三区四区五区精品视频| 久久不射2019中文字幕| 一区福利视频| 在线国产欧美| 亚洲欧美综合| 国产精品亚洲产品| 国产精品日韩一区二区 | 亚洲在线成人| 亚洲专区一区| 一区在线电影| 亚洲国产日韩在线| 午夜久久福利| 性欧美暴力猛交另类hd| 最新亚洲一区| 99国产精品久久久久久久成人热|