变量命名
shell命名规则如下:
- 命名只能用英文字母,数字和下划线,且首字符不能以数字开头
- 命名不能中间空格
- 命名不可使用标点符号
- 命名不含bash的关键字
例如下面的name='LiLei'
中name就是一个变量:
#!/bin/bash
name='LiLei'
echo $name
#sh test.sh
LiLei
注意
:变量名和=
及=和赋值
之间不能有空格, 否则会报错:
(1)name ='LiLei', 左边
有空格, 脚本会报错 test.sh: line 2: name: command not found
(2)name= 'LiLei', 右边
有空格, 脚本会报错 test.sh: line 2: LiLei: command not found
变量使用
使用变量名只需要在变量名前面加$
符号, 而{}
大括号可用可不同,主要是用来界定变量。
注意
:shell变量不需要先定义后使用,如果对一个没有定义的变量取值,则值为空字符串
。
#!/bin/bash
name='LiLei'
echo $name
echo ${name}
echo "My name is ${name}Lei"
echo "My name is $nameLei"
#sh test.sh
LiLei
LiLei
My name is LiLeiLei
My name is
重定义变量
已定义的变量,可以被重新定义。
#!/bin/bash
name='LiLei'
echo $name
name='ZhangSan'
echo ${name}
#sh test.sh
LiLei
ZhangSan
只读变量
使用 readonly
命令可以将变量定义为只读变量,只读变量的值不能被改变, 否则报错。
#!/bin/bash
name='LiLei'
echo $name
readonly name
name='ZhangSan'
echo ${name}
#sh test.sh
LiLei
test.sh: line 6: name: readonly variable
删除变量
使用 unset 命令可以删除变量, 输出的被删除变量为空。
#!/bin/bash
name='LiLei'
echo $name
unset name
echo ${name}
#sh test.sh
LiLei
注意
:只读变量不可被删除
#!/bin/bash
name='LiLei'
readonly name
unset name
echo ${name}
#sh test.sh
test.sh: line 5: unset: name: cannot unset: readonly variable
LiLei
特殊变量
特殊变量在后面的shell编写过程中广泛应用
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。 |
变量类型
运行shell时,会同时存在三种变量:
-
局部变量
: 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。 -
环境变量
: 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。 -
shell变量
: shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
网友评论