青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天下

記錄修行的印記

shell編程筆記

腳本不是復(fù)雜的程序,它是按行解釋的,腳本的第一行總是以#!/bin/sh開(kāi)始.
這行代碼通知書(shū)shell使用系統(tǒng)上的Bourne shell解析器.

shell語(yǔ)法
test 命令
1.條件測(cè)試
test命令用于測(cè)試字符串
,文件狀態(tài)和數(shù)字.

工作原理
test 命令最短的定義可能是評(píng)估一個(gè)表達(dá)式;如果條件為真,則返回一個(gè) 
0 值。如果表達(dá)式不為真,返回非0

test一般有兩種格式
:

test 條件表達(dá)式

[ 條件表達(dá)式 ]

使用方括號(hào)時(shí)
,要注意在條件兩邊加上空格.

文件運(yùn)算符
利用這些運(yùn)算符,您可以在程序中根據(jù)對(duì)文件類(lèi)型的評(píng)估結(jié)果執(zhí)行不同的操作:
-b file 如果文件為一個(gè)塊特殊文件,則為真
-c file 如果文件為一個(gè)字符特殊文件,則為真
-d file 如果文件為一個(gè)目錄,則為真
-e file 如果文件存在,則為真
-f file 如果文件為一個(gè)普通文件,則為真
-g file 如果設(shè)置了文件的 SGID 位,則為真
-G file 如果文件存在且歸該組所有,則為真
-k file 如果設(shè)置了文件的粘著位,則為真
-O file 如果文件存在并且歸該用戶(hù)所有,則為真
-p file 如果文件為一個(gè)命名管道,則為真
-r file 如果文件可讀,則為真
-s file 如果文件的長(zhǎng)度不為零,則為真
-S file 如果文件為一個(gè)套接字特殊文件,則為真
-t fd    如果 fd 是一個(gè)與終端相連的打開(kāi)的文件描述符(fd 默認(rèn)為 1),則為真
-u file 如果設(shè)置了文件的 SUID 位,則為真
-w file 如果文件可寫(xiě),則為真
-x file 如果文件可執(zhí)行,則為真

字符串比較運(yùn)算符
如標(biāo)題所示,這組函數(shù)比較字符串的值。您可以檢查它們是否存在、是否相同或者是否不同。
string 測(cè)試以判斷字符串是否不為空
-n string 測(cè)試以判斷字符串是否不為空;
-z string 測(cè)試以判斷字符串是否為空;
string1 
= string2 測(cè)試以判斷 string1 是否與 string2 相同
string1 
!= string2 測(cè)試以判斷 string1 是否與 string2 不同

整數(shù)比較運(yùn)算符
正如字符串比較運(yùn)算符驗(yàn)證字符串相等或不同一樣,整數(shù)比較運(yùn)算符對(duì)數(shù)字執(zhí)行相同的功能。
如果變量的值匹配則表達(dá)式測(cè)試為真,如果不匹配,則為假。整數(shù)比較運(yùn)算符不處理字符串(正如字符串運(yùn)算符不處理數(shù)字一樣):
-eq    等于
-ge    大于或等于
-gt    大于
-le    小于或等于
-lt    小于
-ne    不等于
:
# [ 2 -gt 3 ]
# echo $?

1

# [ 2 -lt 3 ]
# echo $?

0

布爾運(yùn)算符
布爾運(yùn)算符在幾乎每種語(yǔ)言中的工作方式都相同 — 包括 shell 腳本。在 nutshell 中,它們檢查多個(gè)條件為真或?yàn)榧伲蛘哚槍?duì)假的條件而不是真的條件采取操作。與 test 搭配使用的運(yùn)算符有
:
!    條件非
-a    條件與
-o    條件或



控制結(jié)構(gòu)
無(wú)論什么編程語(yǔ)言都離不開(kāi)條件判斷。SHELL也不例外。
條件分支

if語(yǔ)句

語(yǔ)法1
:
if 條件表達(dá)式
    then    命令
fi

語(yǔ)法2
:
if 條件表達(dá)式; then
    
do something here
elif 條件表達(dá)式 then
    
do another thing here
else
    
do something else here
fi

使用if時(shí)
,必須將then部分放在新行,否則會(huì)報(bào)錯(cuò).
如果要不分行
,必須使用命令分隔符.
$ vi testsh.sh
#!/bin/sh
if
cat 111-tmp.txt | grep ting1
then
echo found
else
echo "no found"
fi

$ vi testsh.sh
#!/bin/sh
cat 111-tmp.txt | grep ting1
if [ $? -eq 0 ]
then
echo $?
echo found
else
echo $?
echo "no found"
fi

#!/bin/sh

#函數(shù)
gw()
{
echo "do function gw()"
return 0
}

if gw
then
        echo "run succeed"
        echo "run succeed"
else
        echo "run failed"
        echo "run failed"
fi

說(shuō)明:
if 命令/函數(shù) 0為真,走then
if 多條指令,這些命令之間相當(dāng)于“and”(與)



case語(yǔ)句
case命令可類(lèi)比C語(yǔ)言的switch
/case語(yǔ)句,esac表示case語(yǔ)句塊的結(jié)束。
每個(gè)匹配分支可以有若干條命令,末尾必須以;;結(jié)束,執(zhí)行時(shí)找到第一個(gè)匹配的分支并執(zhí)行相應(yīng)的命令,然后直接跳到esac之后,不需要像C語(yǔ)言一樣用break跳出。
:
#! /bin/sh
echo "Is it morning? Please answer yes or no."
read YES_OR_NO
case 
"$YES_OR_NO" in
yes
|y|Yes|YES)
  echo 
"Good Morning!";;
[nN]
*)
  echo 
"Good Afternoon!";;
*)
  echo 
"Sorry, $YES_OR_NO not recognized. Enter yes or no."
  
exit 1;;
esac
exit 0


for語(yǔ)句
for 變量名 in 列表
do
    命令1
    命令2
done

Shell腳本的for循環(huán)結(jié)構(gòu)和C語(yǔ)言很不一樣,它類(lèi)似php編程語(yǔ)言的foreach循環(huán)。例如:
#!/bin/sh
for FRUIT in apple banana pear; do
  echo 
"I like $FRUIT"
done

while/do/done
while的用法和C語(yǔ)言類(lèi)似。比如一個(gè)驗(yàn)證密碼的腳本:

#!/bin/sh
echo "Enter password:"
read TRY
while [ "$TRY" != "secret" ]; do
  echo 
"Sorry, try again"
  
read TRY
done


位置參數(shù)和特殊變量
$
0    相當(dāng)于C語(yǔ)言main函數(shù)的argv[0]
$
1、$2    這些稱(chēng)為位置參數(shù)(Positional Parameter),相當(dāng)于C語(yǔ)言main函數(shù)的argv[1]、argv[2]
$
#    參數(shù)個(gè)數(shù),不包括程序自身,相當(dāng)于C語(yǔ)言main函數(shù)的argc-1
$@    表示參數(shù)列表"$1" "$2" ,例如可以用在for循環(huán)中的in后面。
$
?    上一條命令的Exit Status
$$    當(dāng)前Shell的進(jìn)程號(hào)

位置參數(shù)可以用shift命令左移。
比如shift 3表示原來(lái)的$4現(xiàn)在變成$
1,原來(lái)的$5現(xiàn)在變成$2等等,原來(lái)的$1、$2、$3丟棄,$0不移動(dòng)。不帶參數(shù)的shift命令相當(dāng)于shift 1


函數(shù)

和C語(yǔ)言類(lèi)似,Shell中也有函數(shù)的概念,但是函數(shù)定義中沒(méi)有返回值也沒(méi)有參數(shù)列表。例如:

#!/bin/sh

foo(){ echo 
"Function foo is called";}
echo 
"-=start=-"
foo
echo 
"-=end=-"

注意函數(shù)體的左花括號(hào){和后面的命令之間必須有空格或換行,如果將最后一條命令和右花括號(hào)}寫(xiě)在同一行,命令末尾必須有;號(hào)。

在定義foo()函數(shù)時(shí)并不執(zhí)行函數(shù)體中的命令,就像定義變量一樣,只是給foo這個(gè)名字一個(gè)定義,到后面調(diào)用foo函數(shù)的時(shí)候(注意Shell中的函數(shù)調(diào)用不寫(xiě)括號(hào))才執(zhí)行函數(shù)體中的命令。Shell腳本中的函數(shù)必須先定義后調(diào)用,一般把函數(shù)定義都寫(xiě)在腳本的前面,把函數(shù)調(diào)用和其它命令寫(xiě)在腳本的最后(類(lèi)似C語(yǔ)言中的main函數(shù),這才是整個(gè)腳本實(shí)際開(kāi)始執(zhí)行命令的地方)。

Shell函數(shù)沒(méi)有參數(shù)列表并不表示不能傳參數(shù),事實(shí)上,函數(shù)就像是迷你腳本,調(diào)用函數(shù)時(shí)可以傳任意個(gè)參數(shù),在函數(shù)內(nèi)同樣是用$
0、$1、$2等變量來(lái)提取參數(shù),函數(shù)中的位置參數(shù)相當(dāng)于函數(shù)的局部變量,改變這些變量并不會(huì)影響函數(shù)外面的$0、$1、$2等變量。函數(shù)中可以用return命令返回,如果return后面跟一個(gè)數(shù)字則表示函數(shù)的Exit Status。

until語(yǔ)句
  until循環(huán)執(zhí)行一系列命令直至條件為真時(shí)停止。注意
,這里是直到條件是真時(shí)才停止
until格式為:
until 條件
  命令1
  

done


i
=0
until [ $i -gt 3 ]
do
    i
=`expr "$i" + 1`
    
#i=$(($i + 1))
    echo $i
done

posted on 2011-09-08 15:54 天下 閱讀(514) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Linux使用Linux編程Linux Shell

<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(4)

隨筆分類(lèi)(378)

隨筆檔案(329)

鏈接

最新隨筆

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美大香线蕉线伊人久久国产精品| 国产精品看片资源| 欧美激情五月| 久久久一区二区三区| 久久激情视频免费观看| 欧美一区二区三区在线看| 亚洲综合社区| 久久激情视频免费观看| 麻豆乱码国产一区二区三区| 在线观看久久av| 国产欧美91| 在线观看日韩国产| 亚洲人成在线播放| 99精品欧美一区| 欧美一区二区三区电影在线观看| 看片网站欧美日韩| 亚洲高清资源| 亚洲精品在线视频| 亚洲欧美日韩一区在线| 久久日韩精品| 欧美日韩亚洲高清| 国产一区二区无遮挡| 亚洲人成网站影音先锋播放| 中国成人黄色视屏| 欧美成人免费播放| 亚洲午夜av| 欧美高清日韩| 国产综合久久久久久鬼色| 亚洲人精品午夜在线观看| 欧美日韩视频在线一区二区| 国产精品丝袜91| 亚洲最新视频在线| 欧美一区日韩一区| 欧美激情欧美狂野欧美精品 | 欧美日韩在线播| 怡红院精品视频| 亚洲永久精品大片| 91久久国产综合久久蜜月精品| 亚洲欧美另类综合偷拍| 欧美日本不卡视频| 亚洲国产精品热久久| 欧美夜福利tv在线| 亚洲国产精品欧美一二99| 午夜一区二区三区不卡视频| 欧美日韩免费一区二区三区| 亚洲激情在线播放| 欧美v国产在线一区二区三区| 亚洲综合精品四区| 欧美乱人伦中文字幕在线| 在线观看视频一区| 久久艳片www.17c.com| 亚洲视频精品在线| 欧美午夜免费影院| 99精品久久久| 亚洲欧洲另类国产综合| 老司机成人网| 韩国三级电影久久久久久| 久久九九全国免费精品观看| 亚洲免费影视第一页| 国产欧美日韩在线视频| 久久av一区二区三区漫画| 亚洲女性裸体视频| 国产日韩一区| 久久精品二区三区| 久久精品中文| 在线视频观看日韩| 国内成+人亚洲+欧美+综合在线| 午夜精品99久久免费| 亚洲永久视频| 黄网站色欧美视频| 欧美插天视频在线播放| 欧美成人三级在线| 亚洲在线视频观看| 午夜在线电影亚洲一区| 国产主播在线一区| 亚洲成人在线视频网站| 欧美日韩一区二区三区在线看| 亚洲一区二区欧美| 亚洲影院在线观看| 国内精品久久久久影院 日本资源| 久久婷婷久久一区二区三区| 老司机精品视频网站| 99国产精品国产精品毛片| 亚洲视频一区在线| 国内偷自视频区视频综合| 男女精品网站| 欧美精品网站| 欧美有码视频| 亚洲影视综合| 亚洲东热激情| 欧美色大人视频| 欧美一区二区三区另类| 欧美影院一区| 一本色道久久综合亚洲91| 午夜综合激情| 亚洲美女av在线播放| 亚洲永久免费av| 日韩视频在线一区二区| 欧美伊人久久久久久午夜久久久久 | 亚洲日本欧美日韩高观看| 欧美电影资源| 亚洲第一天堂无码专区| 精品成人一区| 欧美在现视频| 久久精品亚洲乱码伦伦中文 | 亚洲综合欧美日韩| 国产亚洲激情| 亚洲韩国精品一区| 国产精品自拍在线| 亚洲精品视频一区二区三区| 国产亚洲精品自拍| 亚洲美女免费视频| 狠狠色伊人亚洲综合网站色| 日韩视频一区二区在线观看 | 国产日韩欧美一区| 日韩午夜激情| 亚洲精品一区二区在线| 久久国产精品一区二区三区四区| 一本色道久久综合狠狠躁篇怎么玩 | 日韩视频一区二区| 久久久夜夜夜| 久久精品水蜜桃av综合天堂| 国产精品va在线播放| 最新亚洲一区| 亚洲理伦电影| 久久全球大尺度高清视频| 欧美激情综合| 永久域名在线精品| 香蕉尹人综合在线观看| 一区二区三区av| 欧美精品一区二区三区蜜臀| 美国成人毛片| 国产精品―色哟哟| 国产精品亚洲аv天堂网| 欧美日韩第一区日日骚| 免费观看不卡av| 午夜国产一区| 亚洲综合999| 亚洲欧美亚洲| 99re热这里只有精品免费视频| 久久久久久午夜| 久久久久久久久久久久久久一区| 亚洲免费观看视频| **网站欧美大片在线观看| 99国产精品视频免费观看| 久久视频在线看| 蜜臀久久99精品久久久画质超高清| 国产丝袜一区二区| 欧美在线视频免费| 国产日韩一区二区| 久久午夜视频| 亚洲国产精品精华液2区45| 亚洲福利视频二区| 欧美成人自拍视频| 亚洲三级性片| 亚洲一区二区三区777| 国产精品一区一区三区| 午夜国产精品影院在线观看 | 亚洲国产精品日韩| 欧美福利一区二区三区| 亚洲乱码精品一二三四区日韩在线 | 久久免费午夜影院| 亚洲黑丝在线| 午夜精品久久久久久久久久久久久| 国产精品午夜在线| 久久久91精品国产一区二区精品| 麻豆91精品| 亚洲免费播放| 国产视频一区在线观看| 欧美高清自拍一区| 亚洲一区二区在线免费观看| 久久在线免费观看| 亚洲一区二区三区四区五区午夜| 国产精品九九| 卡通动漫国产精品| 国产精品99久久不卡二区| 久久躁日日躁aaaaxxxx| 亚洲乱码国产乱码精品精| 欧美性一二三区| 免费在线欧美视频| 欧美有码在线观看视频| 亚洲国产精品一区| 伊人成人开心激情综合网| 久久一区二区精品| 一区二区免费在线观看| 女人天堂亚洲aⅴ在线观看| 亚洲天堂免费在线观看视频| 激情文学一区| 国产精品久久久一区二区三区| 久久久亚洲国产美女国产盗摄| 99精品视频一区二区三区| 久久久久久一区二区三区| 9色精品在线| 亚洲第一色中文字幕| 国产精品国产三级国产普通话三级| 久久久999精品| 亚洲欧美日韩精品久久久| 亚洲美女中出| 欧美国产视频在线| 久久久夜夜夜|