Skip to content

Latest commit

 

History

History
160 lines (118 loc) · 3.75 KB

Shell 变量.md

File metadata and controls

160 lines (118 loc) · 3.75 KB

「 Shell 变量 」

💬 Shell 变量的特点

  1. Shell 变量使用之前不需要事先对它进行声明,在第一次使用它的时候创建它

  2. Shell 变量默认情况下,是字符串类型

  3. Shell 变量名区分大小写

  4. 弱类型

💬 Shell 环境变量

  • 每个 Shell 都有一组预定义的环境变量,用户也可以自己指定环境变量

    环境变量 说明
    HOME 主目录的完整路径
    PATH Shell 搜索命令的路径
    MAIL 邮箱的完整路径
    USER 用户名
    SHELL 登陆 Shell 的完整路径名
  • 引用环境变量:$变量名

  • 查看环境变量:env;set

  • 指定局部变量为环境变量:export

    • 例:export name

💬 系统预定于变量

  预定义变量和环境变量相类似,所不同的是,用户只能根据Shell的定义来使用这些变量,而不能重定义它。

符号 说明
$$ 当前 Shell 的进程号
$# 位置参数的数量
$@, $* 所有位置参数的列表
$? 命令执行后返回的状态
$! 后台运行的最后一个进程号
$0 当前的 Shell 脚本文件名
$RANDOM 一个随机整数
$PPID 父 Shell 的进程 ID
$1...$9 $n 指向第 n 个命令行参数

💬 位置参数

  1. 由 Shell 在程序运行时设置

  2. 共 10 个位置参数变量,从程序名开始依次为第 0~9 个

  3. $@$* 代表所有位置参数

  4. Shift 命令递归访问参数

  • 例:

    $ cat myscript
    #!/bin/bash
    echo $0
    echo $@
    shift
    echo $*
    echo $1
    $ ./myscript a b c d e
    ./myscript
    a b c d e
    b c d e
    b

💬 局部变量

  局部变量(简单变量)——用户自定义变量

  1. 局部变量的创建/赋值:变量名=变量值;

  2. 引用局部变量的值:$变量名;

  3. 清除局部变量:unset 变量名;

  4. 查看局部变量:set;

  • 举例:

    $ a=5
    $ gamelist=12
    $ name="Mr Fan"
  • 局部变量的引用:

    格式 说明
    ${变量} 变量值
    ${#变量} 变量值的长度
    ${#变量} 数组第 1 个元素的长度
    ${#变量[*]} 数组元素的总个数
    ${变量:-word} 如果变量存在且非 null,返回它的值;否则返回 word
    ${变量:=word} 如果变量存在且非 null,返回它的值;否则将 word 赋值给变量,并返回变量的值
    ${变量:+word} 如果变量存在且非 null,返回 word;否则返回 null
    ${变量:?word} 如果变量存在且非 null,返回它的值;否则显示:“变量:word”
    ${变量#pattern} 匹配前缀(最小匹配),并返回余下内容
    ${变量##pattern} 匹配前缀(最大匹配),并返回余下内容
    ${变量%pattern} 匹配结尾(最小匹配),并返回余下内容
    ${变量%%pattern} 匹配结尾(最大匹配),并返回余下内容

💬 从标准输入读取变量值

  • 格式:read 变量表

  • 例:

    #script.sh
    echo "enter your name:\c"
    read name
    echo "your name is $name"

💬 只读变量

  readonly 命令能保护变量,使其不被修改。

  • 例:

    $ password=123456
    $ readonly password
    $ password=991228
    bash: password: readonly variable
    $ readonly  #列出所有只读变量
- End -