0%

变量和数组

变量

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

定义变量

1
2
3
[root@vm-101 ~]# var1='aaa'			# 定义一个变量var1。注意命名规则
[root@vm-101 ~]# echo $var1 # 打印$var1的值。注意$符号
aaa

删除变量

1
2
[root@vm-101 ~]# unset var1			# 删除变量
[root@vm-101 ~]# echo $var1

定义只读变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@vm-101 ~]# readonly var1='readonly'
[root@vm-101 ~]# echo $var1
readonly
[root@vm-101 ~]# var1='aaa'
bash: var1: 只读变量

[root@vm-101 ~]# readonly # 不带参数,列出所有的只读变量
declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
declare -ir EUID="0"
declare -ir PPID="8634"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="0"
declare -r var1="readonly"

# 这里可看到。declare -r 也可以定义只读变量。

declare 和 typeset

同一个命令,两个名字。推荐用declare

1
2
3
4
5
6
7
-a 		定义数组
-f 定义函数名变量
-i 定义整型变量
-r 同readonly命令,定义只读变量
-x 同export命令,设置为全局变量

+a +f +i +r +x 取消。与上面的相反

环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@vm-101 ~]# a='aaaaa'
[root@vm-101 ~]# cat a.sh
#! /bin/bash
echo $a


[root@vm-101 ~]# bash a.sh # 空

[root@vm-101 ~]# export a=aaaaaa # 用export设置成环境变量。export只对当前shell及其子shell起作用
[root@vm-101 ~]# bash a.sh
aaaaaa

[root@vm-101 ~]# export -p | grep 'aaaa' # 找到设置的环境变量
declare -x a="aaaaaa"

数组

可以认为它是一个特殊的变量,它的值是一个序列。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@vm-101 ~]# list1=(111 222 333)			# 定义一个数组list1
[root@vm-101 ~]# echo ${list1[@]} # 打印数据list1的内容。
111 222 333
[root@vm-101 ~]# echo ${list1[*]}
111 222 333
[root@vm-101 ~]# echo $list1
111
[root@vm-101 ~]# echo ${list1[0]} # 打印数组中的第一个元素
111
[root@vm-101 ~]# echo ${list1[1]} # 打印数组中的第二个原色
222
[root@vm-101 ~]# echo $list1[0] # 错误写法。要注意
111[0]
[root@vm-101 ~]# echo ${list1[-1]} # 打印最后一个元素
333
[root@vm-101 ~]# echo ${list1[-2]} # 倒数第二个
222