语法
变量必须以字母或者下划线开头,后面可以跟数字、字母和下划线,变量长度没有限制。下面列举了一些变量命名,注意Shell的变量是区分大小写的。
变量有局部变量、环境变量之分。
声明变量
v1=val
# v2 为字符串
declare v2=1
# v2的值为: v2+1
v2=v2+1
# 声明 数字类型
declare -i a=1
# 数组
a2=('v1' 'v2')
# 变量值可以用单号、双引号
v3="a b $a"
v4='a b c'
# 只读变量
readonly r="readOnly"
# 局部变量
f(){
local v="v"
}
# 执行命令结果
files=$(ls)
files=`ls`
#files的值为:ls 的结果
变量取值
变量名前加 $
,也可以 ${v}
v=1
echo $v
echo ${v}
删除变量
v=1
unset v
数组
-
声明
# 声明数组 declare -a a1 a1[0]=1 # 指定下标数组 a2=([1]=1 [5]=5) a=('v1' 'v2')
-
取值
# 取值 echo ${a[0]} echo ${a[@]} # 按空格分开打印 # 结果:v1 v2 echo ${a[*]} # 输出一个字符串 # 结果:v1 v2
-
长度
# 数组长度 echo ${#a[@]} echo ${#a[*]}
-
截取、拼接
# 数组截取 echo ${a[@]:0:1} # 接接 conn=(${a[@]} ${a2[@]})
-
替换
# 把a中所有的 v1 替换为 s1 s=${a[@]/v1/s1} echo $s # 结果:s1 v2
详细查看:参数扩展
位置参数
位置参数是 shell
脚本传入的参数。
使用数字表示。除了 0
。
位置参数 N
可以:${N}
或者 $N
(一位数字) 使用。
特殊变量
-
*
不在
""
内,每一个位置参数为一个词输出。则使用word splitting
分隔。在
""
内,输出为一个词,相当于"$1c$2c…"
。c
是IFS
中的第一个字符,如果没有设置IFS
使用空格,如果IFS
为null
,将参数连接,没有间隔符,$1$2…
-
@
不在
""
内,如果设置了word splitting
,则使用word splitting
分隔,如果没设置,使用 空格。在
""
内,"$@"
相当于"$1" "$2"…
-
#
,位置参数的个数 -
$
,脚本的进程号。() 子shell
中,调shell
的进程号,不是子shell
的进程号 -
!
,最近一个 后台(bakcground
)进程的进程号。不管是 异步命令,还是bg
命令。 -
0
,shell或者脚本的名字。如果使用
bash -c
执行,$0
为第一个参数。