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

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
我一下子也想不起該起什么標(biāo)題,就取了這樣一個不太合適的標(biāo)題。
在這里我想說的是幾種shell里的小括號,大括號結(jié)構(gòu)和有括號的變量,命令的用法,如下:
PHP 代碼:
1.${var}
2.$(cmd)
3.(){}
4.${var:-string},${var:+string},${var:=string},${var:?string}
5.$((exp))
6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern) 
現(xiàn)在分述如下:
1.Shell中變量的原形:${var}
大家常見的變量形式都是$var,如
PHP 代碼:
$ var=test
$ echo $var
test 
但當(dāng)你要顯示變量值加隨意的字符(我這里用AA)時,就會出錯,如下:
PHP 代碼:
$ echo $varAA


這時應(yīng)該用變量的原形:${var},即是加一個大括號來限定變量名稱的范圍,如下
PHP 代碼:
$ echo ${var}AA
testAA

以這個特性,我們可以很方便地寫一個批量改后綴名的程序,我把它命名為mymv,程序如下:
PHP 代碼:
#!/bin/bash
 
tail=$1
for filename in `ls`
do
   
mv $filename ${filename}.$tail
done 
程序需要提供一個后綴名,如c,表示改為后綴為c的C程序文件,看下面的測試:
PHP 代碼:
ls
a b c
mymv c
ls
a
.c b.c c.c

看樣子程序運(yùn)行的很好,但這是不完善的程序,有2個要注意的問題:
A,目錄下沒有子目錄,如果有一個目錄,假設(shè)為dir,則也會被改為dir.c,這顯然不是我們想要的,應(yīng)該修正這個程序能識別目錄。
B,沒有幫助對程序的參數(shù)進(jìn)行處理,程序應(yīng)該足夠友好,在用戶沒有給定后綴名時應(yīng)能處理,像上面的將直接給文件加上了一個點(diǎn)(.),這顯然也不是我們想要的。

因?yàn)槲覀兊哪康氖钦f明${var},這樣已經(jīng)足夠了,因此這里不會再對上面的程序進(jìn)行修正。

2.命令替換$(cmd)
命令替換$(cmd)和符號`cmd`(注意這不是單引號,在美式鍵盤上,`是ESC下面的那個鍵)有相同之處
PHP 代碼:
ls
a b c
$ echo $(ls)
a b c
$ echo `ls`
a b c 
我們來分析一下命令echo $(ls),以便理解所謂命令替換是什么意思:
shell掃描一遍命令行,發(fā)現(xiàn)了$(cmd)結(jié)構(gòu),便將$(cmd)中的cmd執(zhí)行一次,得到其標(biāo)準(zhǔn)輸出,再將此輸出放到原來命令echo $(ls)中的$(ls)位置,即替換了$(ls),再執(zhí)行echo命令。
如下:
echo $(ls)被替換成了echo a b c
這里要注意的是$(cmd)中的命令的錯誤輸出是不會被替換的,替換的只是標(biāo)準(zhǔn)輸出:
PHP 代碼:
$ var=$(cat d)     ###文件d在當(dāng)前目錄不存在
catd沒有那個文件或目錄
$ echo $var

$       ###顯然var變量的值是空的 
3.一串的命令執(zhí)行()和{}
()和{}都是對一串的命令進(jìn)行執(zhí)行,但有所區(qū)別:
A,()只是對一串命令重新開一個子shell進(jìn)行執(zhí)行
B,{}對一串命令在當(dāng)前shell執(zhí)行
C,()和{}都是把一串的命令放在括號里面,并且命令之間用;號隔開
D,()最后一個命令可以不用分號
E,{}最后一個命令要用分號
F,{}的第一個命令和左括號之間必須要有一個空格
G,()里的各命令不必和括號有空格
H,()和{}中括號里面的某個命令的重定向只影響該命令,但括號外的重定向則影響到括號里的所有命令

我們來看幾個例子:
PHP 代碼:
$ var=test
$ (var=notest; echo $var)       ###變量var值為notest,此是在子shell中有效
notest
$ echo $var        ###父shell中值仍為test
test
$ { var=notest; echo $var;}     ###注意左括號和var之間要有一個空格
notest
$ echo $var                     ###父shell中的var變量的值變?yōu)榱薾otest
notest
$ { var1=test1;var2=test2;echo $var1>a;echo $var2;}    ###輸出test1被重定向到文件a中,
test2                ###而test2輸出則仍輸出到標(biāo)準(zhǔn)輸出中。
cat a
test1
$ { var1=test1;var2=test2;echo $var1;echo $var2;}>a             ###括號內(nèi)命令的標(biāo)準(zhǔn)輸出全部被重定向到文件a中
cat a
test1
test2 
4,幾種特殊的替換結(jié)構(gòu):${var:-string},${var:+string},${var:=string},${var:?string}
A,${var:-string}和${var:=string}
若變量var為空,則用在命令行中用string來替換${var:-string},否則變量var不為空時,則用變量var的值來替換${var:-string}
如:
PHP 代碼:
$ echo newvar

$ echo ${newvar:-a}
a
$ echo newvar             ###變量newvar的值仍然是空,但上一命令行中${newvar:-a}被替換成了a

newvar=b
$ echo ${newvar:-a}       ###變量newvar的值不為空時,此命令行中的${newvar:-b}被替換為$newvar,即b
b

對于${var:=string}的替換規(guī)則和${var:-string}是一樣的,所不同之處是${var:=string}若var為空時,用string替換${var:=string}的同時,把string賦給變量var:

PHP 代碼:
$ echo newvar

$ echo ${newvar:=a}
a
$ echo newvar           ###變量newvar被賦值為a,同時${newvar:=a}被替換成a
a
$ echo ${newvar:=b}     ###變量newvar不為空(其值已被賦為a),則${newvar:=b}被替換為newvar的值(即b)
a
$ echo $newvar

${var:=string}很常用的一種用法是,判斷某個變量是否賦值,沒有的話則給它賦上一個默認(rèn)值。
如設(shè)置默認(rèn)的編輯器:
PHP 代碼:
echo You use editor: ${EDITOR:=/bin/vi
B,${var:+string}
${var:+string}的替換規(guī)則和上面的相反,即只有當(dāng)var不是空的時候才替換成string,若var為空時則不替換或者說是替換成變量 var的值,即空值。(因?yàn)樽兞縱ar此時為空,所以這兩種說法是等價的)
PHP 代碼:
$ echo $newvar
a
$ echo ${newvar:+b}
b
$ echo $newvar
a
newvar=
$ echo ${
newvar:+b}


C,${var:?string}
替換規(guī)則為:若變量var不為空,則用變量var的值來替換${var:?string};若變量var為空,則把string輸出到標(biāo)準(zhǔn)錯誤中,并從腳本中退出。我們可利用此特性來檢查是否設(shè)置了變量的值。
PHP 代碼:
newvar=
$ echo ${
newvar:?沒有設(shè)置newvar的值}
bashnewvar沒有設(shè)置newvar的值
newvar=a
$ echo ${newvar:?沒有設(shè)置newvar的值}
a

補(bǔ)充擴(kuò)展:在上面這五種替換結(jié)構(gòu)中string不一定是常值的,可用另外一個變量的值或是一種命令的輸出。
PHP 代碼:
$ echo ${var:-`date`}
日 3月 6 02:10:39 CST 2005
$ echo ${var:-$(date)}
日 3月 6 02:11:46 CST 2005
a=test
$ echo ${var:-$a}
test

5.POSIX標(biāo)準(zhǔn)的擴(kuò)展計算:$((exp))
這種計算是符合C語言的運(yùn)算符,也就是說只要符合C的運(yùn)算符都可用在$((exp)),甚至是三目運(yùn)算符。
注意:這種擴(kuò)展計算是整數(shù)型的計算,不支持浮點(diǎn)型.若是邏輯判斷,表達(dá)式exp為真則為1,假則為0。
PHP 代碼:
$ echo $((3+2))
5
$ echo $((3>2))
1
$ echo $((25<2:3))
3
$ echo $var

$ echo $((var=2+3))
5
$ echo $var
5
$ echo $((var++))
5
$ echo $var
6

好了,上面的例子足夠了,這也表明了這種擴(kuò)展運(yùn)算是很強(qiáng)大的。

6.四種模式匹配替換結(jié)構(gòu):${var%pattern},${var%%pattern},${var#pattern},${var##pattern}
這四種結(jié)構(gòu)的意義是:${var%pattern}和${var%%pattern}表示從最右邊(即結(jié)尾)匹配的,${var#pattern}和${var##pattern}從最左邊(即開頭)匹配的。其中${var%pattern}和${var#pattern}是最短匹配,${var%%pattern}和${var##pattern}是最長匹配。只有在pattern中使用了通配符才能有最長最短的匹配,否則沒有最長最短匹配之分。

結(jié)構(gòu)中的pattern支持通配符,*表示零個或多個任意字符,?表示零個或一個任意字符,[...]表示匹配中括號里面的字符,[!...]表示不匹配中括號里面的字符。
PHP 代碼:
$ var=aabbbccbbdbb
$ echo ${var%b}
aabbbccbbdb
$ echo ${var%%b}
aabbbccbbdb
$ echo ${var#a}
abbbccbbdbb
$ echo ${var##a}
abbbccbbdbb
$ echo ${var%*b}
aabbbccbbdb
$ echo ${var%%*b}

$ echo ${var
#a*}
abbbccbbdbb
$ echo ${var##a*}


上面是簡單的例舉四種模式匹配替換結(jié)構(gòu)的用法。

至此,我想講的shell中幾種括號的結(jié)構(gòu)和變量替換的用法已經(jīng)結(jié)束,有遺漏或錯誤的地方請大家指出來,歡迎和我聯(lián)系:huangyiddle@21cn.com。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产日韩欧美综合精品| 亚洲国产欧美在线| 亚洲一区二区三区四区在线观看| 欧美怡红院视频| 午夜精品久久| 欧美一区二区三区另类| 欧美一区精品| 欧美成人亚洲成人| 欧美激情偷拍| 亚洲一区二区三区四区五区黄 | 国产欧美日韩免费| 国产精品一区二区三区乱码| 国产精品久久久久久久午夜片| 久久久www成人免费无遮挡大片| 亚洲精品永久免费| 狠狠色丁香婷婷综合| 一区二区在线不卡| 一区二区在线视频播放| 亚洲第一中文字幕| 亚洲看片网站| 久久久久久亚洲精品杨幂换脸| 久久影音先锋| 亚洲久色影视| 久久久不卡网国产精品一区| 老司机凹凸av亚洲导航| 欧美亚州韩日在线看免费版国语版| 国产视频精品xxxx| 夜夜爽www精品| 免费成人性网站| 亚洲午夜伦理| 欧美日韩一区二区三区高清| 国产一区二区三区在线观看视频 | 一区二区三区回区在观看免费视频| 亚洲一区视频在线| 亚洲欧洲视频在线| 久久国产主播精品| 国产精品电影观看| 一区二区高清在线观看| 老鸭窝毛片一区二区三区| 亚洲女与黑人做爰| 国产精品日韩精品| 欧美mv日韩mv国产网站app| 国产精品久久久久一区二区| 99精品欧美| 宅男噜噜噜66国产日韩在线观看| 久久亚洲精品一区二区| 在线观看日韩av先锋影音电影院| 欧美一区在线视频| 亚洲主播在线| 亚洲成人资源| 亚洲精品视频一区二区三区| 欧美电影免费观看大全| 亚洲小说区图片区| 亚洲图片欧美午夜| 国产欧美日韩精品丝袜高跟鞋| 久久精品99久久香蕉国产色戒| 亚洲一区二区三区四区视频| 激情视频一区二区| 91久久中文| 国产精品一二一区| 最新成人av在线| 国产欧美精品一区二区色综合 | 欧美人牲a欧美精品| 亚洲综合色在线| 久久在线视频在线| 亚洲欧美一区二区激情| 久久激五月天综合精品| 一区二区冒白浆视频| 久久精品中文字幕免费mv| 亚洲三级免费观看| 欧美尤物一区| 欧美在线free| 国产精品女人毛片| 亚洲婷婷在线| 亚洲国产中文字幕在线观看| 日韩一二三在线视频播| 国产精品v欧美精品∨日韩| 欧美成人性网| 国产欧美一区视频| 亚洲二区在线观看| 久久成人这里只有精品| 久久久久久黄| 欧美成人精品激情在线观看| 亚洲人成免费| 久久国产精品久久久| 久久久久久久国产| 亚洲视频一二区| 欧美精品v日韩精品v国产精品| 久久黄金**| 国产亚洲一区二区在线观看 | 亚洲伊人伊色伊影伊综合网| 一区二区三区在线高清| 久久综合免费视频影院| 欧美激情影音先锋| 亚洲综合不卡| 伊人激情综合| 欧美日韩三区| 欧美在线免费| 亚洲乱码精品一二三四区日韩在线| 亚洲先锋成人| 亚洲国产精品一区二区第一页| 欧美久久影院| 性欧美18~19sex高清播放| 久久综合狠狠综合久久激情| 亚洲精品国产品国语在线app| 国产精品久久7| 久久精品亚洲精品国产欧美kt∨| 亚洲欧洲一区二区天堂久久 | 亚洲校园激情| 噜噜爱69成人精品| 午夜精品福利视频| 亚洲精品日日夜夜| 国内伊人久久久久久网站视频| 欧美wwwwww| 卡一卡二国产精品| 久久国产66| 午夜精品视频在线观看| 一区二区三区视频在线播放| 亚洲国产精品精华液2区45| 翔田千里一区二区| 亚洲专区国产精品| 亚洲一区二区少妇| 中国成人亚色综合网站| av成人免费在线| 一区二区国产日产| 国产情侣一区| 激情婷婷亚洲| 永久域名在线精品| 在线观看中文字幕不卡| 亚洲精品一区在线观看香蕉| 亚洲人人精品| 久久xxxx精品视频| 国产欧美一区二区视频| 欧美日韩免费观看一区| 欧美电影免费观看网站| 国产视频一区二区在线观看| 在线亚洲伦理| 一区二区三区视频在线播放| 亚洲尤物影院| 欧美专区日韩专区| 亚洲乱码国产乱码精品精| 欧美88av| 欧美激情网友自拍| 99精品国产在热久久下载| 欧美精品不卡| 91久久线看在观草草青青| 久久动漫亚洲| 亚洲高清成人| 亚洲欧美综合精品久久成人| 亚洲欧美日本另类| 亚洲伊人网站| 欧美视频官网| 亚洲黄色一区| 欧美在线精品免播放器视频| 亚洲黄页视频免费观看| 激情婷婷久久| 日韩视频在线一区二区三区| 亚洲国产精品99久久久久久久久| 99国内精品久久久久久久软件| 欧美成年人网站| 久久久久综合| 在线精品视频在线观看高清| 欧美资源在线观看| 亚洲欧美视频在线观看| 国产精品国产a| 欧美在线精品免播放器视频| 亚洲一区二区伦理| 国产自产精品| 久久天堂成人| 久久综合99re88久久爱| 亚洲精品久久久久中文字幕欢迎你| 欧美a级一区| 欧美精品一区二区视频| 一区二区三区国产精品| 亚洲男女毛片无遮挡| 国内精品模特av私拍在线观看| 亚洲欧洲精品成人久久奇米网 | 性欧美xxxx视频在线观看| 一本色道久久综合亚洲精品按摩 | 欧美日韩成人综合| 欧美日本国产一区| 一区二区三区三区在线| 欧美一级电影久久| 亚洲精品专区| 欧美伊人久久| 亚洲欧美日韩国产综合| 久久久久久久久岛国免费| 99热免费精品| 久久精品99| 99精品国产在热久久婷婷| 午夜激情综合网| 国产精品久久久久久久久果冻传媒| 久久精品一区中文字幕| 欧美亚洲不卡| 亚洲一区二区三区精品在线| 亚洲黄色影院| 欧美jizz19性欧美| 亚洲电影观看| 亚洲区欧美区| 欧美午夜精品久久久久免费视|