2、shell变量管理
•2.1 环境变量
•环境变量:
shell和脚本使用变量存储数据,某些特殊变量可以与其变量的内容一起传递到子进程,那么这类特殊变量称为是环境变量。
•查看当前shell中定义的环境变量用env命令
env
•将变量声明成环境变量:
export ABC=“some value”
或 ABC=“some value”
export ABC
•环境变量将会影响当前声明的shell及该shell的所有子shell。
shell定义的环境变量
shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,这些变量用户还可以重新定义,常用的shell环境变量有:
HOME:用于保存注册目录的完全路径名。
PATH:用于保存用冒号分隔的目录路径名,shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。
TERM:终端的类型。
UID:当前用户的标识符,取值是由数字构成的字符串。
PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。
PS1:主提示符,在特权用户下,缺省的主提示符是“#”,在普通用户下,缺省的主提示符是“$”。
PS2:在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“\”然后回车,或者当用户按回车键时shell判断出用户输入的命令没有结束时,显示这个辅助提示符,提示用户继续输入命令的其余部分,缺省的辅助提示符是“>”。
预定义变量
预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成的,常用的shell预定义变量有:
$#:位置参数的数量
$*:所有位置参数的内容
$?:命令执行后返回的状态
$$:当前进程的进程号
$!:后台运行的最后一个进程号
$0:当前执行的进程名
其中,“$?”用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。
“$$”变量最常见的用途是用作临时文件的名字以保证临时文件不会重复。
用户定义的变量
用户可以按照下面的语法规则定义自己的变量:
变量名=变量值
要注意的一点是,在定义变量时,变量名前不应加符号“$”,在引用变量的内容时则应在变量名前加“$”;在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字符串都要用双引号括起来。
在编写shell程序时,为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。
有时我们想要在说明一个变量并对它设定为一个特定值后就不在改变它的值,这可以用下面的命令来保证一个变量的只读性:
readly 变量名
在任何时候,建立的变量都只是当前shell的局部变量,所以不能被shell运行的其他命令或shell程序所利用,export命令可以将一局部变量提供给shell执行的其他命令使用,其格式为:
export 变量名
也可以在给变量赋值的同时使用export命令:
export 变量名=变量值
使用export说明的变量,在shell以后运行的所有命令或程序中都可以访问到。
•设置用户自定义命令:
echo $PATH
cp /hello.sh /bin
hello.sh
•为用户自定义命令设置别名:
通过alias,可以向系统定义自己的命令或者覆盖现有系统的命令的使用,将用户在检查PATH的shell之前解析和替换别名。
• 临时定义别名:
alias hello=‘hello.sh’
• 持久化定义别名:
vim ~/.bashrc
alias lz=‘ls -Z’
•2.2 位置参数变量
•位置参数变量是预定义变量的一种,和环境变量类似,也是在shell一开始时就定义好的变量,所不同的是,用户只能根据shell的定义来使用这些预定义变量,而不能重新定义。
•所有预定义变量都是由$符和另一个符号组成的。
•
$0 脚本名称本身
$n 脚本的第n个参数值(n>9时,用${10}去指定)
$* 脚本的所有参数,所有参数被视为一个单词
$@ 脚本的所有参数,每个参数被视为一个单词
$# 脚本参数的个数
$$ 该脚本的进程的PID
$? 上一个脚本执行的返回值,为0或非0
位置参数变量示例:
vim test.sh
#!/bin/bash
echo “$0”
echo “$3”
echo “$*”
for VAR in“$@”;do
echo “$VAR”
done
echo “$#”
echo “$$”
•2.3 自定义变量
•在shell中变量类似于一个容器,可以赋予不同的值,同时可以在脚本执行期间轻松访问和修改存储的数据。
•
•为变量赋值:
变量名=变量值
•变量名称通常是大写字母,也可以由数字、字母(大写和小写)和下划线字符_组成。
•
•变量名称不能以数字开头,等号“=”用于为变量赋值,不能用空格将其与变量名称与值分开。
示例:
COUNT=40
first_name=John
file1=/tmp/abc
_ID=RH254
•给变量赋值时的常见数据类型:
变量中存储的常见数据类型是整数型和字符串型,为变量赋予字符串值时,建议的做法是用引号括起来,这是因为如果未将字符串值引在单引号或双引号中,那么bash会将空格字符解释为单词分隔符,用单引号还是双引号取决于期望bash对特殊字符如何处理。
• 示例:
full_name=‘John Doe’
full_name=“$FIRST $LAST”
full_name=‘$FIRST $LAST’
echo “$full_name”输出变量的值
•扩展变量值:
•通过在变量名称前面加美元符号$,可以通过变量扩展的过程来重新调用变量的值。
•如:可以使用$VARIABLENAME来引用VARIABLENAME变量的值,其实$VARIABLENAME是${VARIABLENAME}的简化版本,有时为了消除歧义需要使用花括号进行区分。
FIRST_=Aaron
FIRST=White
LAST=Ghost
echo $FIRST_$LAST
echo ${FIRST}_$LAST