定义变量
定义变量时,变量名不加美元符号($),并且变量名和等号中不能有空格。如:
tempVar="variable"
同时,变量名的命令规则如下:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
- 中间不能有空格,可以使用下划线 _
- 不能使用标点符号
- 不能使用bash里的关键字(可用 compgen -k 命令查看保留关键字)。
使用变量
使用一个定义过的变量,只要在变量名前面加$符号即可,如:
tempVar="variable"
echo $tempVar
echo ${tempVar}
变量名外面的大括号是可选的,加大括号是为了帮助解释器识别变量的边界,防止出现识别错误变量。如:
str="shell"
echo "I am learning ${str}skill"
打印出来就是I am learning shellskill,如果没有大括号,则打印出来的内容是I am learning,系统识别strskill为一个变量,但并没有此变量,因此打印变量为空。所以使用变量时建议加上大括号,更为规范。
readonly 只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。如:
#!/bin/bash
myVar="change"
readonly myVar
myUrl="http://www.runoob.com"
运行时报错:
/bin/sh: NAME: This variable is read only.
删除变量
使用 unset 命令就可以删除变量。
unset myVar
变量被删除后不能再次使用。并且 unset 命令不能删除只读变量。
(当脚本文件规模不大时,要删除变量的话直接在脚本里把变量去掉就行了。)
变量类型
- 环境变量
- 本地变量
- 局部变量
- 位置变量
- 特殊变量(bash内置变量,也称系统变量)
环境变量
export var_name=value //作用域为当前shell进程及其子进程`
给Linux系统配置过JDK的同学应该对这个变量很熟悉
本地变量
var_name=value //本地变量,作用域为当前shell进程,对当前shell外的其他shell进程,v包括当前shell,子shell进程均无效
局部变量
local var_name=value //局部变量,作用域为当前代码段,常用于函数
局部变量也是一种本地变量
位置变量
$1,$2,$3, .... //用来引用脚本的参数
shift [num] //位置变量使用完以后退出,后面的参数向前推进
shift 1 //一次往前推,例:$1完成任务后变成$2执行
特殊变量
$# //是传给脚本的参数个数
$0 //是脚本本身的名字
$! //是shell最后运行的后台Process的PID
$@ //是传给脚本的所有参数的列表
$* //是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ //是脚本运行的当前进程ID号
$? //是显示上条命令的退出状态,0表示没有错误,其他表示有错误
bash内建环境变量,这些变量不能当作自定义变量使用
PATH
SHELL
UID
HISTSIZE
HOME
PWD
HISTFILE
PS1