与登陆Shell相关的文件
当Linux运行级别为3或者为5这两种情况下登陆时,都需要输入用户名和密码。用户登录时Bash将会使用以下初始化文件和脚本:
/etc/profile——系统初始化文件,定义了一些环境变量,由登陆Shell调用执行。
/etc/bash.bashrc或/etc/bashrc——其文件名根据不同的Linux发行版而异,每个交互Shell的系统的启动脚本,定义了一些函数和别名。
/etc/bash.logout——系统级的登陆Shell清理脚本,当登陆Shell退出时执行。部分Linux发行版默认没有此文件。
$HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile——用户个人初始化脚本,由登陆Shell调用执行。这三个脚本只有一个会被执行,按照此顺序查找,第一个存在的将被执行。
$HOME/.bashrc——用户个人的每个交互式Shell启动脚本。
$HOME/.bash_logout——用户个人的登陆Shell清理脚本,当登陆Shell退出时执行。
$HOME/.iputrc——用户个人的由readline使用的启动脚本,定义了处理某些情况下的键盘映射。
Bash启动脚本
在用户登录时自动执行的脚本主要用于设置一些环境,例如设置JAVA_HOME的路径。其中的一些脚本被登陆Shell调用,登陆Shell是你登陆系统时最先执行的Shell。它设置一些环境,然后把这些环境授予非登陆Shell。
用户登录登录Shell会调用如下脚本:
/etc/profile——当用户在运行级别3登陆系统时首先运行。
/etc/profile.d——当/etc/profile运行时,会调用该目录下的一些脚本
$HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile——在/etc/profile运行后,第一个存在的被运行。
$HOME/.bashrc——上述脚本的中一个运行后即调用此脚本。
/etc/bash.bashrc或/etc/bashrc——由$HOME/.bashrc调用运行
当一个交互式的非登陆Shell启动时,Bash将读取并运行如下脚本:
$HOME/.bashrc——如果此文件存在即被运行。
/etc/bashrc——将被$HOME/.bashrc调用运行。
/etc/profile.d——此目录下的脚本将被/etc/bashrc或/etc/bash.bashrc调用运行。
Bash启动脚本主要设置的环境有:
设置环境变量PATH和PS1
通过变量EDITOR设置默认的文本编辑器
设置默认的umask(文件或目录的权限属性)
覆盖或移除不想要的变量或别名
设置别名
加载函数
Bash退出脚本
当登陆Shell退出时,如果$HOME/.bash_logout脚本存在,Bash会读取并执行脚本内容,此脚本主要作用:
使用clear命令清理你的终端屏幕输出
移除一些临时文件
自动运行一些命令或脚本等
Shell中变量的类型
Linux Shell中的变量可以被指定为任意的数据类型。Shell有两种变量类型:系统变量(环境变量)和用户自定义的变量(本地变量或Shell变量)。
常用的系统变量(环境变量):
系统变量 | 含义 |
BASH_VERSION | 保存Bash实例的版本 |
DISPLAY | 设置X display名字 |
EDITOR | 设置默认的文本编辑器 |
HISTFILE | 保存命令历史的文件名 |
HISTFILESIZE | 命令历史文件所能包含的最大行数 |
HISTSIZE | 记录在命令历史中的命令数 |
HOME | 当前用户的主目录 |
HOSTNAME | 你的计算机的主机名 |
IFS | 定义Shell的内部字段分隔符,一般是空格、制表符和换行符 |
PATH | 搜索命令的路径。它是以冒号分割的目录列表。Shell会在PATH环境变量指定的全部路径中搜索任何匹配的可执行文件 |
PS1 | 你的提示符设定 |
PWD | 当前工作目录。由cd命令设置 |
SHELL | 设置登陆Shell的路径 |
TERM | 设置你的登陆中断类型 |
TMOUT | 用于设置Shell内建命令read的默认超时时间,单位为秒。在交互式的Shell中,此变量的值作为发出命令后等待用户输入的秒数,如果没有用户输入将会自动退出 |
添加上述变量到Home目录下的初始文件中,比如~/.bash_profile文件。这样在登陆时,这些变量会被自动设置为你需要的值。
查看当前Shell的所有系统变量:
$ env
或者:
$ printenv
用户自定义的变量:
即由用户创建和维护的变量。变量可以使用任何有效地变量名来定义。变量必须以字母或下划线字符"_"开头,后面跟字母、数字或下划线字符,第一个字符不能为数字。不要用特殊字符命名变量名(?、*等),变量名大小写敏感。在Shell中,第一次使用某变量名时,实际上就定义了变量。语法:
varName=varValue
Shell默认赋值运算是字符串赋值运算:
$ var=1 $ var=$var+1 $ echo $var 1+1
在Bash中,算数运算使用let命令:
$ let var=2+1 $ echo $var 3
将一个变量赋值给另一个变量:
$ a=3 $ b=$a $ echo $b 3