查看原文
其他

Shell基础(4)-变量的有效范围、位置变量

Cloud研习社 Cloud研习社 2023-06-06


每周二、四、六定期更新!




再看变量的有效范围



我们上面已经提到了变量的使用范围,就是在父进程中定义的变量,如果想在子进程中也有效,则可以使用export这个命令来实现。我们明确一下:

环境变量=全局变量

自定义变量=局部变量

定义全局变量:

[root@studyclub ~]# export MYNAME=jason




位置变量



位置变量用来标注命令中的参数的顺序和个数。这些变量是内置变量,使用这些变量,可以通过命令行把参数传递给脚本内部。

$1 $2 $3 ... $n 对应命令行中的第1个,第2个,第3个,... ,第n个参数
$0 代表命令本身
$* 代表命令行中的所有参数,把所以的参数作为一个字符串
$@ 代表命令行中的所有参数,每个参数为独立字符串
$# 代表命令行中有多少个参数


我们用一个脚本来看看这些参数的用法:
[root@studyclub jason]# cat args.sh
#!/bin/bash
#
# **************************************************************************************
# Author: Jason Zhuo
# Create time: 2021年7月1日17:26:59
# Description: this is a test file for argument.For example: $# $0 $1 $2
# File name: args.sh
# Copyright (C): 2021 All rights reserved
# **************************************************************************************
echo "first argument is $1"
echo "second argument is $2"      # 查看第二个参数
echo "10st argument is $10"        # 希望查看第10个参数
echo "10st argument is ${10}"      # 查看第10个参数
echo "11st argument is $11"        # 希望查看第11个参数
echo "11st argument is ${11}"      # 查看第11个参数

echo "the script name is $0"

echo "arguments number: $#"        # 查看有多少个参数

echo "all args: $@"            # 查看有哪些参数
echo "all args: $*"            # 查看有哪些参数


下面我们来看看执行的结果:

[root@studyclub jason]# ./args.sh a b c d e f g h i j k l m n o p q r s t
first argument is a
second argument is b
10st argument is a0                 # 希望查看第10个参数,但为什么是a0呢?
10st argument is j                       # 查看第10个参数
11st argument is a1                 # 希望查看第11个参数,但为什么是a1呢?
11st argument is k                # 查看第11个参数
the script name is ./args.sh
arguments number: 20
all args: a b c d e f g h i j k l m n o p q r s t
all args: a b c d e f g h i j k l m n o p q r s t


我们来回答一下上面输出结果的两个问题:希望查看第10、11个参数,但结果为什么是a0和a1呢?这一因为在位置参数中,我们写成“$10”"$11",系统不会把它当成是取第10个和第11个参数,系统会认为是“$1”和字符0以及“$1”和字符1的组合,所以输出的是a0和a1。所以,在这种情况下,我们需要把数字用大括号{}括起来,就像这样:${10}。我们总结一下变量引用的两种方式:
$var_name
${var_name} # 这种方式可以避免产生歧义



手应知:

    尝鲜Rocky Linux

《Linux基础及进阶》:

    047 - 服务管理和启动流程(3)-服务依赖、创建自己的systemd配置文件
    048 - 服务管理和启动流程(4)-启动流程
    049 - Shell基础(1)-bash简介、type
    050 - Shell基础(2)-shell变量及设置规则
    051 - Shell基础(3)-环境变量


看完本文有收获?请分享给更多人


推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存