分类: LINUX
2007-03-15 18:01:32
第三部分 登录环境
第13章 登录环境
1.登录过程
键入用户名和密码 -> 系统检查是否为有效用户(查询/etc/passwd文件) ->登录名/密码有效则系统执行环境设置文件(/etc/profile -> $HOME/.profile)
2.密码文件/etc/passwd的格式(7个域):
用户名:加密的密码:uid:gid:用户全名:用户home目录:用户的shell路径
3.系统全局环境设置文件/etc/profile
此文件的设置内容一般包含有:
全局或局部环境变量: 设置环境变量便于用户及其进程和应用访问它。eg:export指令等
PATH信息: 设置环境变量PATH,定位包含可执行文件、库文件及一般文本文件的目录位置,便于用户快速访问
终端设置: 使系统获知用户终端的一般特性。eg:
安全命令: 包括文件创建模式(umask)或其他安全限定。
日期信息或放弃操作信息:
4.用户个人环境变量设置文件$HOME/.profile(不同的shell有不同的文件命名,bash为.bash_profile)
在$HOME/.profile文件中可以通过设置相关条目以不同的值或使用uset命令来覆盖/etc/profile文件中的设置。
5.stty用法 stty用于设置终端特性
Usage1: stty [option]
选项: -a :以用户看的懂的格式打印当前所有的设定。
-g :以stty的格式打印当前设定。可以用于回存stty设置。
eg:SAVEDSTTY=`stty -a` #保存设置; .... ; stty $SAVEDSTTY #还原stty的初始设置
Usage2: stty [-]arg :打开[关闭]参数arg
stty name value :设置特殊字符。eg: stty erase '^H'
5.logout文件
此文件保存有执行exit命令时,在进程终止前执行的命令
Bourne shell与其他shell不同,它没有.logout文件。Bash的logout文件名为$HOME/.bash_logout
第14章 环境和shell变量
6.四种shell变量: 本地变量、环境变量,两种变量被认为是特殊变量(只读):位置变量、特定参数变量
7.本地变量 在用户现在的shell生命期的脚本中使用,如果在shell中启动另一个进程或退出,此值将失效
设置变量: variable-name=value eg: EDITOR=vi
显示变量: echo $variable-name 或 echo ${variable-name}
清除变量: unset variable-name eg: unset EDITOR
显示所有本地shell变量: set
8.测试变量是否已经设置(变量置换)
${var:-value} :如果变量var未定义,返回一个默认值
如果var存在且非空,则表达式${var:-value}的值为$var;如果var未定义,则表达式值${var:-value}为value
${var:=value} :如果变量var未定义,设置var的默认值为value
如果var存在且非空,则${var:=value}的值为$var;如果var为空或未定义,则var被赋值value且表达式值为value
${var:?mesg} :捕获未定义变量导致的错误
如果var存在且非空,则${var:?value}的值为$var;如果var为空或未定义,则打印mesg并终止脚本
${var:+mesg} :测试一个变量的存在性
如果var存在且非空,则${var:+value}的返回值为mesg;如果var为空或未定义,则返回null
9.设置只读变量 : varname=value;readonly varname
查看所有只读变量 : readonly 或 readonly -p
10.环境变量
登录进程称为父进程,shell中执行的用户进程均称为子进程。环境变量可用于所有子进程,这包括编辑器、脚本和应用。环境变量最好在profile文件中定义。习惯上,所有环境变量均为大写。
设置环境变量: VARNAME=value; export VARNAME
显示环境变量: echo $VARNAME
以查看所有的环境变量: env 清除环境变量: unset VARNAME
11.SHELL预留的环境变量名
每一种shell有一些预留的环境变量名,这些变量名不能用作其他用途。
eg:Bourne Shell的环境变量有HOME,PATH,LANG,PWD,PS1,EDITOR...
12.export命令
export varname 命令可以把变量varname输出到子进程中,如果在子进程中修改了变量varname的值,退出子进程后,在子进程中被赋的值将不会传回到父进程。
不可以将变量从子进程导出到父进程, 然面通过重定向就可做到这一点
13.位置参数变量 位置变量的数目有可以任意多,但只有$0 - $9可以被访问
$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ($0的值为脚本名)
echo Did You See The Full Moon
14.特定参数变量(7个)
$# 传递到脚本的参数的个数
$* 以一个单字符串显示所有向脚本传递的参数。
$$ 脚本运行的当前进程ID号
$! 最后一个后台运行的进程的进程ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数(返回一个参数列表)
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示前面最后一个命令的退出状态。0表示没有错误,其他任何值表明有错误。
15.退出状态
$?可以在任何命令或脚本中返回此变量以获得返回信息。检验脚本退出状态时,最好将返回值赋值给一个有意义的名字的变量,这样可以增加脚本的可读性。
eg: cp ok.txt /usr/local/app/def >/dev/null 2>&1
cp_status=$?
echo $cp_status
第15章 引号
16.双引号
使用双引号可引用除字符$(美元符号)、`(反引号)、(反斜线)外的任意字符或字符串。双引号不会阻止shell对这3个字符作特殊处理(标示变量名、命令替换、反斜线转义 )
如果要查询包含空格的字符串,经常会用到双引号。
17.单引号
如果用单引号把字符串括起来,则单引号内字符串中的任何特殊字符的特殊汉语均被屏蔽。
18.反引号
shell将反引号中的内容作为一个系统命令,并执行其内容。使用这种方法可以替换输出为一个变量。
19.反斜线
如果下一个字符有特殊含义,反斜线防止shell误解其含义,即屏蔽其特殊含义。
下述字符包含有特殊意义: & * + ^ $ ` " | ?
在打印字符串时要加入八进制字符(ASCII相应字符)时,必须在前面加反斜线,否则shell作普通数字处理。