Bash 变量
变量的定义
- 变量是一个容器,用于临时存储数据(整数、浮点数、字符串等类任意类型的数据)
- 变量名可包含字母,数字,下划线,并且只能以字母和下划线开头。
Bash 变量声明
- 语法:
Variable_name=value
- Bash 变量的定义规则:
- 变量名区分大小写,
a
和A
为两个不同的变量。 - 变量名可以使用大小写字母混编的形式进行编写。
- 变量名与值之间的
=
两侧都不能有空格。 - 在读取或打印变量时,需使用
$
+变量名。 - 变量可以写在Bash脚本中的任何地方,在运行时,Bash会自动将其替换为变量值。
- 变量名区分大小写,
Bash 数据类型
在 Bash 中声明变量后赋值,它会自动判断数据类型,不必在声明的同时去定义变量的数据类型。 如果您将数字值赋值给变量,它将会自动转换为整数工作;如果您将字符串赋值给该变量,那么它将会转换为字符串类型。
Bash 变量类型
Bash 变量有两种类型:
1. 系统定义的变量 由 Linux 操作系统本身创建和维护的预定义变量。它们的命名标准通常是以大写字母对变量进行命名。
- BASH 表示 Shell 名称,示例:
BASH=/user/bin/bash
- BASH_VERSION 指定 Bash 持有的 shell 版本,示例:
BASH_VERSION=4.2.46(2)
- COLUMNS 指定编号,屏幕的列数,示例:
COLUMNS=80
- HOME 为用户指定主目录,示例:
HOME=/home/W3Cschool
- LOGNAME 指定日志记录用户名,示例:
LOGNAME=W3Cschool
若要了解更多的系统定义变量,您可以在终端输入命令
set
,env
,printenv
以获取这些变量的列表。
2. 用户定义的变量 由用户自行创建和维护的变量。这些类型的变量多数以小写字母参与命名,但不具有大小写强制性规定。
#!/bin/bash
say=Hello user
Comment=welcome to W3Cschool
echo "$say,$Comment!"
执行结果:
Hello user,welcome to W3Cschool!
Bash 变量使用
我们通常对 Bash 中的变量执行两个操作:
- 为变量赋值
comment=Welcome to W3Cschool
- 读取变量的值
comment=Welcome to W3Cschool echo $comment
注意:如果通过单引号将变量或字符串进行任意拼接组合,那么将无法成功读取它们。
命令行参数
命令行参数通过将数据输入传递给代码功能块,使脚本更具动态性,如下示例:
./bash_script.sh parameter1 parameter2...
注:脚本名称与所有传递的参数之间不能存在空格,本处使用空格便于阅读。
如何使用命令行参数
在 Bash 中,命令行参数与以下默认参数或特殊变量的引用一同使用。
$0
——指定要调用的脚本名称。$1-9
——存储前9个自变量的名称,或可用作自变量的位置。$#
——指定传递给脚本的参数总数。$*
——将所有命令行参数连接在一起来存储它们。$@
——将参数列表存储为数组。$?
——指定最后一个命令或最近执行过程的推出状态。$$
——指定当前脚本的进程 ID 。$!
——显示最后一个后台作业的 ID 。
传递命令行参数的两种方法:
- 使用位置编号
使用默认参数($1-9)来访问命令行参数。
#!/bin/bash echo $0 '> echo $0' echo $1 $2 $3 $4 $5 $6 $7 $8 $9'> echo $1 $2 $3 $4 $5 $6 $7 $8 $9'
执行结果:
$ chmod +x bash_script.sh $ ./bash_script.sh Here is the W3Cschool ./bash_script.sh > echo $0 Here is the W3Cschool >echo $1 $2 $3 $4 $5 $6 $7 $8 $9
- 使用数组
将参数作为数组传递,按照给定的算法来应用此方法。
- 声明变量名,将值分配为
$@
。variable_name=("$@" ```)
- 通过指定数组索引来显示参数的值。
${variable_name[i]}
- 保存脚本,并通过传递参数来执行脚本。
#!/bin/bash parameter=("$@") echo ${parameter[0]} ${parameter[1]} ${parameter[2]}
- 声明变量名,将值分配为
命令替换
在 Bash 中,命令替换允许命令的输出替换命令本身。 命令替换是指Bash执行的扩展,它获取Bash命令的输出,存储在一个变量中并显示回显。 命令替换在脚本和变量分配方面增强了数据的灵活性。
语法:
- 将命令替换为变量(命令替换的经典形式)是使用反引号,如下示例:
variable_name=`command_name` variable_name=`command_name [option...] argument1 argument2...` variable_name=`/path/to/command`
- 以
$
开头,将命令放在圆括号内进行命令替换,如下示例:variable_name=$(command_name) variable_name=$(command_name [option...] argument1 argument2...) variable_name=$(path/to/command)