生活随笔
收集整理的這篇文章主要介紹了
shell中变量的取值与赋值
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
取值是很簡(jiǎn)單的,例如var=bbb,那么${var}ccc的結(jié)果就是bbbccc,在包含字符串的時(shí)候要用到三種引號(hào),分別是單引號(hào)、雙引號(hào)和反引號(hào),現(xiàn)來(lái)一一討論
一、整體引用
mv?"a?~file?name.txt"?another.txt?在這種情況下,單雙引號(hào)是沒(méi)有什么區(qū)別,它們的意義相同。
二、變量替換
echo?"The?value?of?'${var}'?is?${var}".?在這種情況下,當(dāng)一個(gè)變量被用在雙引號(hào)括起來(lái)的句子里面的時(shí)候,它會(huì)被替換成它的內(nèi)容;而當(dāng)使用單引號(hào)的時(shí)候,變量替換則不會(huì)發(fā)生。所以可以說(shuō)單引號(hào)是更強(qiáng)的引用。像上面那個(gè)例子的輸出結(jié)果為:
The?value?of?'${var}'?is?bbb.?三、命令替換
var='uname?-r'?這樣,變量$var的值就是命令uname -r的輸出。
比變量替換更高級(jí)的是匹配,例如:${f%jpg}是用jpg對(duì)變量f從后面開(kāi)始進(jìn)行匹配,并把匹配上的部分(也就是擴(kuò)展名)去掉,同時(shí)使用兩個(gè)百分號(hào)的時(shí)候,表示使用了最大匹配方式,比如"abcdabcd",在用a*d匹配的時(shí)候,如果是最大匹配,就會(huì)匹配所有8個(gè)字符,而用最小匹配的時(shí)候則會(huì)匹配4個(gè)。與百分號(hào)相對(duì)應(yīng),也可以使用"#"來(lái)對(duì)變量進(jìn)行從前向后的匹配,同樣也可以用兩個(gè)來(lái)表示最大匹配。
來(lái)看個(gè)例子
#!/bin/bash ?for?var?in?*.sh ?do ?echo?"${var%sh}" ?done ?結(jié)果如下
test1. ?test2. ?test3. ?test. ?看到了后綴都沒(méi)有了,可以用以修改后綴名
#!/bin/bash ?for?var?in?*.sh ?do ?mv?"${var}" "${var%sh}SH" ?done ?這樣小寫(xiě)的sh就變成大寫(xiě)的了。
寫(xiě)個(gè)簡(jiǎn)單的循環(huán)替換
grep?-v?"^#"?/etc/passwd?|\ ?while?read?i ?do ?echo?${i%%:*} ?done?第一行:-v是取反的意思,"^#"是取開(kāi)頭非#的行,最后的"\",如果將以上代碼直接寫(xiě)成一個(gè)文件那么最后那個(gè)反斜杠可以不要,但是在shell窗口中一行一行的寫(xiě)那么反斜杠是必須加上的,它會(huì)告訴編譯器還沒(méi)有結(jié)束。
第四行:%%:*意思是從最后到":"進(jìn)行最大匹配,這樣就只剩下第一個(gè)":"號(hào)以前的內(nèi)容了,看看結(jié)果
替換前
sucre@sucre-ubuntu:~$?cat?/etc/passwd ?root:x:0:0:root:/root:/bin/bash ?daemon:x:1:1:daemon:/usr/sbin:/bin/sh ?bin:x:2:2:bin:/bin:/bin/sh ?sys:x:3:3:sys:/dev:/bin/sh ?sync:x:4:65534:sync:/bin:/bin/sync ?games:x:5:60:games:/usr/games:/bin/sh ?man:x:6:12:man:/var/cache/man:/bin/sh ?lp:x:7:7:lp:/var/spool/lpd:/bin/sh ?mail:x:8:8:mail:/var/mail:/bin/sh ?news:x:9:9:news:/var/spool/news:/bin/sh ?uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh ?proxy:x:13:13:proxy:/bin:/bin/sh ?www-data:x:33:33:www-data:/var/www:/bin/sh ?backup:x:34:34:backup:/var/backups:/bin/sh ?list:x:38:38:Mailing?List?Manager:/var/list:/bin/sh ?irc:x:39:39:ircd:/var/run/ircd:/bin/sh ?gnats:x:41:41:Gnats?Bug-Reporting?System?(admin):/var/lib/gnats:/bin/sh ?nobody:x:65534:65534:nobody:/nonexistent:/bin/sh ?libuuid:x:100:101::/var/lib/libuuid:/bin/sh ?syslog:x:101:103::/home/syslog:/bin/false ?messagebus:x:102:107::/var/run/dbus:/bin/false ?avahi-autoipd:x:103:110:Avahi?autoip?daemon,,,:/var/lib/avahi-autoipd:/bin/false ?avahi:x:104:111:Avahi?mDNS?daemon,,,:/var/run/avahi-daemon:/bin/false ?couchdb:x:105:113:CouchDB?Administrator,,,:/var/lib/couchdb:/bin/bash ?speech-dispatcher:x:106:29:Speech?Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh ?usbmux:x:107:46:usbmux?daemon,,,:/home/usbmux:/bin/false ?haldaemon:x:108:114:Hardware?abstraction?layer,,,:/var/run/hald:/bin/false ?kernoops:x:109:65534:Kernel?Oops?Tracking?Daemon,,,:/:/bin/false ?pulse:x:110:115:PulseAudio?daemon,,,:/var/run/pulse:/bin/false ?rtkit:x:111:117:RealtimeKit,,,:/proc:/bin/false ?saned:x:112:118::/home/saned:/bin/false ?hplip:x:113:7:HPLIP?system?user,,,:/var/run/hplip:/bin/false ?gdm:x:114:120:Gnome?Display?Manager:/var/lib/gdm:/bin/false ?sucre:x:1000:1000:sucre,,,:/home/sucre:/bin/bash ?sshd:x:115:65534::/var/run/sshd:/usr/sbin/nologin ?替換后
one ?root ?daemon ?bin ?sys ?sync ?games ?man ?lp ?mail ?news ?uucp ?proxy ?www-data ?backup ?list ?irc ?gnats ?nobody ?libuuid ?syslog ?messagebus ?avahi-autoipd ?avahi ?couchdb ?speech-dispatcher ?usbmux ?haldaemon ?kernoops ?pulse ?rtkit ?saned ?hplip ?gdm ?sucre ?sshd ?看到了吧,效率還行吧。
本文轉(zhuǎn)自sucre03 51CTO博客,原文鏈接:http://blog.51cto.com/sucre/386442,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的shell中变量的取值与赋值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。