• shell变量


    shell变量

    1 变量的定义

    变量名=初始化的值
    var=hello
    变量名=‘初始化的值’
    var=‘hello’
    变量名=“舒适化的值”
    var=“hello”

    1、shell变量在定义的时候 “=” 两边不允许有空格

    >var = hello  #error,"=" 两边不允许有空格
    
    • 1

    2、shell变量允许不定义直接使用,此时变量的值为空

    #var之前未被定义
    echo [${var}]	
    #在终端回显的内容为 [] 中括号内为空
    
    • 1
    • 2
    • 3

    3、shell变量允许定义变量的时候为空,但是不能只写变量名,解释的时候会认为这是一条命令

    var=
    #"="后面什么也不跟,此时var的值为空
    var
    #error,不能只写变量名
    
    • 1
    • 2
    • 3
    • 4

    4、shell变量没有数据类型,都当成字符串处理

    5、在定义变量时使用另一个变量对其初始化的时候要使用双引号括起来

    var1=hello
    #定义变量var1,初始化为hello
    
    var2=$var1
    #定义变量var2,并使用var1中的内容对其初始化,$相对于C语言指针中的区内容符
    
    var3=$var1 world
    #error,会提示未找到world命令
    
    var4='$var1 world'
    #不会报错,但是var4中的内容是$var1 world
    
    
    var5="$var1 world"
    #var5的内容为hello world
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    6、如果初始化的值之间有空格时,使用单引号或者双引号的方式初始化

    var1=hello world
    #error,world: 未找到命令
    var2='hello world'
    #var2的内容为hello world
    var3="hello world"
    #var3的内容为hello world
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2 变量的使用

    shell中使用变量的方式为:

    $变量名
    ${变量名} <----推荐使用这个

    var1=hello
    var2=$var1   # ok
    var3=${var1}
    var4=${var1}world   #将var1变量的值展开和world字符串拼接  ok
    
    • 1
    • 2
    • 3
    • 4

    3 位置变量

    位置变量的使用就是执行脚本文件时给脚本文件传递的参数

    $0     ----> 获取执行脚本文件的名字
    $1     ----> 传递的第1个参数
    $2     ----> 传递的第2个参数
    .......
    $10    ----> 传递的第1个参数和字符串0进行拼接
    ${10}  ----> 传递的第10个参数,如果使用位置变量时,获取脚本文件传递的参数时,
    			如果获取的参数位置大于等于10时,将对应的数字使用{}括起来
    ......
    $n     ----> 传递的第n个参数, n = (1 to n)
    
    $#     ----> 获取参数的个数之和,不包括脚本文件名自身
    $*     ----> 获取所有的参数
    $@     ----> 获取所有的参数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    #!/bin/bash
    
    echo "脚本文件名 = $0"
    echo "第1个参数 = $1"
    echo "第2个参数 = $2"
    echo "第3个参数 = $3"
    echo "第4个参数 = $4"
    echo "第5个参数 = $5"
    echo "第6个参数 = $6"
    echo "第7个参数 = $7"
    echo "第8个参数 = $8"
    echo "第9个参数 = $9"
    echo '$10 : 展开第一个参数的值和字符串0进行拼接'
    echo "第1个参数 = $10"
    echo '${10} : 获取第10个参数'
    echo "第10个参数 = ${10}"
    echo "第11个参数 = ${11}"
    echo "统计参数的个数,不包括脚本文件的名字 = $#"
    
    echo "获取所有的参数,不包括脚本文件的名字 = $*"
    echo "获取所有的参数,不包括脚本文件的名字 = $@"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    执行结果
    在执行的时候向脚本文件传递的参数,位置变量就能接收到传递的参数

    4 定义变量时使用的命令

    readonly          	定义只读类型的变量
    unset 				取消变量的定义,不能取消只读变量的定义
    local 				定义局部变量,在shell中默认所有的变量都是全局变量,就算是在函数内部定义的变量也是全局变量
    					除非在函数中定义变量的时候使用local修饰,将此变量变成一个全局变量
    
    • 1
    • 2
    • 3
    • 4
    #!/bin/bash
    
    #定义只读类型的变量,定义时必须初始化
    #若不初始化其内容为空,且后续不能修改其内容
    readonly var1=hello
    readonly var2=
    echo "var1 = [$var1]"
    echo "var2 = [$var2]"
    var1=world    #会报错,只读类型的变量不可以被修改
    var2=world
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    readonly变量

    #!/bin/bash
    
    var1=hello
    echo "var1 = [$var1]"  
    unset var1     # 取消变量定义,
    echo "unset后var1 = [$var1]"  
    
    readonly var2=world
    echo "var2 = [$var2]"
    unset var2      # 不能取消只读变量的定义
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    unset

    #!/bin/bash
    
    var='hello'
    function local_var() {
        echo "函数内调用全局变量var = [$var]"
        local var='word'
        echo "局部变量var = [$var]"
    }
    
    local_var
    echo "全局变量var = [$var]"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    local

    5 命令置换符

    命令置换符 : 将命令的执行结果赋值给某个变量
    变量名=shell命令 # 反向单引号,键盘中TAB按键上边的那个按键
    变量名=$(shell命令)

    #!/bin/bash
    
    currentDir=`pwd`
    homeDirFil=$(ls ~)
    
    echo $currentDir
    echo $homeDirFil
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    命令置换符

  • 相关阅读:
    【译】defer-panic-and-recover
    SqlServer在尝试加载程序集 ID 65917 时 Microsoft .NET Framework 出错。服务器可能资源不足,或者不信任该程序集
    Hadoop知识点之Hadoop发展历程
    RHCE-VDO
    WINGREEN 034STM4-00-200-RS 输入输出模块
    前端,关于一个骚气的页面阅读定位图(菜单)
    游戏研发的解决方案有哪些?
    在Ubuntu中启用root用户登录SSH
    Elasticsearch:运用向量搜索通过图像搜索找到你的小狗
    电子统计台账:中文标记月度流水账格式数据的转换,以及过滤模板的普遍适配性
  • 原文地址:https://blog.csdn.net/qq_41555003/article/details/126443711