变量
变量:命名的内存空间
- 数据存储方式:
字符:
数值:整型,浮点型
变量:变量类型
- 作用:
1. 数据存储格式
2. 参与的运算
3. 表示的数据范围 - 类型:
字符
数值:整型、浮点型
强类型:
变量不经过强制转换,它永远是这个数据类型,不允许隐式的类型转换。一般定义变量时必须指定类型、参与运算必须符合类型要求;调用为声明变量会产生错误
如:jave,C#
弱类型:
语言的运行时会隐式做数据类型转换。无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用
如:bash 不支持浮点数,php
变量命名法则:
1. 不能是程序中的保留字;例如if,for
2. 只能使用数字、字母及下划线,且不能以数字开头
3. 见名知意
4. 统一命名规则:驼峰命名法
bash中变量的种类
- 根据变量的生效范围等标准划分下面变量类型:
- 本地变量:生效范围为当前 shell 进程;对当前 shell 之外的其它 shell 进程,包括当前 shell 的子进程均无效
- 环境(全局)变量:生效范围为当前 shell 进程及其子进程
- 局部变量:生效范围为当前 shell 进程中某代码片段,通常指函数
- 位置变量:$1,$2,...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
- 特殊变量:$?,$0,$*,$@,$#,$$
本地变量
- 变量赋值:
name='value'
- 可以使用引用value:
- 可以是直接字串;name="root"
- 变量引用:
name="$USER"
- 命令引用:
name="$(COMMAND)"
- 变量引用:${name},$name
" ":弱引用,其中的变量引用会被替换为变量值
' ':强引用,其中的变量引用不会被替换为变量值,而保持原字符串 - 显示已定义的所有变量:
~]# set
- 删除变量:
~]# unset name
环境变量:
- bash 内建的环境变量:
- PATH
- SHELL
- USER
- UID
- HOME
- PWD
- SHLVL
- LANG
- HOSTNAME
- HISTSIZE
- _:前一个命令的最后一个参数
只读和位置变量:
- 只读变量:只能声明,但不能修改和删除
- 声明只读变量:
~]# readonly name
~]# declare -r name
- 查看只读变量:
~]# readonly -p
- 声明只读变量:
注意:
变量在小括号中执行,会继承当前 shell 的环境变量,但在括号中修改的变量,不会影响当前 shell 环境,一般为一次性使用;变量在大括号中执行,会继承当前 shell 的环境变量,但在括号中修改的变量,也会影响当前 shell 环境。
- 位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1,$2,...:对应第1、第2等参数,shift [n]换位置
$0:命令本身
$*:传递给脚本的所有参数,全部参数合为一个字符串
$@:传递给脚本的所有参数,每个参数为独立字符串
$#:传递给脚本的参数的个数
set --:清空所有位置变量
注意:$@和$*只有在被双引号包起来的时候才会有差异
退出状态:
- 进程使用退出状态来报告成功或失败
0:代表成功
1-255:代表失败
$?变量保存最近的命令退出状态 - 例如:
[root@node2 ~]# ping -c1 -W1 hostdown &> /dev/null [root@node2 ~]# echo $? 2
网友评论