美文网首页
Shell变量

Shell变量

作者: 村东头老骥 | 来源:发表于2020-02-07 10:54 被阅读0次

    Shell 变量

    变量的分类

    • 本地变量
    • 全局变量
    • shell 内置变量

    本地变量

    本地变量就是:在当前系统的某个环境下才能生效的变量,作用范围小。
    本地变量的分类

    • 普通变量
    • 命令变量

    普通变量

    方式一:
      变量名=变量值 
      重点:变量值必须是一个整体,中间没有特殊字符 
    方式二:
      变量名='变量值' 
      重点:我看到的内容,我就输出什么内容 
    方式三:
      变量名="变量值" 
      重点:如果变量值范围内,有可以解析的变量A,那么首先解析变量A,将A的结果和其他内容组合成一个整体,重 新赋值给变量B
    

    命令变量

    定义方式一:
      变量名=`命令` 
      注意:` 是反引号 
     定义方式二:
       变量名=$(命令)
    

    全局变量

    全局变量就是:在当前系统的所有环境下都能生效的变量。
    查看全局变量命令 可以通过命令查看环境变量 env
    定义全局变量

    方法一:
        变量=值 export 变量 
    方法二:
      (最常用) export 变量=值
    

    变量查看和取消

    方式一:$变量名 场景:私下里,在命令行/脚本中使用 图省事 
    方式二:"$变量名" 场景:私下里,在命令行/脚本中使用 图省事 
    方式三:${变量名} 场景:echo " dsa dsafsa dsafsa ${变量名} f " 使用频率较高 
    方式四:"${变量名}" 场景:标准使用方式
    

    取消变量

    unset 变量名
    

    Shell内置变量

    • $0 获取当前执行的shell脚本文件名
    • $n 获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大 括号括起来${10}
    • $# 获取当前shell命令行中参数的总个数
    • $? 获取执行上一个指令的返回值(0为成功,非0为失败)

    $0 获取脚本的名称

    #!/bin/bash 
    # 获取脚本的名称 
    echo "我脚本的名称是: file.sh" 
    echo "我脚本的名称是:$0"
    

    $# 获取当前脚本传入参数的数量

    • $n 获取当前脚本传入的第n个位置的参数
    #!/bin/bash 
    # 获取当前脚本传入的参数数量 
    echo "当前脚本传入的参数数量是: $#" 
    # 获取指定位置的参数 
    echo "第一个位置的参数是: $1" 
    echo "第二个位置的参数是: $2" 
    echo "第三个位置的参数是: $3" 
    echo "第四个位置的参数是: $4"
    
    

    $? 获取文件执行或者命令执行的返回状态值

    # bash nihao bash: nihao: No such file or directory 
    # echo $? 127 
    # ls 
    file1.sh num.sh test.sh weizhi.sh 
    # echo $? 0
    

    字符串的精度获取

    格式:${变量名:起始位置:截取长度}
    

    示例

    ${file:0:5} 从第1个字符开始,截取5个字符 
    ${file::5} 从第1个字符开始,截取5个字符 
    ${file:5:5} 从第6个字符开始,截取5个字符 
    ${file:5} 从第6个字符开始,截取后面所有的字符 
    ${file:0-5} 从倒数第5个字符开始,截取后面所有的字符 
    ${file:0-6:3} 从倒数第6个字符开始,截取之后的3个字符
    

    变量的默认值

    • 变量a如果有内容,那么就输出a的变量值
    • 变量a如果没有内容,那么就输出默认的内容
    ${变量名:-默认值}
    

    套餐示例

    • 如果我输入的参数为空,那么输出内容是 "您选择的套餐是: 套餐 1"
    • 如果我输入的参数为n,那么输出内容是 "您选择的套餐是: 套餐 n"
    #!/bin/bash 
    # 套餐选择演示 
    a="$1" 
    echo "您选择的套餐是: 套餐 ${a:-1}"
    

    无论变量a是否有内容,都输出默认值
    格式

    ${变量名+默认值}
    

    场景示例:不管我说国家法定结婚年龄是 多少岁,都输出 国家法定结婚年龄(男性)是 22 岁

    #!/bin/bash 
    # 默认值演示示例二 
    a="$1" 
    echo "国家法定结婚年龄(男性)是 ${a+22} 岁"
    

    变量的运算

    [root@localhost shell]# n=$(expr 1 + 2)
    [root@localhost shell]# echo $n
    3
    [root@localhost shell]# echo $[1+2]
    3
    [root@localhost shell]# echo $[ 1 + 2 ]
    3
    [root@localhost shell]# echo $((1+2))
    3
    

    条件测试

    格式

    • test 条件表达式
    • [ 条件表达式 ]
    • [[ 条件表达式 ]]
    判断是否是一个目录
    [root@localhost shell]# test -d /home/| echo $?
    0
    判断是否为一个文件
    [root@localhost shell]# test -f ./test.sh| echo $?
    0
    判断是否是可执行文件
    [root@localhost shell]# test -x ./test.sh| echo $?
    0
    判断是否为当前用户的文件
    [root@localhost shell]# test -O ./test.sh| echo $?
    0
    判断文件是否存在
    [root@localhost shell]# test -e ./test.sh| echo $?
    0
    判断文件是否可读
    [root@localhost shell]# test -r ./test.sh| echo $?
    0
    判断变量的长度
    [root@localhost shell]# say=hello
    [root@localhost shell]# test -z $say | echo $?
    1
    [root@localhost shell]# no=''
    [root@localhost shell]# test -z $no | echo $?
    0
    判断变量是否被定义
    [root@localhost shell]# hello=word
    [root@localhost shell]# test -z $hello | echo $?
    

    相关文章

      网友评论

          本文标题:Shell变量

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