变量的定义与使用
Shell脚本中的变量用来存放系统和用户需要使用的特定值,这些值可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell程序能够提供更加灵活多样的功能。
变量的赋值与引用
变量赋值的语法为:变量名=变量值。
变量名的命令规则如下:
- 变量名由字母、数字和下划线组成,区分大小写。
- 首个字符必须为字母或下划线,不能以数字开头。
- 不能使用Shell 关键字(如if、then、for、while等)作为变量名。
Shell变量不区分数据类型,变量值可按以下方式定义:
- 变量值不含空格、换行等空白字符时,变量值两侧可加也可不加单双引号。
- 变量值含有空格、换行等空白字符时,值两边必须加单双引号用于界定。

变量引用的语法为:$变量名、${变量名}。可在变量引用两侧添加单双引号,但效果不同:
- 使用双引号与不使用时效果相同。
- 使用单引号时,引号中的内容会被视为普通字符串而不是变量。

变量的类型
1、自定义变量:自定义变量是由系统用户自己定义的变量,仅在用户自己的Shell环境中有效,因此又称为本地变量。

2、环境变量:由系统预定义的变量,主要用于设置用户的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等。常用的环境变量如下:
- $PATH:用于设置可执行程序的默认搜索路径。仅使用文件名称来执行命令或程序时,系统将在$PATH变量指定的目录范围查找对应的可执行文件,如果找不到则会提示“command not found”。
- $USER:当前登录用户的用户名。
- $UID:当前登录用户的ID号。
- $HOME:当前登录用户的家目录。
- $SHELL:当前用户使用的Shell。

3、预定义变量:由Shell预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用$符号和另一个符号组合表示。常用的预定义变量如下:
- $0:当前执行的脚本名称。
- $#:执行脚本时传入的参数个数。
- $*:执行脚本时传入的所有参数。
- $n:执行脚本时传入的第n个参数。
- $$:执行脚本的进程ID。

变量的作用域
1、局部变量:默认情况下用户自定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或子Shell环境时,局部变量将无法再使用。

- source test.sh:在当前Shell中运行脚本,当前环境中定义的局部变量能在脚本中获取。
- bash test.sh:在新开启的Shell中运行脚本,当前环境中定义的局部变量不能在新的Shell中获取。
2、全局变量:在当前的Shell环境中有效,且在子程序或子Shell环境同样有效的变量称为全局变量。局部变量可使用export关键词转换为全局变量。

- source test.sh:在当前Shell中运行脚本,当前环境中定义的全局变量能在脚本中获取。
- bash test.sh:在新开启的Shell中运行脚本,当前环境中定义的全局变量能在新的Shell中获取。
变量的使用示例
1、开启防火墙端口。

2、添加用户。

- passwd −−stdin:passwd的−−stdin选项表示从标准输入读取密码。