Unix & Linux 教程学习_4
第12章 使用shell: 变量和选项
- 交互式 shell
- 进程
- 环境变量
- shell变量
- shell选项
- 元字符
- 引用
- 外部命令
- 内置命令
- 搜索路径
- 历史列表
- 自动补全
- 命令行编辑
- 别名
- 初始化文件
- 注释
echo $SHELL
//显示所使用的shell的名称
要注意,如果我们临时改变所使用的shell,上面的命令是不能显示出来的。
12.1 交互式shell和非交互式shell
非交互式是独立与人运行的程序,如果我们运行一个脚本, 此时的shell就是一个非交互式shell.
当运行shell脚本时,会自动启动一个新的shell,并将解释脚本的任务交给该shell处理。
12.2 环境、进程和变量
Unix中,每个对象都被表示为一个文件或者进程,文件存放数据或用来访问资源,而进程是正在执行的程序。
在进程运行过程中,它需要访问所谓的环境, 即一组用来存放信息的变量。
Unix shell有两种不同的变量, "shell变量"和"环境变量"
对变量只有四种类型的操作:
- 创建变量
- 查看变量的值
- 修改变量的值
- 销毁变量
全局变量与局部变量
- shell变量是创建它们的shell的局部变量
- 环境变量是全局变量
不同与一般的编程,shell中的局部变量与全局变量之间的界限是模糊的.
一个变量同时拥有局部和全局变量的含义。 例如它对shell本身有用(这意味着这些变量应该是shell变量),并且对由shell启动的进程也是有用的(这就意味这些变量应该是环境变量)。
Bourne shell家族(Bash, Korn shell)与C-shell家族(C-Shell, Tcsh)有些不同.
Bourne shell家族:定义为局部变量,或同时为局部变量与全局变量。没有完全的全局变量.
创建的都是局部变量.通过用export命令将shell变量修改成"shell+环境"变量
例:创建一个名为HARLEY的变量,并将值cool赋给它:
HARLEY=cool
此时HARLEY只是一个shell变量,如果启动一个新shell或运行一条命令,则新进程不能访问HARLEY,下面的命令将HARLEY导出到环境中:
export HARLEY
C-Shell家族中,环境变量通过命令setenv创建,并以大写字母命名, shell变量由set命令创建,并以小写字母命名。
12.4 显示环境变量: env, printenv
大多数时候,我们用默认的变量,显示默认变量可以用env或printenv命令
env
或者
printenv
12.5 显示shell变量: set
12.6 显示及使用变量的值: echo, print
要显示一个变量的值,在变量名前加$字符. 后面用花括号把变量名括起来:
echo ${TERM}
//大多数情况下可以省掉花括号,像下面:
echo $TERM
如果用echo显示时有元字符,则需要用双引号括起来.
例如: 想要显示尖括号中的TERM的值, 用下面的句子会报错:
echo The terminal type is <$TERM>.
因为尖括号是元字符,它本身表示重定向,所以这里无法正常显示,这时可以用双引号括起来,让shell以字面意思显示它.
echo "The terminal type is <$TERM>."
显示为:
The terminal type is <xterm-256color>.
所有的shell都允许使用echo命令显示文本和变量,Korn shell还可以使用print命令:
print "The terminal type is $TERM."
12.7 Bouren shell家族使用变量: export, unset
Bouren shell家族,创建变量非常简单。例:
HARLEY=cool
//一定要确保不在等号两边加空格!!!
如果希望使用一个包含有空白符(空格或制表符)的值,则需要将值放在双引号中“
WEEDLY="a cool cat"
如果变量存在,还可以使用相同的语法修改变量的值。例如:
HARLEY=smart
//将HARLEY的值改成"smart"
在Bourne shell家族中, 每个变量都自动地被设置成shell变量。使用export命令可以将变量导出到环境中。
export HARLEY WEEDLY
//HARLEY和WEEDLY变量同时由shell变量变为"shell+环境“变量.
但是,还有一种更好的方法。 export命令实际上允许同时设置变量并导出到环境中。语法为:
export NAME [=value] 例:
export PAGER=less
//创建一个值为less的变量,并将其导出为"shell+环境"。
export允许指定一个或多个变量名,即一次可以创建及导出多个变量.
当删除变量时,称这是在“复位(unset)“变量。 语法为:
unset NAME
例:
unset HARLEY WEEDLY
12.8 C-Shell家族使用变量:setenv, unsetenv, set unset
在C-Shell家族中,使用setenv和unsetenv命令可以设置(创建)或复位(删除)环境变量。
设置或复位shell变量时,需要用set和unset命令。
设置环境变量:
setenv NAME [ value ]
//注意,命令中不使用=(等号),例:
setenv HARLEY cool
复位环境变量:
unsetenv NAME
例:
unsetenv HARLEY
设置shell变量:
set name[=value]
//注意,与环境变量不同的是,这里要用=(等号),例:
set term=vt100
删除shell变量:
unset variable
//其中variable是变量名,例:
unset term
理解将变量设置为null和删除变量之间的区别:
set harley=cool
set harley
unset harley
第一条创建名为harley的shell变量,并赋值为"cool", 第二条命令将变量harley的值设置为"null", 最后一条命令为删除变量harley.
12.9 shell选项:set -o, set +o
对于C-Shell家族来说,可以使用shell变量控制shell行为。
而Bourne shell家族,则需要用shell选项。
注意shell选项与shell变量的区别, shell选项像是on/off开关一样。
当打开一个选项时,就说设置了这个选项。这将告诉shell以某种方式运行。
当关闭这个选项时,就说复位了这个选项。这也就是告诉shell停止以这种方式运行.
- shell选项或者是off或者是on,它们不需要创建。
- 当设置shell选项时,就将shell选项打开。
- 当复们shell选项时,就将shell选项关闭。
设置一个选项:
set -o option
要复位一个选项:
set +o option
例,设置monitor选项:
set -o monitor
要复位monitor选项,则:
set +o monitor
12.10 显示 shell 选项
Bourne shell家族使用shell选项控制shell的操作。显示shell选项的当前值,可以用set -o或set +o命令本身:
set -o
set +o
12.11 机器可读,人类可读
set -o 以一种易于阅读的方式显示输出。
set +o 以适合用作shell脚本的数据。