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 -oset +o命令本身:

set -o
set +o

12.11 机器可读,人类可读

set -o 以一种易于阅读的方式显示输出。
set +o 以适合用作shell脚本的数据。

12.12 练习

posted on 2019-07-29 14:23  青苹末末  阅读(141)  评论(1编辑  收藏  举报

导航