1、提出問題shell
在平時的工做中,咱們常常會碰到設置環境的問題,例如將應用的執行路徑添加到PATH中,方便程序的執行;在Linux中更多的時候是跟shell打交道,不少經過shell啓動的應用或者服務都須要設置環境變量,例如啓動es須要設置一些環境變量,那麼Shell究竟是什麼?Shell又跟環境變量有什麼關係?ubuntu
2、什麼是Shellbash
咱們知道計算機的CPU只能執行二進制表示的機器語言,在計算的早期,只有極少數的人才能夠使用二進制語言來操縱計算機,這對咱們全部人來講都是很難閱讀和編寫的,極大的提升了計算機的使用門檻。後來發展出來了操做系統,並在操做系統中提供了一個稱爲Shell的特殊程序,Shell接收用戶輸入的的英語指令,並將它將傳遞給操做系統的內核進行執行。從開發語言的角度上來講,shell腳本是一種面向計算機用戶的腳本語言,而Shell程序就是這種腳本語言的解釋器。Shell不是系統內核的一部分,可是使用系統內核執行程序,建立文件等。
shell、普通應用程序及操做系統內核的關係以下圖ssh
3、什麼是變量函數
跟其餘的高級開發語言同樣,Shell裏邊的數據也須要保存在變量中。像任何程序同樣,Shell使用變量來控制其行爲,而且能夠經過更改其值來更改Shell和其餘程序的行爲。
一樣變量也有本身的命名規則this
4、變量的各類操做操作系統
使用printenv來查看環境變量的值,若是不寫變量名字,則顯示出全部的環境變量命令行
mango@mango:~$ printenv HOME /home/mango mango@mango:~$ printenv SHELL=/bin/bash SESSION_MANAGER=local/mango:@/tmp/.ICE-unix/1441,unix/mango:/tmp/.ICE-unix/1441 QT_ACCESSIBILITY=1 COLORTERM=truecolor XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg XDG_MENU_PREFIX=gnome- GNOME_DESKTOP_SESSION_ID=this-is-deprecated GTK_IM_MODULE=fcitx LANGUAGE=en_US:en QT4_IM_MODULE=fcitx LC_ADDRESS=zh_CN.UTF-8 GNOME_SHELL_SESSION_MODE=ubuntu LC_NAME=zh_CN.UTF-8 SSH_AUTH_SOCK=/run/user/1000/keyring/ssh XMODIFIERS=@im=fcitx DESKTOP_SESSION=ubuntu
能夠同時打印多個變量unix
mango@mango:~$ printenv USER PWD mango /home/mango
也能夠使用echo打印變量的值,可是須要在變量前邊加上$code
mango@mango:~$ echo $USER mango mango@mango:~$ echo $USER $PWD mango /home/mango
能夠使用grep命令查找包含某個字符串的全部變量
mango@mango:~$ printenv | grep USER USERNAME=mango USER=mango
還有一個set命令,除了能夠打印環境變量,同時也包括Shell變量和Shell函數
mango@mango:~$ set | grep USER USER=mango USERNAME=mango local -a dirs=(${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions);
使用命令行設置變量的最簡單方法是鍵入其名稱並直接賦值
mango@mango:~$ shellVar=hello mango@mango:~$ echo $shellVar hello
這樣定義的是Shell變量,能夠使用set查看,可是沒法使用printenv查看
mango@mango:~$ printenv shellVar mango@mango:~$ set | grep shellVar shellVar=hello
啓動子shell沒法打印變量的值
mango@mango:~$ echo $shellVal hello mango@mango:~$ bash mango@mango:~$ echo $shellVal mango@mango:~$
咱們能夠使用export來導出Shell變量,將其提高爲環境變量,這是就能夠使用printenv及在子shell裏打印
mango@mango:~$ export shellVal mango@mango:~$ printenv shellVal hello mango@mango:~$ bash mango@mango:~$ printenv shellVal hello
直接使用export導出的環境變量,只是保存在當前回話的內存中,因此關閉Shell後就會丟失;咱們須要將環境變量添加到配置文件中。
若是隻爲當前用戶設置,須要編輯.bashrc文件
sudo nano ~/.bashrc
在文件末尾添加下邊的語句
export shellVal=hello
保存並退出,從新啓動外殼程序後,將應用更改。若是要在當前會話應用更改,須要使用source命令
source ~/.bashrc
若是要爲全部用戶設置環境變量,須要在/etc/profile.d文件夾中建立一個變量文件
mango@mango:~$ sudo touch /etc/profile.d/mango_env.sh mango@mango:~$ sudo chmod +x /etc/profile.d/mango_env.sh mango@mango:~$ sudo nano /etc/profile.d/mango_env.sh
在文件末尾添加下邊的語句
export shellVal=hello
保存並退出,從新啓動外殼程序後,將應用更改。若是要在當前會話應用更改,須要使用source命令
source /etc/profile.d/mango_env.sh