變量定義
#定義變量
declare $變量名
#或者直接賦值也自動(dòng)定義變量,注意變量之前不帶"$"
變量名=值
#打印變量的值,"$"代表引用變量的值
echo $變量名
在所有的 UNIX 和類 UNIX 系統(tǒng)中时迫,每個(gè)進(jìn)程都有其各自的環(huán)境變量設(shè)置,且默認(rèn)情況下,當(dāng)一個(gè)進(jìn)程被創(chuàng)建時(shí),處理創(chuàng)建過程中明確指定的話,它將繼承其父進(jìn)程的絕大部分環(huán)境設(shè)置。
通常我們會(huì)涉及到的環(huán)境變量有三種:
- 當(dāng)前 Shell 進(jìn)程私有用戶自定義變量窿祥,如上面我們創(chuàng)建的 temp 變量,只在當(dāng)前 Shell 中有效蝙寨。
- Shell 本身內(nèi)建的變量晒衩。
- 從自定義變量導(dǎo)出的環(huán)境變量片林。
相關(guān)命令 | 說明 |
---|---|
set | 顯示當(dāng)前 Shell 所有環(huán)境變量,包括其內(nèi)建環(huán)境變量(與 Shell 外觀等相關(guān))鲫凶,用戶自定義變量及導(dǎo)出的環(huán)境變量 |
env | 顯示與當(dāng)前用戶相關(guān)的環(huán)境變量涮瞻,還可以讓命令在指定環(huán)境中運(yùn)行 |
export | 顯示從 Shell 中導(dǎo)出成環(huán)境變量的變量,也能通過它將自定義變量導(dǎo)出為環(huán)境變量 |
輸出環(huán)境變量
#將普通變量輸出為環(huán)境變量逛犹,能被子進(jìn)程繼承
export 變量名
#比較文件的命令
vimdiff 1.txt 2.txt 3.txt ....
命令的查找路徑與順序
$PATH環(huán)境變量設(shè)置命令搜索路徑
#輸出當(dāng)前命令搜索路徑的設(shè)置
echo $PATH
#./程序名 表示執(zhí)行當(dāng)前目錄下的指定程序
$PATH中臨時(shí)添加自定義路徑,用冒號(hào)連接路徑
PATH=$PATH:/home/shiyanlou/Code
如果永久添加需要修改配置文件
zsh是.zshrc bash是.bashrc
本次修改用戶目錄下的文件
$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
變量修改
變量設(shè)置方式 | 說明 |
---|---|
${變量名#匹配字串} | 從頭向后開始匹配,刪除符合匹配字串的最短數(shù)據(jù) |
${變量名##匹配字串} | 從頭向后開始匹配,刪除符合匹配字串的最長(zhǎng)數(shù)據(jù) |
${變量名%匹配字串} | 從尾向前開始匹配届惋,刪除符合匹配字串的最短數(shù)據(jù) |
${變量名%%匹配字串} | 從尾向前開始匹配,刪除符合匹配字串的最長(zhǎng)數(shù)據(jù) |
${變量名/舊的字串/新的字串} | 將符合舊字串的第一個(gè)字串替換為新的字串 |
${變量名//舊的字串/新的字串} | 將符合舊字串的全部字串替換為新的字串 |
變量的修改有以下幾種方式:
變量設(shè)置方式 | 說明 |
---|---|
${變量名#匹配字串} | 從頭向后開始匹配菠赚,刪除符合匹配字串的最短數(shù)據(jù) |
${變量名##匹配字串} | 從頭向后開始匹配脑豹,刪除符合匹配字串的最長(zhǎng)數(shù)據(jù) |
${變量名%匹配字串} | 從尾向前開始匹配,刪除符合匹配字串的最短數(shù)據(jù) |
${變量名%%匹配字串} | 從尾向前開始匹配衡查,刪除符合匹配字串的最長(zhǎng)數(shù)據(jù) |
${變量名/舊的字串/新的字串} | 將符合舊字串的第一個(gè)字串替換為新的字串 |
${變量名//舊的字串/新的字串} | 將符合舊字串的全部字串替換為新的字串 |
變量刪除
可以使用unset
命令刪除一個(gè)環(huán)境變量:
$ unset temp
如何讓環(huán)境變量立即生效
$ source .zshrc
或者
$ . ./.zshrc
注意第二種方式必須指定完整的絕對(duì)或相對(duì)路徑
二瘩欺、搜索文件
與搜索相關(guān)的命令常用的有如下幾個(gè)whereis
,which
,find
,locate
。
- whereis
簡(jiǎn)單快速
whereis搜索很快拌牲,因?yàn)樗]有從硬盤中依次查找俱饿,而是直接從數(shù)據(jù)庫中查詢。whereis
只能搜索二進(jìn)制文件(-b)塌忽,man幫助文件(-m)和源代碼文件(-s)拍埠。
- locate
快而全
通過"/var/lib/mlocate/mlocate.db"數(shù)據(jù)庫查找,系統(tǒng)會(huì)使用定時(shí)任務(wù)每天自動(dòng)執(zhí)行updatedb
命令更新一次該數(shù)據(jù)庫土居,有時(shí)需要手動(dòng)執(zhí)行一次updatedb
命令將新的文件數(shù)據(jù)添加進(jìn)數(shù)據(jù)庫枣购,它可以用來查找指定目錄下的不同文件類型,可以遞歸子目錄進(jìn)行查找嬉探,如查找 /etc 下所有以 sh 開頭的文件:
$ locate /etc/sh$ locate /home/shiyanlou/Code/*.txt
經(jīng)測(cè)試好像locate 后面要跟絕對(duì)路徑,另外"*"必須用*來轉(zhuǎn)義
-c 是僅統(tǒng)計(jì)數(shù)目 -i 是不區(qū)分大小寫
-
which
小而精
它只從PATH
環(huán)境變量指定的路徑中去搜索命令
$ which man
-
find
精而細(xì) find 命令非常強(qiáng)大,最好看專門的資料 推薦鏈接http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html http://www.jz123.cn/text/1720453.html 以下列出幾個(gè)例子
#查找系統(tǒng)中所有文件名中含D且在第三位的.txt文件
find / -name \?\?D\*.txt
#顯示結(jié)果含有權(quán)限不夠的信息,可以如下屏蔽
find / -name \?\?D\*.txt 2>/dev/null
#還可以加sudo執(zhí)行
#另外棉圈,文件名加引號(hào)涩堤,可以直接用?或*,不用轉(zhuǎn)義
#查找大小在10k-20k之間的*.txt
find / -name '*.txt' -size +10k -size -20k
#查找空目錄和空文件
find . -empty
#查找實(shí)驗(yàn)樓組的文件
find . -group shiyanlou
#在/tmp目錄中查找大于100000000字節(jié)并且在48小時(shí)內(nèi)修改的某個(gè)文件
find /tmp -size +10000000c -and -mtime +2
#在/tmp目錄中查找所有不屬于panda的文件
find /tmp ! -user panda
#查找屬于shiyanlou用戶的文件并顯示文件信息
find . -user shiyanlou -ls
#刪除找到的*.txt
find . -name '*.txt' -exec rm {} \;
#以上 \; 是為了轉(zhuǎn)義;字符