3.2 shell程序的变量和参数
shell的功能:说明和使用变量
【对shell来说,所有变量的取值都是一个字符串,采用$var的形式来引用var的变量的值】
3.2.1 shell定义的环境变量
环境变量:和系统的工作环境有关的变量,可被用户重新定义
HOME:保存注册目录的完全路径名
PATH:保存用冒号分隔的目录路径名
(shell按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行)
TERM:终端的类型
UID:当前用户的标识符,取值是由数字构成的字符串
PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化
PS1:主提示符,在特权用户下,默认的主提示符是#,在普通用户下, 默认的主提示符是$
PS2:在shell接收用户命令的过程中,若用户在输入行的末尾输入\然后回车,或者用户按回车时shell判断出用户的命令没有结束,显示这个辅助提示符,提示用户继续输入命令的其余部分,默认的辅助提示符是>3.2.2 用户定义的变量
变量名=变量值
//注意:
//1、在定义变量时,变量名前不能加$
//2、在给变量赋值时,等号两边的能留空格
//3、若变量本身包含了空格,则整个字符串都要用双引号括起来
//4、为了区别变量名和命令名,变量名最好用大写字母来表示
readly 变量名
//表示这个变量只读
export 变量名
//一般情况下,局部变量只能在当前使用。
//而这个命令将此局部变量交给别的命令使用
export 变量名=变量值
//在赋值时使用export命令
//获得和上面同样的效果
3.2.3 位置参数
定义:调用shell程序的命令行时所在的位置,决定的变量
作用于:程序名之后输入
格式:用空格分隔
作用:用来替换程序文件中的某个东西
【具体:第一个位置参数替换$1
,第二个替换$2
,依次类推】注意:
$0
是一个特殊的变量,其内容包括此shell程序的文件名,所以$0
不是一个位置参数。在显示当前所有的位置参数时是不包括$0
的。3.2.4 预定义变量
定义:类似于环境变量,在shell一开始就会定义。且不能被重定义,只能按照shell预先定义好的来。常见的shell预定于变量有:
$#:位置参数的数量
$*:所有位置参数的内容
$?:命令执行后返回的状态
//作用:检查上一个命令执行是否正确,正确为0,错误为非0
$$:当前进程的进程号
//作用:用作临时变量的名字,保证临时文件不重复
$!:后台运行的最后一个进程号
$0:当前执行的进程名
- 3.2.5 参数置换的变量
作用:根据不同的条件来给变量赋不同的值
可参数置换的变量的种类:4种
变量参数置换的方式:与某个位置参数相联系,根据指定的位置参数是否已经设置类决定变量的取值
(1)变量 = ${参数 - word}
//若设置了参数,则用参数的值置换变量的值,否则用word置换
//即这种变量的值等于某一参数的值,若该参数没有设置,该变量等于word的值
(2)变量 = ${参数 = word}
//若设置了参数,则用参数的值置换变量的值,否则把变量设置成word,然后用word替换参数的值
//注意,位置参数不能用这种方式,因为在shell程序中不能为位置参数赋值
(3)变量 = ${参数 ? word}
//若设置了参数,则用参数的值置换变量的值,否则显示word,并从shell中退出,若省略了word,则显示标准信息
//这种变量要求一定等于某一个参数的值,若该参数没有设置,就显示一个信息,然后退出,常用于出错指示。
(4)变量 = ${参数 + word}
//若设置了参数,则用word置换变量,否则不进行置换
以上四种形式中的参数既可以是位置参数(大部分情况),也可以是另一种变量