变量
变量赋值与环境
1).export:用于修改或打印环境变量
readonly:使得变量不可修改
语法:
export name[=word] ...
export -p
readonly name[=word] ...
readonly -p
主要选项:
-p:打印命令的名称以及所有被导出(只读)变量的名称与值,
这种方式可使得shell重新读取输出以便重新建立环境(只读设置)
export临时导入环境变量
$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。
编辑你的 PATH 声明,其格式为:
PATH=$PATH:PATH1:PATH 2:PATH 3: ... :PATH N
其中PATHN 为自己加上指定路径,中间用冒号隔开。环境变量更改后,在用户下次登陆时生效,如果想立刻生效,则可执行下面的语句:$ source .bash_profile
完成后,可以通过 $ echo $PATH 或者 export命令查看当前的搜索路径。
这样定制的好处在于可以避免频繁的启动位于 shell 搜索的路径之外的程序
注意:该方法添加的PATH 在终端关闭后就会消失。
实例1:export命令将新变量添加到环境中
[gz_fieldyang@ test ~]$ export -p #显示当前环境
declare -x CVS_RSH="ssh"
...
declare -x HISTSIZE="1000"
declare -xHOME="/home/gz_fieldyang"
declare -xJAVA_HOME="/usr/local/jdk"
...
declare -xPATH="/usr/local/git/bin.../home/gz_fieldyang/bin:"
...
[gz_fieldyang@ test ~]$ echo $PATH #查看当前路径
/usr/local/git/bin.../home/gz_fieldyang/bin
[gz_fieldyang@ test ~]$ PATH=$PATH:/USER/LOCAL/BIN:/THIS/IS/A/TEST#更新PATH
[gz_fieldyang@ test ~]$ export PATH #导出PATH
[gz_fieldyang@ test ~]$ export
declare -x CVS_RSH="ssh"
...
declare -xHOME="/home/gz_fieldyang"
...
declare -xPATH="/usr/local/git/bin.../home/gz_fieldyang/bin:/USER/LOCAL/BIN:/THIS/IS/A/TEST"
...
附言:
bash的配置文件
1)、全局配置与个人配置
全局配置
/etc/profile, /rtc/profile.d/*.sh,/etc/bashrc
个人配置
~/.bash_profile,~/.bashrc
2)、各配置文件解析:
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,
该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置,
/etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,
当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
~/.bashrc:该文件包含专用于你的bashshell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。
3)、profile类的文件与basrc类的文件区别:
profile类的文件:
设定环境变量
运行命令或脚本
basrc类的文件:
设定本地变量
定义命令别名
4)、shell如何读取配置文件
登录式shell如何读取配置文件
/etc/profile -->/etc/profile.d/*.sh
-->~/.bash_profile --> ~/.bashrc-->/etc/bashrc
非登录式shell如何配置文件
~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh
永久生效
可以通过编辑/etc/profile来改PATH,也可以改家目录下的.bashrc(即:~/.bashrc)
实例2:export命令将新变量添加到环境中(永久生效)
[gz_fieldyang@ test ~]$ readonly hours_per_day=24 #定义变量并赋值
[gz_fieldyang@ test ~]$ export PATH=$PATH:/usr/local/bin #更新PATH
[gz_fieldyang@ test ~]$ export PATH
[gz_fieldyang@ test ~]$ export -P
[gz_fieldyang@ test ~]$ echo $PATH
/usr/local/git/bin.../home/gz_fieldyang/bin:/usr/local/bin
[gz_fieldyang@ test ~]$ echo $hours_per_day
24
[gz_fieldyang@ test ~]$ vim /etc/profile
...
exportPATH="$PATH:/usr/local/bin"
:wq
[gz_fieldyang@ test ~]$ source /etc/profile
不报错则成功。
[gz_fieldyang@ test ~]$ vi .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
exportPATH="$PATH:/usr/local/bin"
[gz_fieldyang@ test ~]$ source .bashrc
不报错则成功。
变量可以添加到程序环境中,但是对shell或接下来的命令不会一直有效:
将该变量赋值,置于命令名称或参数前即可:
PATH=/bin:/usr/binawk '...' file1 file2
实例3:
[gz_fieldyang@ test ~]$ PATH=/bin:/usr/bin awk -F: '{print$1,$3}' /etc/passwd |tail -5
sninf_simonlau 855
sninf_tonyhung 856
gz_kinma 857
gz_fieldyang 859
sninf_kenchoi 860
[gz_fieldyang@ test ~]$ PATH=/bin:/usr/bin cat quotas
Kin_ma 102
Jones_yan 132
Field_yang 263
Will_wu282
#这个PATH值的改变仅针对单个awk命令的执行,任何接下来的命令,所看到的都是在他们环境中PATH的当前值
2)env
语法:
env [ -i] [var=value...][command_name[arguments...]]
用途:当command_name被env执行时,可针对该command_name继承而来的环境有更细致的控制
主要选项:
-i:忽略继承的环境,仅使用命令行上所给定的变量与值
-u<变量名>:从当前环境中删除指定的变量
[gz_fieldyang@ test ~]$ env
declare -x CVS_RSH="ssh"
...
declare -xHOME="/home/gz_fieldyang"
...
declare -xPATH="/usr/local/git/bin.../home/gz_fieldyang/bin:/USER/LOCAL/BIN:/THIS/IS/A/TEST"
...
[gz_fieldyang@ test ~]$ env -i PATH=$PATH:/user/local/bin
#开始一个新的空的环境 ,当前生效
PATH=/usr/local/git/bin:...
/home/gz_fieldyang/bin:/USER/LOCAL/BIN:/THIS/IS/A/TEST:/user/local/bin
env也可以临时改变环境变量值:
env -iPATH=$PATH HOME=$HOME LC_ALL=C awk [-F ♢] '...' file1 file2
实例:
[gz_fieldyang@test ~]$ env -iPATH=/user/local/bin/test
PATH=/user/local/bin/test
[gz_fieldyang@ test ~]$ env -i PATH=/bin:/usr/bin awk -F:'{print $1,$3}' /etc/passwd |tail -5
sninf_simonlau 855
sninf_tonyhung 856
gz_kinma 857
gz_fieldyang 859
sninf_kenchoi 860
[gz_fieldyang@ test ~]$ env -i PATH=$PATH awk -F: '{print$1,$3}' /etc/passwd |tail -5
sninf_simonlau 855
sninf_tonyhung 856
gz_kinma 857
gz_fieldyang 859
sninf_kenchoi 860
[gz_fieldyang@ test ~]$
3).unset
语法:
unset [-v] variable ...
unset -f function ...
用途:从当前shell删除变量和函数
主要选项:
-f:解除(删除)指定的函数
-v:解除(删除)指定的变量,没有任何选项时,这是默认行为模式
实例1:删除指定变量
[gz_fieldyang@ test ~]$ readonly YEARSS=2016
[gz_fieldyang@ test ~]$ echo $YEARSS
2016
[gz_fieldyang@ test ~]$ unset YEARSS
-bash: unset: YEARSS: cannot unset:readonly variable
[gz_fieldyang@ test ~]$ export TEST=thisisatest
[gz_fieldyang@ test ~]$ echo test
[gz_fieldyang@ test ~]$ echo $TEST
thisisatest
[gz_fieldyang@ test ~]$ unset TEST
[gz_fieldyang@ test ~]$ echo $TEST
[gz_fieldyang@ test ~]$ export A=11
[gz_fieldyang@ test ~]$ export B=12 C=13 #定义变量
[gz_fieldyang@ test ~]$ echo $A $B $C
11 12 13
[gz_fieldyang@ test ~]$ unset -v A B C #删除变量
[gz_fieldyang@ test ~]$ echo $A $B $C
实例2:删除指定函数
[gz_fieldyang@ test ~]$ who_is_on (){ #定义函数
> who|awk '{print$1}' | sort -u #产生排序后的用户列表
> }
[gz_fieldyang@ test ~]$ who_is_on #调用函数
gz_fieldyang
gz_jonesyan
sngz
sninf_kenchoi
sninf_tonyhung
[gz_fieldyang@ test ~]$ unset -f who_is_on #删除函数
[gz_fieldyang@ test ~]$ who_is_on
-bash: who_is_on: command not found
[gz_fieldyang@ test ~]$