首页 > 代码库 > 《学习bash》笔记--定制用户环境

《学习bash》笔记--定制用户环境

1. .bash_profile、.bash_logout和.bashrc文件

当用户和退出一个新的shell时,文件.bash_profile、.bash_logout和.bashrc文件被bash所读取。在用户每次登陆到系统时,
.bash_profile文件被读取,可以对.bash_profile文件进行编辑,但是知道退出并在此登录后,该文件才会被重新读取,你编辑
的新内容才会生效,或者使用source命令:
source ./bash_profile
bash允许有.bash_profile的两个同义文件:来自C shell的.login的.bash_login以及来源于Bourne shell和Korn shell
文件.profile的.profile。登录时三者只有一个被读取,如果用户根目录下.bash_profile不存在,则bash查找.bash_login,
如果它也不存在,则查找.profile。(在我使用的ubuntu系统上,用户根目录只有.profile文件,内容为执行.bashrc文件)

.bash_profile只被登录shell读取并执行。如果你通过在命令行执行bash启动一个新的shell,它就会视图读取.bashrc中
的命令。

文件.bash_logout在每次登录shell退出时被读取并执行。

2.别名alias

使用alias来定义别名,如:
alias la=‘ls -a’
一般使用单引号将别名内容全部包含起来,特别是内容中包含空格等特殊字符时。
使用unalias来删除别名:
unalias la
如果要查看某一个别名的具体内容,可以使用以下命令:
alias la

最后,别名只在当前的bash范围内有效,如果进入了子bash,则刚才定义的别名将消失。

3.选项

shell选项能够改变shell的行为,它的取值为on或者off。和选项有关的命令是set -o optionname和set +o optionname。
可以使用一个set命令改变多个选项,方式是在每个optionname前加一个-o或+o。其中-符号打开命令的选项,+符号则
关闭它。

大多数选项都有一个字母的缩写,可用于替代set -o命令,例如,set -o noglob可缩写为set -f。

可以键入set -o查看所有选项及其设置情况。

最后,选项只在当前的bash范围内有效,如果进入了子bash,则刚才设置的选项无效。

4.shopt

bash 2.0引入配置shell行为的新内置命令:shopt。此内置命令替换原始使用环境变量和set命令所完成的选项配置功能。

shopt -o 功能是set命令部分功能的复制,此命令格式是shopt 选项 选项名。
常用选项说明如下:
-p 不带选项名则显示所有的选项设置情况;带选项名则显示指定选项的设置情况。
-s 不带选项名则设置所有的选项;带选项名则设置指定选项。
-u 不带选项名则取消设置所有选项;带选项名则取消设置指定选项。

同样,shopt设置的选项只在当前bash范围内有效,如果进入子bash,则刚才设置的选项无效。

5.shell变量

5.1.自定义变量和引用

shell中可以加入自己的变量,按照惯例,内置变量名均为大写。定义变量的语法如下:
varname=value
在等号两边必须没有空格。如果取值多于一个单词,必须用引号括起来。要在一个命令中使用变量值,在其名字前加符号$,
可以使用unset varname删除变量,所有不存在的变量均被假定为null,亦即空字符串“”。
root@virtual-machine:~# words="i am a human"
root@virtual-machine:~# echo $words
i am a human
root@virtual-machine:~# unset words
root@virtual-machine:~# echo $words

root@virtual-machine:~#

5.2.内置变量

下面是一些常用的bash内置变量,可以使用echo $变量名进行查看。

PPID : 执行当前bash的用户的进程ID

PWD : 目前的工作目录(Print Working Directory。
OLDPWD : 上一个工作目录,可以使用 cd -在最近两个目录间切换
REPLY : 当read命令没有参数时,直接设在REPLY上。
UID : 登录系统的用户ID
EUID : 当前用户的ID

BASH : Bash的完整路径。

BASH_VERSION : Bash版本。
SHLVL : bash的层数,每执行一次bash命令,就自动加1
RANDOM : 产生一个随机数,并且不需要种子
SECONDS : 当前shell从开始到现在运行的秒数
OPTARG : getopts处理的最後一个选项参数
OPTIND : 下一个要由getopts所处理的参数号码
HOSTTYPE: 机器种类

MACHTYPE:机器类型

OSTYPE : 作业系统名称。
IFS : 默认分隔符
PATH : 命令自动寻找的路径,类似于windows的环境变量
HOME : 当前用户的“家”目录,可以用 ~ 代替
CDPATH : cd命令的搜寻路径

LINENO : 显示刚执行的命令是第几个命令,登录后执行的命令从1开始,每执行一个就自动加1
HISTCMD : 当前记录的历史命令的个数,等同于 history|wc -l
ENV : 如果这个参数被设定,每次有shell script被执行时,将会执行它所设定的档名做为环境设定
MAIL : 如果这个参数被设定,而且MAILPATH没有被设定,那麽有信件进来时,bash会通知使用者。
MAILCHECK : 设定多久时间检查邮件一次
MAILPATH : 一串的邮件检查路径
MAIL_WARNING : 如果有设定的话,邮件被读取後,将会显示讯息
PS1 : 一级提示符,是设置我们命令提示符(普通用户为 $ ,root 为#)之前的内容的变量
PS2 : 二级提示符,设置换行或执行do 等命令后的提示符,默认为>
PS3 : select命令所使用的提示符提示讯息。
PS4: 使用set -x 或 bash -x 执行脚本时,追踪脚本详细运行过程的提示符,默认为+
HISTSIZE : 记录的历史命令的条数
HISTFILE : 记录历史命令的文件,默认是~/.bash_history
HISTFILESIZE : 历史命令文件的最大值
OPTERR: 如果设为1,bash会显示getopts的错误
PROMPT_COMMAND : 该变量的值是一个或一组命令,如果设置了的话,每次执行命令前都先执行这里的命令
IGNOREEOF : 将EOF值当成输入,内定为10。
TMOUT: 超时时间,如果用户在超过该变量设置的时间内没有执行任何命令,就自动logout
FCEDIT : fc默认的编辑器


6.环境变量

默认情况下,只有一种食物对所有的子进程已知,即称为环境变量的特定类型shell变量。上面的介绍的一些内置变量实际
上就是环境变量:HOME,MAIL,PATH等。

任何变量都可以变成环境变量。首先它必须向平常那样被定义,然后必须使用下面命令将其导出:
export varname
也可以将变量赋值和导出结合到一个语句中:
export myname=alice
也可以定义变量为特定子进程内的变量,方式是在命令前面加上变量赋值,如:
varname=value command