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