国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統(tǒng) > 正文

iredmail安裝腳本分析(一)---iRedmail.sh

2024-06-28 14:32:15
字體:
來源:轉載
供稿:網友


iredmail是一套以postfix為核心的整合郵件系統(tǒng)的安裝腳本,可以達到快速部署郵件服務器的目的。為了讓自己不遺忘shell的語法,所以閑來無事,學習一下他的代碼。

我從官網下載他的最新版,解壓后,結構如下:

111111111

iRedMail.sh  是開始安裝的啟動文件,執(zhí)行bash iRedMail.sh 后就開始安裝,我們從這個文件看起。

tmPRootdir="$(dirname $0)"
 
dirname的用法是:
 
(1)  帶全路徑的,例:aguo@auto-test:~> dirname /home/aguo/insert.sql 
         /home/aguo #獲得文件所在目錄
 
(2)  僅僅是文件名的,例:aguo@auto-test:~> dirname Environment 

         .   表示路徑就是當前目錄

$0 在shell中的意思是當前執(zhí)行腳本的名稱
$() 在shell中起到命令替換的作用,這樣tmprootdir的值就為當前執(zhí)行腳本的目錄,在下面要對此目錄進行判斷

一個命令涉及了3個知識點,看來學習還是能加深印象的。

第二個命令如下:

echo ${tmprootdir} | grep '^/' >/dev/null 2>&1
 
| 管道符 ,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。連續(xù)使用管道意味著第一個命令的輸出會作為 第二個命令的輸入,第二個命令的輸出又會作為第三個命令的輸入,依此類推。
 
grep ‘^/’  查找以/開頭的,grep的正則表達式用法
 
>/dev/null 2>&1  :
 
可以將/dev/null看作"黑洞". 它非常等價于一個只寫文件. 所有寫入它的內容都會永遠丟失. 而嘗試從它那兒讀取內容則什么也讀不到
 
1 表示stdout標準輸出,系統(tǒng)默認值是1,所以">/dev/null"等同于"1>/dev/null"
 
2 表示stderr標準錯誤
 
& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1
 
很多shell腳本里都會用到,實際作用就是不讓輸出任何內容

這個命令的整體作用就是為了查找變量tmprootdir的值中以/開頭的,下面會根據(jù)狀態(tài)碼進行判斷

if [ X"$?" == X"0" ]; then    export ROOTDIR="${tmprootdir}"else    export ROOTDIR="$(pwd)"fi
 
 
 
export  export命令可以用來設置或顯示環(huán)境變量。在shell中,當一個變量創(chuàng)建時,只會在當前的shell中有 效,之后創(chuàng)建的子進程不會有該變量。而命令export可以將一個shell變量變成環(huán)境變量,在隨后創(chuàng)建的子進程中也能訪問到該環(huán)境變量,但是子進程在 修改了環(huán)境變量的值之后,父進程并不能知道,因為子進程將復制父進程的環(huán)境變量。因此,當shell退出時,那些在該shell中export出來的環(huán)境 變量也會消失。
 
這樣的話,接下來的腳本中,ROOTDIR的值就會保留下來
 
[ X"$?" == X"0" ]  中的X 是為了防止$?為空的情況下,而設立的,不過網上資料很少提到
$?  執(zhí)行命令后返回的狀態(tài),成功為 0 失敗為其他值
if else 判斷語句   根據(jù)$?的問號的值,來判斷腳本的絕對路徑 
這個判斷是針對多系統(tǒng)的,有的系統(tǒng)里得到的dirname里可能會有絕對路徑的值,所以echo ${tmprootdir} | grep '^/' >/dev/null 2>&1,如果有值的話,就可以直接判斷腳本的絕對路徑;如果沒值的話,就用pwd重新獲得。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 武宣县| 双柏县| 舟曲县| 平武县| 锡林浩特市| 新民市| 安国市| 眉山市| 昌邑市| 阳新县| 通许县| 卢龙县| 库伦旗| 娄烦县| 宣化县| 铁岭县| 新营市| 长治市| 新津县| 永丰县| 新闻| 济源市| 通化市| 淮南市| 荣昌县| 彩票| 六枝特区| 新安县| 湖州市| 阿城市| 龙井市| 鲁山县| 榆树市| 玉溪市| 常德市| 泗洪县| 肇东市| 邵阳县| 日照市| 宕昌县| 丰台区|