zoukankan      html  css  js  c++  java
  • shell脚本之变量

    1.shell脚本中可使用的变量

    系统环境变量
    无需再脚本中定义,可直接使用 ${变量名} 引用该变量
    
    用户变量 脚本中定义的变量,包括字符串变量和数值变量

    2. 变量命名遵守的规则

    变量名首个字符不能以数字开头
    变量名不能与系统命令或变量或关键字冲突
    变量名中不能包含空格,可以包含下划线(_)
    变量名区分大小写

    3.变量定义

    3.1 直接定义变量

    var=value
    var='value' var="value"
    若value中不含空格键或者tab键,三种方式都可以使用
    否则,使用第二,三种方式

    其中: 单引号:强引用,value是什么就会输出什么 双引号:弱引用,value可以引用其他变量

    3.2 命令结果定义变量

    var=`command`
    var=$(command)
    
    命令执行的结果作为变量,``为反引号字符,位置在键盘数字1的左边的英文字符

    3.3 read命令定义变量

    read -p "提示用户输入的描述" var
    
    该方法会把用户输入的内容作为变量
    
    read选项;
    -a:后接数组变量,将用户输入有内容储存到数组中(输入的内容用空格隔开)
    -p:给出用户提示
    -n:定义变量长度,后跟正整数
    -t:超时时间,用户在时间内未输入,则退出并返回错误
    -r:禁用的转义功能,有改选项,""表示正常的字符
    -s:静默模式,输入的内容不会回显在屏幕上,常用于输入密码

    4.变量使用

    ${var}
    
    引用变量时外面的花括号是可选的,加花括号是用于声明变量的边界,最好加上

    5.变量的截取替换

    用法

    ${#var}                    返回变量长度
    
    ${var/string/newstring}    返回第一个string被替换成newstring的结果
    ${var//string/newstring}   返回所有string被替换成newstring的结果
    
    ${var:start_index}         返回从索引start_index(即第start_index+1个字符)开始截取一直到末尾的结果
    ${var:start_index:length}  返回从索引start_index开始截取的长度为length的结果
    ${var:0-m}                 返回从右边第m个字符开始一直到结束的结果
    ${var:0-m:length}          返回从右边第m个字符开始的长度为lenght的结果
    
    
    ${var#*string}            删除从左边开始的第一个string和左边所有字符,保留右边
    ${var##*string}           删除从左边开始的最后string和左边所有字符,保留右边
    ${var%string*}            删除从右边开始的第一个string和右边所有字符,保留左边
    ${var%%string*}           删除从右边开始的最后一个string和右边所有字符,保留左边
    
    
    ${var:-word}              若变量var未赋值或为null,则返回结果word
    ${var:=word}              若变量var未赋值或为null,则返回结果word,并且var=word
    ${var:?word}              若变量var未赋值或为null,则输出错误信息,否则返回结果${var}
    ${var:+word}              若变量var已赋值或不为null,则返回结果word

    示例

    var='https://www.cnblogs.com/gudanaimei/p/12218994.html'
    
    echo ${#var} 
    结果:50
    
    echo ${var/w/test}
    结果:https://testww.cnblogs.com/gudanaimei/p/12218994.html
    
    echo ${var//w/test}
    结果:https://testtesttest.cnblogs.com/gudanaimei/p/12218994.html
    
    echo ${var:3}
    结果:ps://www.cnblogs.com/gudanaimei/p/12218994.html
    
    echo ${var:3:10}
    结果:ps://www.c
    
    echo ${var:0-15}
    结果;p/12218994.html
    
    echo ${var:0-15:6}
    结果:p/1221
    
    echo ${var#*o}
    结果:gs.com/gudanaimei/p/12218994.html
    
    echo ${var##*o}
    结果:m/gudanaimei/p/12218994.html
    
    echo ${var%o*}
    结果:https://www.cnblogs.c
    
    echo ${var%%o*}
    结果:https://www.cnbl

    6.常见位置变量

    $$     返回程序的PID
    $0     脚本本身   
    $1     脚本运行时接的第一个参数
    $2     脚本运行时接的第二个参数
    $3     脚本运行时接的第三个参数
    $*=$@  脚本运行时接的所有参数
    $#     脚本运行时后面接的参数的个数
    $?     上一条命令执行成功则返回0,失败则返回非0 

    7.数值变量的运算

    7.1 运算符

    +     加法
    -     减法
    *     乘法
    /    除法
    **    次方运算(bc不能使用)
    %    取余

    7.2 整数运算

    (())、let、expr、$[]
    
    a=1
    b=3
    
    c=$((${a}+${b}))
    let c=a+b
    c=$(expr ${a} + ${b})
    c=$[${a}+${b}]

    7.3浮点数运算

    a=2.5
    b=3.5
    
    c=$(echo ${a}+${b}|bc)
  • 相关阅读:
    欢迎加入强哥的 Android 开发交流群
    HashMap和ConcurrentHashMap的区别,HashMap的底层源码
    angular ngIf 导致不点击屏幕,就无法显示内容的问题
    angular date 过滤器不兼容 ios 造成 列表循环渲染错误的问题
    部署Node.js到阿里云服务器CentOs
    使用手淘VW适配方案后造成伪类使用content报错的解决办法
    Vue 加载 Sass Loader 报错的解决方案
    Typescript中private、public、protected修饰符的区别
    搭建Android开发环境 以及 ionic 编译安卓app步骤
    前端开发规范:3-CSS
  • 原文地址:https://www.cnblogs.com/gudanaimei/p/13186584.html
Copyright © 2011-2022 走看看