解釋:環境變量 $-
裏若是有字符 i
的話,表明是一個 interactive shell,不然是 non-interactive mode,咱們能夠簡單測試一下:shell
$> [[ $- == *i* ]] && echo "Interactive" || echo "Not interactive" Interactive $> bash -c '[[ $- == *i* ]] && echo "Interactive" || echo "Not interactive" ' Not interactive
用戶登陸到Linux系統後,系統將啓動一個用戶shell。在這個shell中,可使用shell命令或聲明變量,也能夠建立並運行 shell腳本程序。運行shell腳本程序時,系統將建立一個子shell。此時,系統中將有兩個shell,一個是登陸時系統啓動的shell,另外一 個是系統爲運行腳本程序建立的shell。當一個腳本程序運行完畢,它的腳本shell將終止,能夠返回到執行該腳本以前的shell。從這種意義上來 說,用戶能夠有許多 shell,每一個shell都是由某個shell(稱爲父shell)派生的。
在子 shell中定義的變量只在該子shell內有效。若是在一個shell腳本程序中定義了一個變量,當該腳本程序運行時,這個定義的變量只是該腳本程序內 的一個局部變量,其餘的shell不能引用它,要使某個變量的值能夠在其餘shell中被改變,可使用export命令對已定義的變量進行輸出。 export命令將使系統在建立每個新的shell時定義這個變量的一個拷貝。這個過程稱之爲變量輸出。 bash
在咱們使用shell的同時,咱們應該清楚shell的一些配置文件的存放位置,按照範圍來分,能夠分爲兩種:
(1)全局配置:測試
/etc/profile /etc/profile.d/*.sh /etc/bashrc
(2)我的配置:spa
~/.bash_profile
~/.bashrc
咱們能夠根據shell是不是交互式和shell是不是登陸式這兩個維度,來對shell進行分類code
交互式模式就是在終端上執行,shell等待你的輸入,而且當即執行你提交的命令。這種模式被稱做交互式是由於shell與用戶進行交互。這種模式也是大多數用戶很是熟悉的:登陸、執行一些命令、退出。當你退出後,shell也終止了。
shell也能夠運行在另一種模式:非交互式模式,以shell script(非交互)方式執行。在這種模式 下,shell不與你進行交互,而是讀取存放在文件中的命令,而且執行它們。當它讀到文件的結尾EOF,shell也就終止了。blog
登陸shell:是須要用戶名、密碼登陸後才能進入的shell(或者經過--login」選項生成的shell)。非登陸shell:固然就不須要輸入用戶名和密碼便可打開的Shell,例如:直接命令「bash」就是打開一個新的非登陸shell,在Gnome或KDE中打開一個「終端」(terminal)窗口程序也是一個非登陸shell。
執行exit命令,退出一個shell(登陸或非登陸shell);
執行logout命令,退出登陸shell(不能退出非登陸shell)。
ip