Shell-Bash变量与运算符

作者: 傻子般白痴 | 来源:发表于2020-05-07 00:19 被阅读0次

    1、Bash中变量定义的规则

    说明:

    • 变量名称,有字母,数字和下划线组成,但是不能以数字开头
    • 在 Bash 中变量的默认类型是字符串类型,如果需要定义数值类型需要特殊声明
    • 变量定义使用等号连接,等号左右两边不能有空格
    • 变量的值如果有空格,需要使用单引号或者双引号包括起来。
    • 使用$变量名 或者 ${变量名} 可以进行变量值的叠加
    • 将命令的结果复制给变量,需要使用反引号,或者$()包含命令
    • 环境变量建议大写

    样例:

    命令复制给变量:
    curDate=$(date)
    echo curDate
    

    2、变量的分类

    (1)说明:
    • 用户自定义变量: 由用户自由定义变量名和变量值,
    • 环境变量:环境变量分为系统环境变量和用户环境变量。其中系统环境变量不允许修改变量名称和变量作用,允许修改变量内容。而用户环境变量是允许修改的。
    • 位置参数变量: 用来向脚本中传递参数或数据,变量名不能自定义,变量作用也是固定的,但是变量内容是自定义的。
    • 预定义变量: Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
    (2)样例:
    用户自定义变量:
    variableTest='test value'
    
    (3) 变量比较
    变量类型 名称 作用 内容
    用户自定义变量 允许自定义 允许自定义 允许自定义
    环境变量 禁止自定义 禁止自定义 允许自定义
    位置参数变量 禁止自定义 禁止自定义 允许自定义
    预定义变量 禁止自定义 禁止自定义 允许自定义

    3、用户自定义变量

    (1)变量的定义
    varName='varContent'   # 注意左右两边不能有空格
    
    (2) 调用变量
    echo $varName
    
    (3) 变量查看

    set命令说明:

    set  [选项]
    选项:
        -u: 设定此项后,调用未声明的变量会报错。重启会失效。在未设置的情况下,Bash 自身无法区分空变量和未定义变量.
        -x: 设定此项之后,在命令执行之前会先把命令输出一次。
    
    (4) 变量删除

    unset 命令说明:

    unset  [选项]
    选项:
      -f: 仅删除函数。 
      -v: 仅删除变量。
    

    unset 样例:

    lh="ls -lh"  #定义变量
    $lh # 使用变量
    unset -v lh  #删除变量
    

    4、环境变量

    (1)环境变量设置:

    export命令说明:

    • export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。

    export命令语法:

    export [选项] [变量名称]=[变量设置值]
    [选项]:
        -f  代表[变量名称]中为函数名称。
        -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
        -p  列出所有的shell赋予程序的环境变量。
    
    

    export命令样例:

    export varName="varcontent"  # 使用 export 声明环境变量
    
    (2)环境变量查看

    env命令说明:

    • env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。该命令只使用"-"作为参数选项时,隐藏了选项"-i"的功能。
    • 若没有设置任何选项和参数时,则直接显示当前的环境变量。

    env命令语法:

    env [选项] [参数]
    [选项]:
        -i:开始一个新的空的环境;
        -u;<变量名>:从当前环境中删除指定的变量。
    [参数]:
        变量定义:定义在新的环境中变量,定义多个变量定义用空格隔开。格式为“变量名=值”;
        指定:指定要执行的指令和参数。
    

    env命令样例:

    [命令]:
    env | egrep -i "HOME"   #查询系统变量中USER和HOME
    [结果]:
    PATH=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Volumes/Document/apache-maven-3.3.9/bin::/Users/luoqing/.rvm/bin
    JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
    M2_HOME=/Volumes/Document/apache-maven-3.3.9
    HOME=/Users/luoqing
    JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
    JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
    
    (3)系统自带环境变量
    PATH:系统查找命令的路径

    样例:

    echo $PSTH
    /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/luoqing/.rvm/bin
    

    自定义脚本执行:

    • 将脚本复制到 PATH 中的某个目录下: cp ./shell.sh /usr/local/bin
    • 将脚本路径添加到系统环境变量中: PATH=${PATH}:/Users/luoqing/test/
    PS1:命令提示符设置

    样例:

    echo $PS1
    [\u@\h \w]\$   # 
    
    LANG:定义Linux系统的主语系环境

    样例:

    [命令]:
        echo $LANG
    [结果]:
        zh_CN.UTF-8
    

    5、位置参数变量

    说明:

    位置参数变量 作用说明
    $n n 为数字,1-9分别代码第一到第九个参数,10 以上的参数需要用${n}
    $* $*会把所有的参数看作是一个整体
    $@ 该变量代表命令行中的所有参数,区别在于$@会把每个参数区别对待
    &# 该变量代表命令行中所有参数的个数

    样例:

    [脚本]:
    #!/bin/bash
    echo "验证结果:"
    echo "=======验证\$n======="
    varA=$1
    varB=$2
    sum=$(($varA+$varB))
    echo $sum
    echo $0
    echo "=======验证$@======"
    echo "\$@ is $@"
    for i in "$@"
        do 
         echo $i
        done
    echo "======验证$*======"
    echo "\$* is &*"
    for j in "$*"
        do 
         echo $j
        done
    echo "\$* is $*"
    echo "=====验证\$#===="
    echo "\&# is $#"
    
    [结果]:
    =======验证$n=======
    3
    ./count.sh
    =======验证1 2 3 4 5======
    $@ is 1 2 3 4 5
    1
    2
    3
    4
    5
    ======验证1 2 3 4 5======
    $* is &*
    1 2 3 4 5
    $* is 1 2 3 4 5
    =====验证$#====
    \&# is 5
    

    6、预定义变量

    说明:

    预定义变量 作用
    $? 最后一次 执行的命令返回的状态 ,如果这个变量的值为0,证明上一个命令正确结束。非0则命令执行异常。
    $$ 当前进程的进程号
    $! 后台运行的最后一个进程的进程号

    样例:

    [脚本]:
    #!/bin/bash
    echo "======验证预定义变量===="
    echo "===\$?==="
    pwd
    num=$?
    echo $num
    echo "===\$$==="
    echo "\$\$ is $$"
    
    echo "===\$!==="
    echo "\$! is $!"
    
    [结果]:
    ======验证预定义变量====
    ===$?===
    /Users/luoqing/Desktop/shellFile
    0
    ===$$===
    $$ is 5562
    ===$!===
    $! is
    

    7、接收键盘输入

    命令:

    read [选项] [变量名]
    [选项]:
        -p:指定读取值时的提示符;
        -t:指定读取值时等待的时间(秒)。
    [变量名]:
        指定读取值的变量名。
    

    样例:

    [命令]:
    #!/bin/bash
    echo "====read demo start...===="
    read -t 30 -p "please input var A:" varA
    read -t 30 -p "please input var B:" varB
    sum=$(($varA + varB))
    echo "result is :"$sum
    [结果]:
    ====read demo start...====
    please input var A:12
    please input var B:12
    result is :24
    

    8、shell的运算符

    (1) 数值运算的方法
    declare 命令

    说明:

    • declare命令用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项,则会显示所有shell变量及其值。
    • declare的功能与typeset命令的功能是相同的。

    语法:

    declare [选项] [参数]
    [选项]:
        +/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性;
        -f:仅显示函数;
        -a: 将变量声明为数组类型
        -i:将变量声明为整数型
        -r:将变量设置为只读;
        -x:指定的变量会成为环境变量,可供shell以外的程序来使用;
    [参数]:
        shell变量:声明的shell变量,格式为“变量名=值”。
    

    样例:

    [脚本]:
    #!/bin/bash
    echo "====declare start...===="
    varA=11
    varB=22
    sum=$varA+$varB
    echo "===未使用declear is: "$sum
    declare -i sumDeclare=$varA+$varB
    echo "===使用declear is: "$sumDeclare
    [结果]:
    ====declare start...====
    ===未使用declear is: 11+22
    ===使用declear is: 33
    
    expr 命令:数据运算工具

    说明:

    • expr命令是一款表达式计算工具,使用它完成表达式的求值操作。
      语法:
    expr [选项] [参数]
    [选项]:
        --help:显示指令的帮助信息;
        --version:显示指令版本信息。
    [参数]:
        需要计算的表达式
    

    样例:

    [脚本]:
    #!/bin/bash
    echo "====expr start...===="
    num1=12
    num2=13
    # expr 运算符左右两侧必须要有空格
    sum=$(expr $num1 + $num2)   
    echo "result:"$sum
    [结果]:
    ====expr start...====
    result:25
    
    let命令

    说明:

    • let命令是bash中用于计算的工具,提供常用运算符还提供了方幂**运算符
    • 在变量的房屋计算中不需要加上$来表示变量,如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1

    语法:

    let arg [arg ...]    #arg代表运算式
    

    样例:

    [脚本]:
    #!/bin/bash
    echo "====let start...===="
    varA=12
    varB=13
    let sum=$varA+$varB
    echo "result:"$sum
    [结果]:
    ====let start...====
    result:25
    
    推荐:$(())

    样例:

    [脚本]:
    #!/bin/bash
    echo "====let start...===="
    varA=1
    varB=3
    sum=$(($varA+$varB))
    echo "result:"$sum
    [结果]:
    ====let start...====
    result:4
    
    (2)运算符及优先级
    优先级 运算符 说明
    1 = += 赋值运算
    2 || 逻辑或
    3 && 逻辑与
    4 | 按位或
    5 ^ 按位异或
    6 & 按位与
    7 == != 等于,不等于
    8 < > <= >= 比较运算符
    9 << >> 按位左移,右移
    10 + - 加减运算
    11 * / \ 乘 除 取模
    12 ! ~ 逻辑非,补码
    13 + - 正 负

    9、变量测试

    语法:

    变量测试规则
    样例:
    [脚本]:
    #!/bin/bash
    echo "====let start...===="
    result=${testA-noDefine}
    echo "result:"$result
    [结果]:
    ====let start...====
    result:noDefine
    

    相关文章

      网友评论

        本文标题:Shell-Bash变量与运算符

        本文链接:https://www.haomeiwen.com/subject/soknghtx.html