第12章 使用shell:变量和选项
12.1 交互式shell和非交互式shell
当登录时系统启动一个shell,并设置成交互式的。当运行shell脚本时,会启动一个新的shell,被设定为非交互式的。
12.2 环境、进程和变量
在Unix系统中,每个对象都被表示为一个文件或进程。在进程运行过程中,需要访问所谓的环境,即一组用来存放信息的变量。
变量名 变量值
对于shell来说,变量只有四种类型的操作,即创建变量,查看变量值,修改变量的值,销毁变量。而且,变量几乎总是存储一直类型的数据,即字符串(纯文本字符)。
12.3 环境变量和shell变量
所有shell都使用全局变量和局部变量,通常可以不严格地称环境变量为全局变量。有的shell变量只在特定的shell中使用,并不属于环境,不从父进程传递给子进程,称这种变量为局部变量。
局部变量(shell)以两种方式使用:
1.存放对于shell本身有用的信息;
2.在shell脚本中作为临时存储容器。
结论:shell变量时创建它们的shell的局部变量,环境变量是全局变量。
Bourne shell将变量只定义为局部变量,或者同时定义为局部和全局变量(全部大写)。每个新变量被自动地设置为shell变量,可以导出(export)到环境中。
C-shell通过命令setenv创建环境变量,大写,通过set创建shell变量,小写。
一些变量在shell中以及所有的子进程中都有意义。要求既是局部变量又是全局变量。
C-shell的解决办法是定义几个特殊的shell变量,分别绑定对应的环境变量。
shell变量 | 环境变量 |
cwd | PWD |
home | HOME |
path | PATH |
term | TERM |
user | USER |
12.4 显示环境变量:env、printenv
12.5 显示shell变量:set
12.6 显示及使用变量的值:echo、print
echo ${NAME}
echo $NAME
print兼容于ksh。
12.7 Bourneshell家族使用变量:export、unset
创建变量 NAME=value 复位变量(无法删除变量) unset NAME...
当使用包含空白符的值时,需要将值放在双引号中。
12.8 C-shell家族使用变量:setenv、unsetenv、set、unset
创建环境变量
setenv NAME [value]
复位环境变量
unsetenv NAME
创建shell变量
set path=(/usr/bin /bin /usr/ucb)
使用圆括号将一组字符串括起来,而不是使用双引号,实际上定义了一组可以单独访问的字符串。
删除shell变量
unset variable
12.9 shell选项:set –o、set +o
shopt (shell option)访问更多的选项
12.10 显示shell选项
set –o 容易阅读
set +o 紧缩的格式
ignoreeof
monitor
noclobber
emacs
vi
12.11 机器可读、人类可读