1. Shell变量
无论哪一门编程语言,变量都是一个必不可少的部分,shell脚本语言也是如此。变量的作用是用来存储数据,大多数编程语言在定义变量时都需要指明变量的类型,例如整型,字符型等等。但是shell脚本语言在定义变量时无需指明变量类型直接赋值即可。
a=5
b=6.6
str="abc"
如上,在shell脚本语言中直接赋值即可定义变量。但是值得注意的是在赋值时,等号的两边不能有空格。
和大多数的编程语言一样,在变量名称的命名上也有一些规则来限制,shell脚本语言变量命令规则如下:
1.命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
2.中间不能有空格,可以使用下划线(_)。
3.不能使用标点符号。
4.不能使用bash里的关键字。
上述规则也和很多编程语言中的规则大同小异,应该很容易记忆。总之命名变量不要采用一些奇行怪异的名字就对了。
2. 变量的类型
shell变量也有其作用域,按照作用域的不同,shell变量被分为三种类型,分别是局部变量,全局变量和环境变量。
局部变量就是在shell脚本中的函数中定义的变量。
全局变量就是在脚本中的任何部分都能访问的变量。
环境变量则是所有shell脚本都能访问的变量,例如Path变量等等。
3. 使用变量
使用一个已经被定义的变量,只需要在变量前面加上$符号即可。
#!/bin/bash
addr="www.baidu.com"
echo $addr
在使用变量时,建议给变量加上大括号,以便解释器能够分清变量的边界。
#建议下面这种使用变量的方法
echo ${addr}
可以看看如下情况:
#!/bin/bash
a=59
ab=99
echo "print $ab"
在没有大括号的情况下,shell默认ab是变量名会输出99,但是有可能shell的编写者本意是输出a的值,误多打了一个b。所以为了编程的规范性,最好对要使用的变量采用大括号囊括起来。
变量在被定义后也可以重复定义,如下:
a=50
echo $a
a=100
echo $a
除了使用数字,字符串等对变量进行赋值,也可以将命令的结果赋值给变量。
#!/bin/bash
a=$(pwd)
echo $a
说明:pwd命令是获取当前路径,该脚本会将脚本所在的绝对路径赋值给a,再输出a。
除了pwd命令,也还有很多命令的结果都可以赋值给shell的变量。特别是一些通用配置的脚本,更是经常把命令的结果赋值给变量以存储当前系统的一些环境。
在C语言中,scanf函数可以从键盘读取数据赋值给变量,在shell中依旧有相同的赋值方法,不过shell中就不是用scanf了,而是采用read。具体用法如下:
#!/bin/bash
read a
echo $a
上例中,通过read读取键入的数据并且赋值给a。这是一个阻塞的动作,在没有输入数据之前,该shell进程会一直阻塞在这里。
4. 只读变量
在c语言中,被const修饰的变量是只读变量,一旦被修饰为只读变量就不能够在修改该变量。在shell中也有只读变量一说,通过readonly命令可以将一个变量修饰为只读变量,后续也不能对该变量进行修改,否则会报错。
#!/bin/bash
addr="www.baidu.com"
echo $addr
readonly addr
addr="www.google.com"
echo $addr
运行该脚本,会有如下错误提示:
line 5: addr: readonly variable
addr是只读变量,不能修改其值。
还有需要注意的是,如果在定义变量时就申明为只读变量,则需要立即复制,否则该变量就是空的,毫无意义。
#!/bin/bash
readonly a
echo $a
输出空。
5. 删除变量
shell中可以使用unset命令删除已定义的变量。
#!/bin/bash
a=10
echo $a
unset a
删除变量之后,可以继续使用该变量,但是该变量的值是空的。另外只读变量是不能够被删除的。删除只读变量会引起报错。
#!/bin/bash
a=10
unset a
echo $a
输出空。
关于变量的学习到这就告一段落。