当shell脚本以非交互的方式运行时,它会先查找环境变量ENV,该变量指定了一个环境变量(通常是.bashrc),然后从该环境变量文件开始执行,当读取了env文件后,shell才开始执行shell脚本的内容
profile文件
profile(/etc/profile),用于设置系统级的环境变量和启动程序,在这个文件下配置会对所有用户生效。
当用户登录(login)时,文件会被执行,并从/etc/profile.d目录的配置文件中查找shell设置。一般不建议在/etc/profile文件中添加环境变量,因为在这个文件中添加的设置会对所有用户起作用。当必须添加时,我们可以按以下方式添加:添加一个HOST值为linuxprobe.com的环境变量:
export HOST=linuxprobe.com
添加时,可以在行尾使用;号,也可以不使用。一个变量名可以对应多个变量值,多个变量值需要使用:进行分隔。添加环境变量后,需要重新登录才能生效,也可以使用source命令强制立即生效:source /etc/profile 查看是否生效可以使用echo命令:
$ echo $HOST
linuxprobe.com
. bashrc文件
bashrc文件用于配置函数或别名。bashrc文件有两种级别:
系统级的位于/etc/bashrc、用户级的位于~/.bashrc,两者分别会对所有用户和当前用户生效。
bashrc文件只会对指定的shell类型起作用,bashrc只会被bash shell调用。
bash_profile文件
bash_profile只对单一用户有效,文件存储位于~/.bash_profile,该文件是一个用户级的设置,可以理解为某一个用户的profile目录下。这个文件同样也可以用于配置环境变量和启动程序,但只针对单个用户有效。和profile文件类似,bash_profile也会在用户登录(login)时生效,也可以用于设置环境变量。但与profile不同,bash_profile只会对当前用户生效。
shell脚本运行的三种方式:
(1) bash script-name 或 sh script-name
当前脚本文件本身没有可执行权限(文件X位为-号,或者文件开头没有指定解释器)
(2) path/script-name 或 . /script-name (当前路径下执行脚本)
文件的脚本权限改为可执行(755)
(3) source script-name 或 .script-name
类似于php中include,这篇shell的内容将作为所有父shell脚本 父进程中的一部分去运行。因此source或者. 可以将自身脚本中的变量或者函数返回值传递到父shell脚本中使用