生活随笔
收集整理的這篇文章主要介紹了
shell中变量的取值与赋值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
取值是很簡單的,例如var=bbb,那么${var}ccc的結果就是bbbccc,在包含字符串的時候要用到三種引號,分別是單引號、雙引號和反引號,現來一一討論
一、整體引用
mv?"a?~file?name.txt"?another.txt?在這種情況下,單雙引號是沒有什么區別,它們的意義相同。
二、變量替換
echo?"The?value?of?'${var}'?is?${var}".?在這種情況下,當一個變量被用在雙引號括起來的句子里面的時候,它會被替換成它的內容;而當使用單引號的時候,變量替換則不會發生。所以可以說單引號是更強的引用。像上面那個例子的輸出結果為:
The?value?of?'${var}'?is?bbb.?三、命令替換
var='uname?-r'?這樣,變量$var的值就是命令uname -r的輸出。
比變量替換更高級的是匹配,例如:${f%jpg}是用jpg對變量f從后面開始進行匹配,并把匹配上的部分(也就是擴展名)去掉,同時使用兩個百分號的時候,表示使用了最大匹配方式,比如"abcdabcd",在用a*d匹配的時候,如果是最大匹配,就會匹配所有8個字符,而用最小匹配的時候則會匹配4個。與百分號相對應,也可以使用"#"來對變量進行從前向后的匹配,同樣也可以用兩個來表示最大匹配。
來看個例子
#!/bin/bash ?for?var?in?*.sh ?do ?echo?"${var%sh}" ?done ?結果如下
test1. ?test2. ?test3. ?test. ?看到了后綴都沒有了,可以用以修改后綴名
#!/bin/bash ?for?var?in?*.sh ?do ?mv?"${var}" "${var%sh}SH" ?done ?這樣小寫的sh就變成大寫的了。
寫個簡單的循環替換
grep?-v?"^#"?/etc/passwd?|\ ?while?read?i ?do ?echo?${i%%:*} ?done?第一行:-v是取反的意思,"^#"是取開頭非#的行,最后的"\",如果將以上代碼直接寫成一個文件那么最后那個反斜杠可以不要,但是在shell窗口中一行一行的寫那么反斜杠是必須加上的,它會告訴編譯器還沒有結束。
第四行:%%:*意思是從最后到":"進行最大匹配,這樣就只剩下第一個":"號以前的內容了,看看結果
替換前
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 ?看到了吧,效率還行吧。
本文轉自sucre03 51CTO博客,原文鏈接:http://blog.51cto.com/sucre/386442,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的shell中变量的取值与赋值的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。