bash中的变量
1.1、定义变量

定义变量的语法:

[readonly] variable=value

注意:

  • 等号左右两边一定不能有空格。
  • 变量名以字母、数字、下划线组成,并且第一个字符不能是数字。

为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。

变量分为可变变量只读变量

当定义一个变量的时候,使用readonly命令修饰的, 那么这个变量就是只读变量,否则就是可变变量

只读变量只能在定义的时候赋初始值,一旦定义好,之后无法修改其值,只能读取它的值。

1.2、引用变量

$variable或者${variable}的形式来引用名为variable的变量的值。

示例:

versionName="1.0.0";
fileName=${versionName}_$(date +%Y%m%d%H%M%S).apk
1.3、环境变量
1.3.1、使用环境变量的目的
  • 让用户根据自己的喜好改变其值,达到私人定制的目的
  • 在多个进程之间共享变量的值,达到通信的目的
1.3.2、环境变量的分类

根据环境变量的使用目的,可以把环境变量分为2类:

  • 进程内私有的环境变量
  • 进程间共享的环境变量
1.3.2.1、进程内私有的环境变量

进程内私有的环境变量存在的目的仅仅是让用户根据自己的喜好改变其值,达到私人定制的目的。

进程内私有的环境变量的设置语法:

环境变量=VALUE COMMAND

示例:

DEBUG=* node src/private/server.js

说明:我们在node src/private/server.js这个命令前面设置了一个环境变量DEBUG=*, 这个环境变量只在node src/private/server.js这个进程有效,而且只对该进程有效,对其他进程不起作用。 假如该环境变量是早就存在的,那么该进程结束后,赋值又恢复到原来的值。

1.3.2.2、进程间共享的环境变量

进程间共享的环境变量的设置,需要使用export命令,其语法如下:

export 环境变量=VALUE

示例:

export PATH=~/bin:PATH
1.3.3、查看所有的环境变量和其对应的值

使用env命令,可以查看到当前用户的所有的环境变量和其对应的值:

1.3.4、查看某个环境变量对应的值

使用echo $环境变量查看某个环境变量的值,示例:

使用printenv $环境变量查看某个环境变量的值,示例:

1.3.5、常见的环境变量
1.4、预定义变量

预定义变量是由Bash定义的变量,用户只能使用这些变量,而不能重新给这些变量赋值。

预定义变量是由$开头,并和另一个符号组成的。

预定义变量有:

预定义变量类型说明
$#Integer参数的数量
$*List参数列表
$@List参数列表,与$*一样
$?Integer上一条命令的执行结果。一般用于检查上一个命令执行是否正确(其值为0表示该命令正确执行,任何非0值表示命令出错)。
$$Integer当前进程号(pid)
$!Integer后台运行的最后一个进程号(pid)
$0String当前进程名。如果是在Shell脚本中,就是Shell脚本的文件名。
$NStringN > 0,第N个参数

示例:

#!/bin/bash

if [ $# -eq 0 ] ; then
    echo "./test.sh args..."
elif [ $# -eq 1 ] ; then
    if [ $1 = "-h" ] ; then
        echo "./test.sh args..."
    else
        echo "第一个参数是$1"
    fi
else
    i=0
    for arg in $*
    do
        i=$(expr $i + 1)
        echo "第$i个参数是$arg"
    done
fi

运行效果如下: