Shell变量
变量名可由字母、数字、下划线组成,任何其他的字符都标志着变量名的终止。
变量名不能以数字开头
变量名大小写敏感
变量类型只有一种就是字符串
Shell变量的分类
按照变量的使用环境来分可以分成本地变量、环境变量、位置变量、特殊变量:
1.本地变量
本地变量仅仅在现有用户的shell生命期的脚本中使用,离开现在用户的shell,变量消失。
2.环境变量
用于所有用户进程<通称为子进程>,包括编辑器,脚本和应用,登录进程为父进程,shell中执行的用户进程均为子进程。
3.位置变量
位置变量表示$0,$1,$2,....$9,最多可以设置9个位置变量,当然也可以通过特殊方法设置更多的位置变量
4.特殊变量
具有特殊意义的一些变量
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的进程ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态.0表示没有错误,其他任何值表明有错误.
按变量的生存周期来划分,Linux变量可分为两类:
1. 永久的:需要修改配置文件,变量永久生效。
2. 临时的:使用export命令行声明即可,变量在关闭shell时失效。
shell变量的创建
在bash中可以用declare内置命令来创建变量。格式为:
declare 变量=值
单独执行declare时将列出所有已设置的变量
只读变量的设置
使用readonly可以将变量定义成只读。
readonly variable
单独执行readonly可以显示所有的只读变量
通常只读变量不能被重新赋值或复位,如果只读变量使用declare创建的,那它们不可以被复位,但可以被重新赋值。
显示本地的shell变量
set命令可以显示环境变量和已经预定义过的本地变量
变量的复位
使用unset命令可以删除变量
shell变量的赋值
变量名(variable)=变量值(variable_value)
1.变量赋值可以在定义时进行:如
var=hello # B shell中规定等号两边不能有空白符,如果要给变量赋空值,可以在等号后跟一个换行符。
var=100 # 变量的值可以改变,只需利用赋值语句重新给它赋值即可。未赋过值的变量仅含一个空字符串。
var=“hello world” #如果字符串中出现空格符、制表符或换行符,则必须用双引号括起来
2.变量赋值可以在程序运行中进行:如交互输入变量值
利用read命令可以从键盘上读取数据,然后赋给指定的变量。read命令的一般格式为:
read 变量1 [变量2 …] 例:
read a b c
# 输入数据时,数据间以空格或制表符作为分隔符。
# 如果变量个数与给定数据个数相同,则依次对应赋值;
#如果变量个数少于数据个数,则从左至右对应赋值,但最后一个变量被赋予剩余的所有数据;
#如果变量个数多余数据个数,则依次对应赋值,而没有数据与之对应的变量取空串。
3.可以将一个命令的执行结果赋值给变量。两种形式,如:
dir=`pwd` # “ `` ” 是倒引号
dir=$(pwd) # 两种形式等价
shell变量的取值访问
在shell程序或shell命令中,使用操作符$来对变量进行访问。例如:
var=hello
echo $var # 输出:hello
在某些场合下,用花括号或双引号将变量括起来,可以防止shell误解变量值。例如:
echo $varaaa # 系统会输出变量名为varaaa的变量的值,该变量并未赋值,所以输出为空。
echo ${var} # 输出:hello
echo ${var}aaa # 输出:helloaaa
echo "$var"bbb # 输出:hellobbb
测试变量是否已经赋值
${variable:-value}
# 如果变量已经赋值,则使用该变量值。如果变量为空,则使用value。需要注意的是,value并不赋给variable。
${variable:=value}
# 该表达式上面的区别就是,如果variable为空,则value赋给variable。
如果需要检验变量是否为空,如果为空的话则显示带有系统错误信息,则使用下面的表达式:
${variable:?}
如果需要显示自己定义的信息,则如下:
${variable:?"customed message "}
集众家之所长: