shell的变量功能
一、什么是变量
变量是bash环境中非常重要的一个内容,那什么是变量呢?简单说就是让一某一个特定字符串来代表另一个比较复杂或者是容易变动的数据。
二、变量的显示与设置:echo ,unset
1、变量的显示:echo $变量 echo ${变量}
2.1变量的设置(“设置”或者是“修改”某个变量的内容):用“等号(=)”连接
变量与它的内容。
如:
2.2变量的设置规则
1)变量与变量内容以一个等号“=”连接,如:
“myname=Vbird”
2)等号两边不能直接接空格符,错误示范如:
““myname= Vbird”或“myname=Vbird Tsai”
3)变量名称只能是英文字母与数字,但开头字符不能是数字,错误示范如:
“2myname=Vbird”
变量命名规则如下:
a.不能使程序中的保留字:例如if, for
b.只能使用数字、字母及下划线,且不能以数字开头
c.见名知义
d.统一命名规则:驼峰命名法
4)变量内容若有空格符可使用双引号” ” “或者单引号” ‘ “将变量内容结合起来:
a.双引号内的特殊字符如$等,可以保持原本的特性,如:
b.单引号内的特殊字符则仅为一般字符(纯文本),如:
5)可用转义字符“\”将特殊符号(如$、\、!)变成一般字符。
6、在一串命令中,还需要通过其他的命令提供的信息,可以使用反单引号“`命令`”或者“$(命令)”,如:
7、若该变量为了增加变量内容时,则可用“$变量名称”或${变量}累加内容,如:
8、若该变量需要在其他子进程(子进程:在目前这个shell的情况下,去打开另一个新的shell,新的shell就是子进程)执行,则需要以export来使变量变成环境变量:
如:
9.通常大写字符为系统默认变量,自行设置变量可以使用小写字符。
10.取消变量的方法为使用“unset变量名称”,如:
三、bash中变量的种类
1、环境变量:生效范围为当前shell进程及其子进程
变量声明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用:$name, ${name}
删除变量:unset name
显示所有环境变量(环境变量的查询):
env
printenv
export
declare -x
#env 列出环境下所有环境变量与其内容
#set 可查看所有的变量(含环境变量与自定义变量)
bash内建的环境变量:PATH SHELL USER UID HOME PWD Ü
SHLVL LANG MAIL HOSTNAME HISTSIZE —
2、本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程, 包括当前shell的子shell进程均无效
变量赋值:name=‘value’ v
可以使用引用value:
(1) 可以是直接字串; name=“root”
(2) 变量引用:name=”$USER”
(3) 命令引用:name=`COMMAND` name=$(COMMAND) v
变量引用:${name} $name “”
:弱引用,其中的变量引用会被替换为变量值 ”
:强引用,其中的变量引用不会被替换为变量值,而保持原字符串 v
显示已定义的所有变量:set v
删除变量:unset name
3、局部变量:生效范围为当前shell进程中某代码片断(通常指函数)
4、位置变量:$1, $2, …来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数。
$1, $2, …:对应第1、第2等参数,shift [n]换位置
$0: 命令本身
$*: 传递给脚本的所有参数,全部参数合为一个字符串
$@: 传递给脚本的所有参数,每个参数为独立字符串
$#: 传递给脚本的参数的个数
$@ $* 只在被双引号包起来的时候才会有差异
set — 清空所有位置变量
5、特殊变量:$?, $0, $*, $@, $#,$$
1)$? 变量保存最近的命令退出状态
2)echo $$:查询当前进程号
显示所有进程 ps -ef | grep bash tty找到当前的终端 ,查询当前进程号
查看进程树(-p 显示进程号)pstree -p | grep bash ,查询当前进程号
3)echo $PPID:查询父进程进程号
4)echo $SHLVL:查询是当前SHELL是几级SHELL
6、只读变量:能声明,但不能修改和删除
声明只读变量:
readonly name
declare -r name
查看只读变量:
readonly –p
四、变量内容的删除、替代与替换
1、变量内容的删除与替换
变量是某个值的名称,引用变量值就称为变量替换,$符号是变量替换符号。
变量替换的两种格式:
1. $variable
2. ${variable}
例子1.
命令替换是指将命令的标准输出作为值赋给某个变量。一种是使用反引号,另一种是利用$(),并且$(可以嵌套使用)。
反引号和$()在处理双斜线\\时是有区别的,反引号将反双斜线处理为空格,$()将反双斜线处理为单斜线。
五、退出状态和退出状态码
进程使用退出状态来报告成功或失败
• 0 代表成功,1-255代表失败
• $? 变量保存最近的命令退出状态
v 例如:
ping -c1 -W1 hostdown &> /dev/null
echo $?
bash自定义退出状态码:
exit [n]:自定义退出状态码
注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出
状态取决于exit命令后面的数字
注意:如果未给脚本指定退出状态码,整个脚本的退出状态码
取决于脚本中执行的最后一条命令的状态码。
六、bash中的算术运算:help let
+, -, *, /, %取模(取余), **(乘方)在bc当中乘方是^
实现算术运算:
(1) let var=算术表达式
(2) var=$[算术表达式]
(3) var=$((算术表达式))
(4) var=$(expr arg1 arg2 arg3 …) 乘法时要转译* ,即\*
(5) declare –i var = 数值
(6) echo ‘算术表达式’ | bc
乘法符号有些场景中需要转义,如*
增强型赋值:
+=,-=, *=, /=, %=
let varOPERvalue
例如:let count+=3
自加3后自赋值
自增,自减:
let var+=1
let var++
let var
-=1
let var–
原创文章,作者:Light Yagami,如若转载,请注明出处:http://www.178linux.com/83904