变量:命名的内存空间
1.作用:①数据存储格式
②参与的运算
③表示的数据范围
类型:字符
数值:整型、浮点型
变量命名法则:
①不能使程序中的保留字:例如if, for
②只能使用数字、字母及下划线,且不能以数字开头
③见名知义
2.bash 中变量的种类
根据变量的生效范围等标准:
(1)本地变量:生效范围为当前shell 进程;对当前shell 之外的其它shell 进程,包括当前shell 的子shell 进程均无效
(2)环境变量:生效范围为当前shell 进程及其子进程局部变量,父进程无效
(3)位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, … :对应第1 、第2 等参数,shift [n] 换位置
$0: 命令本身
$*: 传递给脚本的所有参数,
$@: 传递给脚本的所有参数,
$#: 传递给脚本的参数的个数
set — 清空所有位置变量
shift # 删除前#个参数,其他参数往前移#位
$@ $* 只在被双引号包起来的时候才会有差异
$*: 全部参数合为一个字符串
$@: 每个参数为独立字符串
(4)特殊变量:$?, $$
①$? 变量保存最近的命令退出状态
②echo $$:查询当前进程号
显示所有进程 ps -ef | grep bash tty找到当前的终端 ,查询当前进程号
查看进程树(-p 显示进程号)pstree -p | grep bash ,查询当前进程号
③echo $PPID:查询父进程进程号
④echo $SHLVL:查询是当前SHELL是几级SHELL
3.变量的赋值,查询,执行,引用,删除
(1)变量赋值(本地变量和环境变量的区别)
本地变量:name=‘value’
环境变量:export varname=value
declare -x varname=value
(2)变量查询(本地变量和环境变量的区别)
本地变量:set (即查本地,也查环境)
环境变量:env printenv(搜索的结果一样)
export declare -x(搜索的结果一样)
(3)变量执行
若当前SHELL和子SHELL有相同的变量时:
./执行脚本时,在子SHELL下读取变量xiaoming,回到当前SHELL,当前的变量xiaoming不受影响
source 和 . 执行脚本时,直接在当前SHELL下,读取子SHELL下的变量xiaoming,当前SHELL的变量xiaoming被覆盖(危险)
(4)变量引用
转译:\ 完全转译 ‘ ‘ 完全转译
“”部分转译 \ ` ! $ 这4个不转译
$varname 普通引用(里边没特殊字符)
‘$varname’ 或 在 $varname用\ 完全转译特殊字符
“$varname” 部分转译
“$varname” 和 ${varname} 都能表示界限
特殊:当变量值当中包含换行符,如果希望引用出的值同样包含换行符,只能使用“$varname”
varname=$(COMMAND) 或 varname=`COMMAND` 调用命令结果
varname=”$var” 将变量赋予其他变量
练习:编写脚本/root/bin/systeminfo.sh, 显示当前主机系统信息,包括主机名,IPv4 地址,操作系统版本,内核版本,CPU 型号,内存大小,硬盘大小。
注意:赋值变量one,two…时是赋值命令的结果,所以需要用` ` 或 $( )。
echo时,引用one,two…等变量时,加” ” 引用变量
(5)删除变量
unset name
4.只读变量: 只能声明, 但不能修改和删除
声明只读变量:readonly name
declare -r name
查看只读变量:readonly –p
5.退出状态
(1)进程使用退出状态来报告成功或失败
• $? 变量保存最近的命令退出状态
• 0 代表成功,1 -255 代表失败
(2)退出状态码
bash 自定义退出状态码
exit [n] :自定义退出状态码 多用于 if 语句
注意:脚本中一旦遇到exit 命令,脚本会立即终止;终止退出状态取决于exit 命令后面的数字
注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
6.变量的算术运算
①bash中的算术运算: let
+, -, *, /, %取模(取余), **(乘方)在bc当中乘方是^
实现算术运算:
① let var=算术表达式
② var=$[算术表达式] echo $[ ]
③ var=$((算术表达式))
④ var=$(expr arg1 arg2 arg3 …) 乘法时要转译* ,即\*
⑤ declare –i var = 数值
⑥ echo ‘算术表达式’ | bc 在bc当中乘方是^
②增强型赋值:
let var+=# 自加#后赋值 let var++ 自增1
let var-=# 自加#后赋值 let var– 自减1
原创文章,作者:along,如若转载,请注明出处:http://www.178linux.com/83720