Shell 脚本有几个必需的结构,用来告诉 Shell 环境该做什么以及何时做。毕竟,Shell 是一种真正的编程语言,具有变量、控制结构等功能。
无论脚本变得多么复杂,它仍然只是一个按顺序执行的命令列表。
一)什么是外壳(Shell)变量?
变量是以字符和数字的形式存储的数据,同样,Shell变量也是用于存储信息,并且只能由Shell进行存储。如果需要更进一步的理解什么是变量,建议阅读 C语言变量一节
1.1 变量名
定义Shell变量时,变量名不加美元符号($,PHP语言中变量需要),如:
variable="Hello" echo $variable
1.2 有效和无效的变量名
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头;
- 中间不能有空格,可以使用下划线(_);
- 不能使用标点符号;
- 不能使用bash里的关键字(可用help命令查看保留关键字)
以下示例是有效的变量名 −
_ALI TOKEN_A VAR_1 VAR_2
以下示例是无效的变量名 −
2_VAR -VARIABLE VAR1-VAR2 VAR_A!
你不能使用其他字符(如 !
、*
或 -
)作为变量名的原因是这些字符在 Shell 中具有特殊含义。
1.3 变量名应用实例
下面是个小脚本:
#!/bin/sh echo "what is your name?" read name echo "How do you do, $name?" read remark echo "I am $remark too!"
你可以看到,系统自动选择Rowen作为name,和 fine 作为 remark.
这也可以看成简单的人机对话程序。
二)取消变量设置
取消或删除变量会指示 Shell 将该变量从它跟踪的变量列表中移除。一旦取消设置变量,就无法再访问该变量中存储的值。
以下是使用 unset
命令取消已定义变量的语法 −
unset VARIABLE_NAME
其中,VARIABLE_NAME
是你要取消设置的变量的名称。
上面的命令会取消已定义变量的值。下面是一个简单的示例,演示了该命令的工作原理 −
#!/bin/bash # 定义变量 NAME="John Doe" echo "Before unsetting: $NAME" # 取消变量设置 unset NAME echo "After unsetting: $NAME"
运行结果:
Before unsetting: John Doe After unsetting:
在这个示例中,首先定义了一个名为 NAME
的变量并赋值为 "John Doe"
。执行 unset NAME
后,该变量的值被移除,因此在之后的 echo
命令中不会显示任何内容。
二)变量类型
当 Shell 正在运行时,主要存在三种类型的变量 −
- 局部变量(Local Variables) − 局部变量是当前 Shell 实例中存在的变量。它们对由 Shell 启动的程序不可用。局部变量是在命令提示符下设置的。
- 环境变量(Environment Variables) − 环境变量对 Shell 的任何子进程都是可用的。有些程序需要环境变量才能正常运行。通常,Shell 脚本只定义那些它所运行的程序所需的环境变量。
- Shell 变量(Shell Variables) − Shell 变量是由 Shell 设置并且为其正常运行所需的特殊变量。这些变量中有些是环境变量,而另一些是局部变量。