一、提问在平时的工作中,我们经常会遇到设置环境的问题,比如将应用程序的执行路径添加到PATH中,方便程序的执行;更多在Linux中与shell打交道时,很多通过shell启动的应用程序或服务都需要设置环境变量。比如需要设置一些环境变量才能启动es,那么Shell到底是什么呢?Shell与环境变量有什么关系?2、壳牌是什么?我们知道计算机的CPU只能执行以二进制表示的机器语言。在计算的早期,只有少数人可以使用二进制语言来操作计算机,这对我们所有人来说都很难阅读和理解。编制完成,大大提高了计算机的使用门槛。后来开发了操作系统,在操作系统中提供了一个叫做Shell的特殊程序。Shell接收用户输入的英文指令,传递给操作系统的内核执行。从开发语言的角度来看,shell脚本是一种供计算机用户使用的脚本语言,而Shell程序就是这种脚本语言的解释器。Shell不属于系统内核的一部分,而是利用系统内核来执行程序、创建文件等。Shell、普通应用程序、操作系统内核的关系如图3所示。什么是变量像其他高级别的开发语言,Shell中的数据也需要存储在变量中。与任何程序一样,Shell使用变量来控制其行为,您可以通过更改它们的值来更改Shell和其他程序的行为。同样,变量也有自己的命名规则。变量名称区分大小写。按照惯例,环境变量的名称应该大写。给一个变量赋多个值时,必须用冒号隔开:。等号=两边没有空格。变量可以分为两类,环境变量和shell变量。环境变量是在系统范围内可用的变量,由所有派生的子进程和shell继承。Shell变量是仅适用于当前Shell实例的变量。四、变量的各种操作1、查看环境变量使用printenv查看环境变量的值。如果不写变量名会显示所有环境变量mango@mango:~$printenvHOME/home/mangomango@mango:~$printenvSHELL=/bin/bashSESSION_MANAGER=local/mango:@/tmp/.ICEunix/1441,unix/mango:/tmp/.ICE-unix/1441QT_ACCESSIBILITY=1COLORTERM=truecolorXDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdgXDG_MENU_PREFIX=gnome-GNOME_DESKTOP_SESSION_ID=this-is-deprecatedGTK_IM_GULE=encitUSXLAN=fuleenQT4_IM_MODULE=fcitxLC_ADDRESS=zh_CN.UTF-8GNOME_SHELL_SESSION_MODE=ubuntuLC_NAME=zh_CN.UTF-8SSH_AUTH_SOCK=/run/user/1000/keyring/sshXMODIFIERS=@im=fcitxDESKTOP_SESSION=ubuntu可以同时打印多个变量mango@mango:~$printenvUSERPWDmango/home/mango也可以使用echo打印变量的值,但是需要在变量前加上$mango@mango:~$echo$USERmangomango@mango:~$echo$USER$PWDmango/home/芒果2。搜索特定变量可以使用grep命令查找所有包含某个字符串的变量mango@mango:~$printenv|grepUSERUSERNAME=mangoUSER=mango还有一个set命令,除了打印环境变量,还包括shell变量和shell函数mango@mango:~$set|grepUSERUSER=mangoUSERNAME=mangolocal-adirs=(${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions);3.定义变量使用命令行设置变量最简单的方法是键入它的名字并直接赋值mango@mango:~$shellVar=hellomango@mango:~$echo$shellVarhello定义一个shell变量,这样可以可以用set查看,不能用printenv查看mango@mango:~$printenvshellVarmango@mango:~$set|grepshellVarshellVar=hellopromotershell无法打印变量mango@mango:~$echo$shellValhellomango@mango:~$bashmango@mango:~$echo$shellValmango@mango:~$4的值。导出Shell变量我们可以使用export来导出Shell变量,并升级为环境变量,可以使用printenv,在子shell中打印mango@mango:~$exportshellValmango@mango:~$printenvshellValhellomango@mango:~$bashmango@芒果:~$printenvshellValhello5。修复环境变量,直接使用export导出的环境变量只保存在当前session的内存中,所以关闭Shell后会丢失;我们需要将环境变量添加到配置文件中。如果只为当前用户设置,则需要编辑.bashrc文件sudonano~/.bashrc在文件末尾添加如下语句exportshellVal=hello保存退出,重启shell后,修改生效。如果你想在当前会话中应用更改,你需要使用source命令source~/.bashrc如果你想为所有用户设置环境变量,你需要在/etc/profile.d文件夹中创建一个变量文件mango@mango:~$sudotouch/etc/profile.d/mango_env.shmango@mango:~$sudochmod+x/etc/profile.d/mango_env.shmango@mango:~$sudonano/etc/profile.d/mango_env.sh在文件末尾添加如下语句exportshellVal=hello保存退出,重启shell后,修改生效。如果你想在当前会话中应用更改,你需要使用source命令source/etc/profile.d/mango_env.sh
