目录
变量
变量命名规范
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线_
- 不能使用标点符号
- 不能使用bash里的关键字
变量类型
字符串
[root@localhost ~]# name=zhangsan
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号
单引号的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
[root@localhost /]# str=10
[root@localhost /]# echo '$str'
$str
双引号
双引号优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
[root@localhost /]# str='hello world'
[root@localhost /]# str1="print "$str"!"
[root@localhost /]# echo $str1
print "hello world"!
数值
- 整型
- 浮点型
[root@localhost ~]# age=30 整型
[root@localhost ~]# length=10.3536 浮点型
布尔型
[root@localhost ~]# is_right=True
[root@localhost ~]# is_right=False
变量操作
定义变量
注:变量名=变量值,不允许存在空格.
[root@localhost /]# num1=10
引用变量
引用一个定义过的变量,只要在变量名前面加美元号即可
[root@localhost /]# echo $num1
10
撤销变量
命令格式:unset 变量名
[root@localhost /]# unset num1
[root@localhost /]# echo $num1
bash变量的类型
环境变量(export)
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
Bash常见系统内置环境变量
变量名 | 含义 |
---|---|
PATH | 命令存放路径 |
SHELL | 当前用户的shell |
UID | 当前用户的uid |
HISTSIZE | history的历史长度 |
HOME | 当前用户的家目录 |
PWD | 当前位置 |
HISTFILE | 当前用户history存放位置 |
PS1 | 命令提示符的样式 |
本地变量(局部变量local)
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
位置变量
当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量.
$n (n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数)
$* (这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@(这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(这个变量代表命令行中所有参数的个数)
特殊变量(Bash内置的,用来保存某些特殊数据的变量,也称系统变量)
符号 | 含义 |
---|---|
$# | 传给脚本的参数的个数 |
$0 | 脚本自身的名字(特殊的位置参数) |
$! | shell最后运行的后台进程的PID |
$@ | 传给脚本的所有参数的列表 |
$* | 传给脚本的所有参数的列表 |
$$ | 当前进程的PID |
$? | 返回状态(在脚本中默认显示的最后一条命令是否执行成功) |
只读变量(常量)
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变
[root@localhost /]# readonly str=hello
[root@localhost /]# str=3
-bash: str: readonly variable 提示变量是只读的,无法进行更改