环境变量、位置变量与预定义变量
环境变量
由系统维护,用于设置工作环境、配置系统行为、传递信息和控制程序的执行。
-
系统级环境变量: 这些变量对整个操作系统及其所有用户都是可见的。
例如,PATH变量存储了操作系统查找可执行文件的路径列表。
-
用户级环境变量: 这些变量只对当前用户可见。每个用户可以定义自己的环境变量,用于满足个人需求。
例如,HOME变量指定了当前用户的主目录路径。
-
预定义环境变量: 操作系统或应用程序预先定义了一些常用的环境变量,用于提供特定的信息和功能。
例如,USER变量保存当前用户名,LANG变量指定了当前系统的默认语言。
-
自定义环境变量: 用户和应用程序可以定义自己的环境变量,用于存储特定的信息或配置。
这些变量可以根据需要随时创建、修改和删除。
常用变量:
- $USER 表示用户名称
- $HOME 表示用户的宿主目录
- $LANG 表示语言和字符集
- $PWD 表示当前所在工作目录
- $PATH 表示可执行用户程序的默认路径
示例:
echo $PATH # 查看当前搜索路径
PATH="$PATH:/root" # 将/root目录添加到搜索路径
export PATH="$PATH:/root" # 输出为全局环境变量
[root@localhost ~]# chmod 777 123.sh # 给执行权限
[root@localhost ~]# 123.sh # 可以直接打印
位置变量(Positional Variables)
也称为命令行参数(Command-Line Arguments),位置变量是在运行脚本或程序时传递的值,用于将外部数据传递给脚本或程序,以便根据需要进行处理。
当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
- 格式:
$n
(n为数字)-
$0
:表示命令本身。 -
$1-$9
:表示第一个到第九个参数,十以上的参数使用大括号表示,例如${10}
。 -
示例:
vim addnum.sh num1=$1 num2=$2 sum=$(($num1 + $num2)) echo $sum ./addnum.sh 12 34 # $0 $1 $2
-
预定义变量(和双引号的用法)
预定义变量由编程语言或脚本解释器提供,并根据需要自动设置和更新,不能修改。
-
常见预定义变量:
-
$*、$@
:表示命令或脚本要处理的参数。 -
$*
:所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表”$1 $2 $3 $4“。 -
$@
:各个参数加上双引号分隔成n份的参数列表返回,每个参数作为一个字符串返回,代表"$1" “$2” “$3” “$4”。 -
$0
:表示当前执行的脚本或命令的名称。 -
$#
:表示参数的个数。 -
$?
:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。也常被用于Shell脚本中return退出函数并返回的退出值。 -
示例:
echo "输入的对象数为: $#"
-
-
$*加引号:
vim test.sh #!/bin/bash function print_args { for arg in "$*"; do echo "$arg" done } print_args "Hello" "World" "!" #函数将只输出一个字符串“Hello World !”
-
$*不加引号:
#!/bin/bash function print_args { for arg in $*; do echo "$arg" done } print_args "Hello" "World" "!" #函数将分别输出三个字符串“Hello”、“World”和“!”
-
$* 和 $@ 的用法:
∗ 、 *、 ∗、@不加双引号时表现一致;加双引号时,$*会将所有参数作为一个整体。
function print_args_star { for arg in "$*"; do echo "$arg" done } function print_args_at { for arg in "$@"; do echo "$arg" done } print_args_star "Hello" "World" "!" echo "--------" print_args_at "Hello" "World" "!" # 输出: # Hello World ! # -------- # Hello # World # !
-
$# 的用法:
$#是一个特殊的全局变量,它表示传递给当前脚本或函数的参数个数。
[root@localhost ~]# vim test.sh #!/bin/bash echo "输入的对象数为: $#" [root@localhost ~]# sh test.sh 1 2 3 4 5 6 输入的对象数为: 6
-
$? 的用法:
表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,
返回任何非0值均表示执行出现异常。也常被用于Shell脚本中return退出函数并返回的退出值。vim test.sh read -p "请输入第一个比较的数据:" a read -p "请输入第二个比较的数据:" b if [ $a == $b ] then echo "right" else echo $? fi [root@client ~]# ./b.sh 请输入第一个比较的数据:abc 请输入第二个比较的数据:abc right