bash shell系统中的变量无需声明可以直接调用
变量引用:$var_name /${var_name}
变量类型:
本地变量:作用域仅为当前shell进程;
环境变量:作用域为当前shell进程及其子进程;
局部变量:作用域仅为某代码片断(函数上下文);
位置参数变量:当执行脚本的shell进程传递的参数;
特殊变量:shell内置的有特殊功用的变量;
$?:判断上一条命令的执行结果
0:表示成功,1~255:表示失败
引号的特殊含义:
单引号'':强引用,所有字符原样输出,不转义
双引号"":弱引用;输出引号内所有内容;若内容中有变量、特殊字符转义等会解析结果,然后在输出
反引号``:用于引用命令结果如同$(..)
本地变量:仅在一个shell中有效,子进程不生效
用法:var_name=value
查看变量:set | grep var_name
撤销变量:unset var_name
环境变量:在当前shell的所有子shell中生效
用法:
export name=value
name=value
export name
declare -x name=value
name=value
declare -x name
只读变量:只读变量无法重新赋值,并且不支持撤销;存活时间为当前shell进程的生命周期,随shell进程终止而终止;
用法:
declare -r var_name=value
readonly var_name=value
查看环境变量命令:export, declare -x, printenv, env,set
但当再重新打开一个终端是,环境变量无效只在当前shell生效,需要定义在全局环境变量配置文件中才会生效。在登录系统时并启动一个shell,一般会加载配置文件中的环境变量。加载的文件跟登录的方式相关。
bash配置文件分为两类:
-profile:为交互式登录shell进程提供配置
全局:对所有用户都生效;
/etc/profile
/etc/profile.d/*.sh
用户个人:仅对当前用户有效;
~/.bash_profile
用途:
1、用于定义环境变量;
2、运行命令或脚本;
-bashrc:为非交互式登录shell进程提供配置
全局:
/etc/bashrc
用户个人:
~/.bashrc
用途:
1、定义本地变量;
2、定义命令别名;
登录与非登录shells:
登录shells:
1.任何通过用户登录的shell包括图形界面登录
2.su -
非登录shells:
1.su
2.图形界面下的终端
3.脚本
4.其他bash实例
下面通过在xuetong用户中的四个配置文件中添加echo "/path-dir"来验证加载的文件:/etc/profile,/etc/bashrc,~/.bahs_profile,~/.bashrc;
配置文件的读取顺序:
所以如果希望在登录shell和非登录shell都能读到的文件应将变量设置在:~/.bashrc,/etc/bashrc
如何让配置文件中变量生效
通过命令行重复定义一次;
让shell进程重读配置文件;
source /path/conf_file
. /path/conf_file