阅读(3295) (17)

Bash 变量

2020-06-16 16:38:27 更新

变量的定义

  • 变量是一个容器,用于临时存储数据(整数、浮点数、字符串等类任意类型的数据)
  • 变量名可包含字母,数字,下划线,并且只能以字母和下划线开头。

Bash 变量声明

  1. 语法:
    Variable_name=value
  2. Bash 变量的定义规则:
    • 变量名区分大小写,aA为两个不同的变量。
    • 变量名可以使用大小写字母混编的形式进行编写。
    • 变量名与值之间的=两侧都不能有空格。
    • 在读取或打印变量时,需使用$+变量名。
    • 变量可以写在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. 使用位置编号 使用默认参数($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

  1. 使用数组 将参数作为数组传递,按照给定的算法来应用此方法。
    • 声明变量名,将值分配为$@
      
      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)