[root@stu ~]# cat /root/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
??.?~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
請問/root/.bash_profile這個文件中
if[-f ~/.bashrc]; then
??????? .~/.bashrc
fi
這個語句是什么意思?
普通的shell腳本
-f ~/.bashrc? 判斷home目錄的.bashrc是普通文件的話 返回真
. ~/.bashrc 等于source ~/.bashrc? 讓home目錄下的.bashrc里的設(shè)置生效
關(guān)于文件的判斷如下
-r file 用戶可讀為真
-w file 用戶可寫為真
-x file 用戶可執(zhí)行為真
-f file 文件為正規(guī)文件為真
-d file 文件為目錄為真
-c file 文件為字符特殊文件為真
-b file 文件為塊特殊文件為真
-s file 文件大小非0時為真
-t file 當(dāng)文件描述符(默認(rèn)為1)指定的設(shè)備為終端時為真?
source命令用法:
source FileName
作用:在當(dāng)前bash環(huán)境下讀取并執(zhí)行FileName中的命令。
注:該命令通常用命令“.”來替代。
如:source .bash_rc 與?.?.bash_rc 是等效的。
source命令(從 C Shell 而來)是bash shell的內(nèi)置命令。點命令,就是個點符號,(從BourneShell而來)是source的另一名稱。
同樣的,當(dāng)前腳本中配置的變量也將作為腳本的環(huán)境,source(或點)命令通常用于重新執(zhí)行剛修改的初始化文檔,如 .bash_profile 和 .profile 等等。例如,假如在登錄后對 .bash_profile 中的 EDITER 和TERM 變量做了修改,則能夠用source命令重新執(zhí)行 .bash_profile 中的命令而不用注銷并重新登錄。
比如您在一個腳本里export $KKK=111 ,假如您用./a.sh執(zhí)行該腳本,執(zhí)行完畢后,您運行 echo $KKK,發(fā)現(xiàn)沒有值,假如您用source來執(zhí)行 ,然后再echo,就會發(fā)現(xiàn)KKK=111。因為調(diào)用./a.sh來執(zhí)行shell是在一個子shell里運行的,所以執(zhí)行后,結(jié)構(gòu)并沒有反應(yīng)到父shell里,但是source不同他就是在本shell中執(zhí)行的,所以能夠看到結(jié)果。
這兩個命令都以一個腳本為參數(shù),該腳本將作為當(dāng)前shell的環(huán)境執(zhí)行,即不會啟動一個新的子進(jìn)程。所有在腳
本中設(shè)置的變量將成為當(dāng)前Shell的一部分。同樣的,當(dāng)前腳本中設(shè)置的變量也將作為腳本的環(huán)境,source(或點)命令通常用于重新執(zhí)行剛修改的初始化文件,如 .bash_profile 和 .profile 等等。
shell編程中的命令有時和C語言是一樣的。&&表示與,||表示或。把兩個命令用&&聯(lián)接起來,如make mrproper && make menuconfig,表示要第一個命令執(zhí)行成功才能執(zhí)行第二個命令。對執(zhí)行順序有要求的命令能保證一旦有錯誤發(fā)生,下面的命令不會盲目地繼續(xù)執(zhí)行。