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
- 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變數命名與賦值變數賦值
- shell 變數賦值問題變數賦值
- 微信小程式--data的賦值與取值微信小程式賦值
- jQuery radio的取值與賦值jQuery賦值
- jquery取值和賦值(包含部分是原生js的取值和賦值)jQuery賦值JS
- Shell變數賦值語句不能有空格變數賦值
- Linux Shell程式設計(7)——變數賦值Linux程式設計變數賦值
- 再說mysql中的變數賦值MySql變數賦值
- 簡單介紹Lua中的變數與賦值方法變數賦值
- jquery操作select取值賦值與設定選中[轉]jQuery賦值
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- go語言變數的宣告與賦值Go變數賦值
- 變數的賦值 指標間接賦值變數賦值指標
- JS中的變數賦值深入理解JS變數賦值
- 自己對Java中if變數賦值的理解Java變數賦值
- php之普通變數賦值、物件賦值、引用賦值的區別PHP變數賦值物件
- 變數的解構賦值變數賦值
- mysql 儲存過程中變數的定義與賦值操作MySql儲存過程變數賦值
- JQuery給textarea取值和賦值jQuery賦值
- 儲存過程中SELECT與SET對變數賦值儲存過程變數賦值
- Shell程式設計-04-Shell中變數數值計算程式設計變數
- 關於變數與‘=’賦值的情況出錯變數賦值
- javascript變數賦值或者重新賦值注意事項JavaScript變數賦值
- VC++ 控制元件賦值取值C++控制元件賦值
- ORA-02149與變數賦值變數賦值
- 從資料庫返回多條紀錄賦值給shell變數資料庫賦值變數
- php變數賦值給jsPHP變數賦值JS
- python 多變數賦值Python變數賦值
- 能取值亦能賦值的Python切片賦值Python
- Jquery給基本控制元件的取值、賦值jQuery控制元件賦值
- Bash 中為 _ 變數賦空值的三個場景變數
- [Shell] shell中的內部變數變數
- Javascript 解構賦值,將屬性/值從物件/陣列中取出,賦值給其他變數JavaScript賦值物件陣列變數
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-對BOOLEAN變數賦值SQL變數賦值Boolean
- matlab中怎麼給符號變數賦值Matlab符號變數賦值
- CentOS shell中的變數CentOS變數
- 物件屬性值賦給變數物件變數
- 給物件引用變數賦值(轉)物件變數賦值