shell环境和变量
2014-03-17 18:02
239 查看
本地变量
本地变量在用户现在的shell生命期的脚本中使用。例如,本地变量file-name取值为loop,doc,这个值只在用户当前shell生命期有意义。如果在shell中启动另一个进程或退出,此值将无效。这个方法的优点就是用户不能对其他的shell或进程设置此变量有效。
使用变量时,如果用花括号将之括起来,可以防止shell误解变量值,尽管不必一定要这样做,但这确实可用。
要设置一本地变量,格式为:
$ variable-name=value 或${variable-name=value}
变量设置时的不同模式
variable-name=value设置实际值到variable-name
variable-name+value如果设置了variable-name,则重设其值
variable-name:?value如果未设置variable-name,显示未定义用户错误信息
variable-name?value如果未设置variable-name,显示系统错误信息
variable-name:=value如果未设置variable-name,设置其值
variable-name:-value同上,但是取值并不设置到variable-name,可以被替换
显示变量
myname="alca.lai"
echo "$myname"
可以结合使用变量,下面将错误信息和环境变量logname设置到变量error_msg。ERROR_MSG="sorry this file does not exist user $LOGNAME"
echo $ERROR_MSG
shell首先显示文本,然后查找变量$logname,最后扩展变量以显示整个变量值。
清除变量
unset valuename
显示所有本地shell变量
set
结合变量值
将变量并排可以使变量结合在一起
firstname="lai"
secondname="alca"
echo "your fullname is ${secondname}.${firstname} "
测试变量是否已经设置
有时要测试是否已设置或初始化变量。如果未设置或初始化,就可以使用另一值。此命
令格式为: variable:-value
意即如果设置了变量值,则使用它,如果未设置,则取新值
#color="blue"
#echo "the sky is ${color:-grey} today"
color="blue"
unset color
echo "the sky is ${color:-grey} today"
上面的例子并没有将实际值传给变量,需使用下述命令完成此功能:
${variable:=value}
敲回车键表明用户并没有设置两个变量值,将使用缺省值(3:00和weekly)
echo "what time do you wish to start the payroll [3:00];"
read TIME
echo "process to start at ${TIME:=3:00} OK"
echo "Is it a monthly or weekly run [weekly];"
read RUN_TYPE
echo "Run type is ${RUN_TYPE:=weekly}"
at -f $RUN_TYPE $TIME
variable:?value 编写脚本测试变量是否取值,然后返回带有系统错误信息的结果
echo "The file is ${files:? "sorry this files is not locate the variable "}"
variable=""设置空值变量
使用变量来保存系统命令参数
#sources="/etc/passwd"
#dest="/tmp/passwd.bak"
#cp ${sources} ${dest}
设置只读变量
myname="alca.lai"
echo $myname
readonly myname
myname="alca"
执行脚本显示只读变量./variable-name
alca.lai
./variable-name: line 35: myname: readonly variable
环境变量
环境变量
环境变量用于所有用户进程(经常称为子进程)。登录进程称为父进程。shell中执行的用户进程均称为子进程。不像本地变量(只用于现在的shell)环境变量可用于所有子进程,这包括编辑器、脚本和应用。
环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在.profile文件中定义。系统管理员可能在/etc/profile文件中已经设置了一些环境变量。将之放入profile文件意味着每次登录时这些值都将被初始化。
传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。
环境变量与本地变量设置方式相同。
设置环境变量
variable-name=value;export variable 或者分开写
显示环境变量
和本地变量一样
console=tty1;export console
echo $console
使用env命令可以查看所有的环境变量。
清除环境变量
使用unset命令清除环境变量
嵌入shell变量
shell 有一些预留的环境变量名,这些变量名不能用作其他用途。通常在/etc/profile中建立这些嵌入的环境变量,但也不完全是,这取决于用户自己。以下是嵌入shell变量列表。
1:CDPATH
2:EXINIT
3:HOME
4:IFS
5:LOGNAME
6:MAIL
7:MAILCHECK
8:MAILPATH
9:PATH
10:PS1
11:PS2
12:SHELL
13:TERMINFO
14:TERM
15:TZ
其他环境变量
1.EDITOR
设置编辑器,最常用。
$ EDITOR=vi ;export EDITOR
2. PWD
当前目录路径名,用cd命令设置此选项。
3. PAGER
保存屏幕翻页命令,如pg、more,在查看man文本时用到此功能。
$ PAGER='pg -f -p%;d'export PAGER
4.MANPATH
保存系统上man文本的目录。目录间用冒号分隔。
$ MANPATH=/usr/apps/man:/usr/local;/emxapnort MANPATH
5. LPDEST或P R I N T E R
保存缺省打印机名,用于打印作业时指定打印机名。
$ LPDEST=hp3si-systems
set命令
在$home.profile文件中设置环境变量时,还有另一种方法导出这些变量。使用set命令-a选项,即set -a指明所有变量直接被导出。不要在/etc/profile中使用这种方法,最好只在自的$home.profile文件中使用。
将变量导出到子进程
两个脚本列表father和child。
father脚本设置变量film,取值为A new day has come,并将变量信息返回屏幕,然后调用脚
本child,这段脚本显示第一个脚本里的变量film,然后改变其值为Daddy i am coming,再将其显示在屏幕上,最后控制返回father脚本,再次显示这个变量。
father
#!/bin/bash
#father script
echo "this is father"
film="A new day has come"
echo "I like the film: ${film}"
#call the child script
export film #环境变量
./child
echo "back to father"
echo "and the film is: ${film}"
child
#!/bin/bash
#child
echo "called from father..i am the child"
echo "film name is : ${film}" #继承father的值
film="Daddy i am coming"
echo "changing film to : ${film}"
输出结果:
this is father
I like the film: A new day has come
called from father..i am the child
film name is : A new day has come
changing film to : Daddy i am coming
back to father
and the film is: A new day has come
位置变量参数
位置变量和特定变量参数
如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制。参数从第一个开始,在第9个结束;每个访问参数前要加$符号。第一个参数为0,表示预留保存实际脚本名字。无论脚本是否有参数,此值均可用。
如果向脚本传送Did You See The Full Moon信息.
#位置变量参数
#echo "this is script name :$0"
#echo "this is first parameter :$1"
#echo "this is second parameter :$2"
#echo "this is third parameter :$3"
#echo "this is fourth parameter :$4"
#echo "this is fifth parameter :$5"
#echo "this is sixth parameter :$6"
#echo "this is seventh parameter :$7"
#echo "this is eighth parameter :$8"
#echo "this is ninth parameter :$9"
echo "hello this is $0 calling"
echo "hello this is `basename $0` calling"
向系统命令传递参数
本地变量在用户现在的shell生命期的脚本中使用。例如,本地变量file-name取值为loop,doc,这个值只在用户当前shell生命期有意义。如果在shell中启动另一个进程或退出,此值将无效。这个方法的优点就是用户不能对其他的shell或进程设置此变量有效。
使用变量时,如果用花括号将之括起来,可以防止shell误解变量值,尽管不必一定要这样做,但这确实可用。
要设置一本地变量,格式为:
$ variable-name=value 或${variable-name=value}
变量设置时的不同模式
variable-name=value设置实际值到variable-name
variable-name+value如果设置了variable-name,则重设其值
variable-name:?value如果未设置variable-name,显示未定义用户错误信息
variable-name?value如果未设置variable-name,显示系统错误信息
variable-name:=value如果未设置variable-name,设置其值
variable-name:-value同上,但是取值并不设置到variable-name,可以被替换
显示变量
myname="alca.lai"
echo "$myname"
可以结合使用变量,下面将错误信息和环境变量logname设置到变量error_msg。ERROR_MSG="sorry this file does not exist user $LOGNAME"
echo $ERROR_MSG
shell首先显示文本,然后查找变量$logname,最后扩展变量以显示整个变量值。
清除变量
unset valuename
显示所有本地shell变量
set
结合变量值
将变量并排可以使变量结合在一起
firstname="lai"
secondname="alca"
echo "your fullname is ${secondname}.${firstname} "
测试变量是否已经设置
有时要测试是否已设置或初始化变量。如果未设置或初始化,就可以使用另一值。此命
令格式为: variable:-value
意即如果设置了变量值,则使用它,如果未设置,则取新值
#color="blue"
#echo "the sky is ${color:-grey} today"
color="blue"
unset color
echo "the sky is ${color:-grey} today"
上面的例子并没有将实际值传给变量,需使用下述命令完成此功能:
${variable:=value}
敲回车键表明用户并没有设置两个变量值,将使用缺省值(3:00和weekly)
echo "what time do you wish to start the payroll [3:00];"
read TIME
echo "process to start at ${TIME:=3:00} OK"
echo "Is it a monthly or weekly run [weekly];"
read RUN_TYPE
echo "Run type is ${RUN_TYPE:=weekly}"
at -f $RUN_TYPE $TIME
variable:?value 编写脚本测试变量是否取值,然后返回带有系统错误信息的结果
echo "The file is ${files:? "sorry this files is not locate the variable "}"
variable=""设置空值变量
使用变量来保存系统命令参数
#sources="/etc/passwd"
#dest="/tmp/passwd.bak"
#cp ${sources} ${dest}
设置只读变量
myname="alca.lai"
echo $myname
readonly myname
myname="alca"
执行脚本显示只读变量./variable-name
alca.lai
./variable-name: line 35: myname: readonly variable
环境变量
环境变量
环境变量用于所有用户进程(经常称为子进程)。登录进程称为父进程。shell中执行的用户进程均称为子进程。不像本地变量(只用于现在的shell)环境变量可用于所有子进程,这包括编辑器、脚本和应用。
环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在.profile文件中定义。系统管理员可能在/etc/profile文件中已经设置了一些环境变量。将之放入profile文件意味着每次登录时这些值都将被初始化。
传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。
环境变量与本地变量设置方式相同。
设置环境变量
variable-name=value;export variable 或者分开写
显示环境变量
和本地变量一样
console=tty1;export console
echo $console
使用env命令可以查看所有的环境变量。
清除环境变量
使用unset命令清除环境变量
嵌入shell变量
shell 有一些预留的环境变量名,这些变量名不能用作其他用途。通常在/etc/profile中建立这些嵌入的环境变量,但也不完全是,这取决于用户自己。以下是嵌入shell变量列表。
1:CDPATH
2:EXINIT
3:HOME
4:IFS
5:LOGNAME
6:MAIL
7:MAILCHECK
8:MAILPATH
9:PATH
10:PS1
11:PS2
12:SHELL
13:TERMINFO
14:TERM
15:TZ
其他环境变量
1.EDITOR
设置编辑器,最常用。
$ EDITOR=vi ;export EDITOR
2. PWD
当前目录路径名,用cd命令设置此选项。
3. PAGER
保存屏幕翻页命令,如pg、more,在查看man文本时用到此功能。
$ PAGER='pg -f -p%;d'export PAGER
4.MANPATH
保存系统上man文本的目录。目录间用冒号分隔。
$ MANPATH=/usr/apps/man:/usr/local;/emxapnort MANPATH
5. LPDEST或P R I N T E R
保存缺省打印机名,用于打印作业时指定打印机名。
$ LPDEST=hp3si-systems
set命令
在$home.profile文件中设置环境变量时,还有另一种方法导出这些变量。使用set命令-a选项,即set -a指明所有变量直接被导出。不要在/etc/profile中使用这种方法,最好只在自的$home.profile文件中使用。
将变量导出到子进程
两个脚本列表father和child。
father脚本设置变量film,取值为A new day has come,并将变量信息返回屏幕,然后调用脚
本child,这段脚本显示第一个脚本里的变量film,然后改变其值为Daddy i am coming,再将其显示在屏幕上,最后控制返回father脚本,再次显示这个变量。
father
#!/bin/bash
#father script
echo "this is father"
film="A new day has come"
echo "I like the film: ${film}"
#call the child script
export film #环境变量
./child
echo "back to father"
echo "and the film is: ${film}"
child
#!/bin/bash
#child
echo "called from father..i am the child"
echo "film name is : ${film}" #继承father的值
film="Daddy i am coming"
echo "changing film to : ${film}"
输出结果:
this is father
I like the film: A new day has come
called from father..i am the child
film name is : A new day has come
changing film to : Daddy i am coming
back to father
and the film is: A new day has come
位置变量参数
位置变量和特定变量参数
如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制。参数从第一个开始,在第9个结束;每个访问参数前要加$符号。第一个参数为0,表示预留保存实际脚本名字。无论脚本是否有参数,此值均可用。
如果向脚本传送Did You See The Full Moon信息.
#位置变量参数
#echo "this is script name :$0"
#echo "this is first parameter :$1"
#echo "this is second parameter :$2"
#echo "this is third parameter :$3"
#echo "this is fourth parameter :$4"
#echo "this is fifth parameter :$5"
#echo "this is sixth parameter :$6"
#echo "this is seventh parameter :$7"
#echo "this is eighth parameter :$8"
#echo "this is ninth parameter :$9"
echo "hello this is $0 calling"
echo "hello this is `basename $0` calling"
向系统命令传递参数
相关文章推荐
- Makefile 和 shell中的环境变量使用
- crontab启动shell,环境变量问题
- 8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件
- shell中的fork、source和exec总结(包括环境变量)
- shell变量赋值与环境
- shell脚本内环境变量问题
- shell中的fork、source和exec总结(包括环境变量)
- shell架构,环境变量
- crontab启动shell脚本的环境变量问题
- 8.6 管道符和作业控制;8.7—8.8 shell变量(上下);8.9 环境变量配置文件
- shell-bash学习01基础、打印、环境变量
- 从学习export命令理解到的Shell环境和变量生存期(转)
- shell脚本设置环境变量不生效
- linux下JDK安装,不同用户不同SHELL下环境变量设置
- linux脚本编写基础(环境变量、shell流程控制)
- awk中如何使用shell的环境变量[转]
- Shell脚本定义变量和环境变量的引用
- Linux 登陆shell,交互shell以及环境变量读取顺序
- linux笔记:shell基础-环境变量配置文件
- RHCE课程-RH033Linux基础笔记四之shell以及环境变量 推荐