Bash Shell把任何存储在变量中的值,皆视为以为符组成的“字符串”。变量仅针对当前shell有效,变量名称可使用英文字母、数字及_组成,但变量名第一个字符不能使用数字,另外英文字母大小写是区分的。
变量的声明
变量的声明有三种方式:
myname=OLS3
myname='Jack'
myname="Jack"
应注意(1)=的两侧不应有空格,如myname = LOS3是错误的。变量的值如果包含空格,则必须使用'或"的赋值方式,myname=ss dd是错误的。
(2)shell可以不声明变量而直接使用,我们可以强制设定变量必须很声明后使用,方式如下
#! /bin/bash
shopt -s -o nounset(-s是打开选项的意思;-o是指可用set -o设定的选项,nounset表示变量一定要先设定才能后使用)
echo $Infomix
执行这个脚本会错误的,因为Infomix未声明就直接使用了。
变量的使用
获取变量的值有两种方式: $变量名称 ${变量名称}
I=8
echo $I 或者 echo ${I} //会打印出8
echo \$I 或者 echo '$I' //会打印出$I,注意是',如果是"还是会打印出8
取消或清空变量
销毁变量(不便把变量的内容取消,而且让这个变量不存在)
unset -v 变量名称
unset -f 函数名称
清空变量
myname=OLS3
父shell中声明的变量,在子shell中是无效的。同样在子shell中声明的变量,在父shell中也是无效的。要想使子shell能继承父shell的变更,只需把父shell中的变量转换成环境变量。
例: testVAR="Hello World" export testVar 或 export testVAR="Hello World",也可以用declare -x testVAR="Hello World"
export是bash的内置命令,用途是把某一个变量输出,变成环境变量,以使后续的各种操作(包括子shell)皆可用于提该项变量的内容。
只读变量
定义只读变量: readonly declare
(1)readonly 变量名
readonly -f 函数名
readonly -a 数组名
readonly或者readonly -p 列举出所有的只读变量
例:s[0]=10
s[1]=20
s[2]=30
readonly -a s
s[3]=50 //报错,s为只读变量
(2)declare -r 变量名
declare还可以调整变量的其它属性,如declare -ir num="100" 声明num是只读的,且为整数形态
declare -x设置环境变量,前面已介绍
数组
(1) A[0]=5 A[1]=10 A[2]=28
echo ${A[1]}
(2) B=(23 88 99 66)
echo ${B[2]}
(3) C=([3]=77 [1]=100 [5]=66)
echo ${C[5]}
(4) D=(124 [8]=188 266)
echo ${D[9]}
取出数组中的所有值: echo ${B[@]} 得到四个以空格分开的数字
echo ${B[*]} 得到一整个字符串
取得数组元素的个数: ${#B[@]} 或${#B[*]}
若数组元素是字符串,还可以用以下语法取得元素的长度:${#A[3]}
变量的声明
变量的声明有三种方式:
myname=OLS3
myname='Jack'
myname="Jack"
应注意(1)=的两侧不应有空格,如myname = LOS3是错误的。变量的值如果包含空格,则必须使用'或"的赋值方式,myname=ss dd是错误的。
(2)shell可以不声明变量而直接使用,我们可以强制设定变量必须很声明后使用,方式如下
#! /bin/bash
shopt -s -o nounset(-s是打开选项的意思;-o是指可用set -o设定的选项,nounset表示变量一定要先设定才能后使用)
echo $Infomix
执行这个脚本会错误的,因为Infomix未声明就直接使用了。
变量的使用
获取变量的值有两种方式: $变量名称 ${变量名称}
I=8
echo $I 或者 echo ${I} //会打印出8
echo \$I 或者 echo '$I' //会打印出$I,注意是',如果是"还是会打印出8
取消或清空变量
销毁变量(不便把变量的内容取消,而且让这个变量不存在)
unset -v 变量名称
unset -f 函数名称
清空变量
myname=OLS3
myname=
父shell中声明的变量,在子shell中是无效的。同样在子shell中声明的变量,在父shell中也是无效的。要想使子shell能继承父shell的变更,只需把父shell中的变量转换成环境变量。
例: testVAR="Hello World" export testVar 或 export testVAR="Hello World",也可以用declare -x testVAR="Hello World"
export是bash的内置命令,用途是把某一个变量输出,变成环境变量,以使后续的各种操作(包括子shell)皆可用于提该项变量的内容。
只读变量
定义只读变量: readonly declare
(1)readonly 变量名
readonly -f 函数名
readonly -a 数组名
readonly或者readonly -p 列举出所有的只读变量
例:s[0]=10
s[1]=20
s[2]=30
readonly -a s
s[3]=50 //报错,s为只读变量
(2)declare -r 变量名
declare还可以调整变量的其它属性,如declare -ir num="100" 声明num是只读的,且为整数形态
declare -x设置环境变量,前面已介绍
数组
(1) A[0]=5 A[1]=10 A[2]=28
echo ${A[1]}
(2) B=(23 88 99 66)
echo ${B[2]}
(3) C=([3]=77 [1]=100 [5]=66)
echo ${C[5]}
(4) D=(124 [8]=188 266)
echo ${D[9]}
取出数组中的所有值: echo ${B[@]} 得到四个以空格分开的数字
echo ${B[*]} 得到一整个字符串
取得数组元素的个数: ${#B[@]} 或${#B[*]}
若数组元素是字符串,还可以用以下语法取得元素的长度:${#A[3]}
取消数组或数组元素 unset A unset A[3]
取数组索引列表
语法规则: ${!数组变量[@]} 或 ${!数组变量[*]}
示例:
D=(124 [8]=188 266)
r=${!D[@]}
echo $r //输出 0 8 9
ar=(a b c xy z)
for i in "${!ar[@]}"
do
echo "index $i: ${ar[$i]}"
done