Shell编程规范与变量:详解环境变量、位置变量与预定义变量


文章目录

    • 环境变量、位置变量与预定义变量
      • 环境变量
      • 位置变量(Positional Variables)
      • 预定义变量(和双引号的用法)


环境变量、位置变量与预定义变量

环境变量

由系统维护,用于设置工作环境、配置系统行为、传递信息和控制程序的执行。

  • 系统级环境变量: 这些变量对整个操作系统及其所有用户都是可见的。

    例如,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
    

你可能感兴趣的:(网络,运维,服务器,云计算,centos,linux,unix)