• shell脚本之三:shell变量知识进阶与实践


    三、SHELL变量知识进阶与实践

    (一)shell特殊位置变量

    1.获取脚本的名字($0)

    $0:获取脚本的名字,如果脚本前跟着路径的话,那就获取路径加上脚本名字。
    企业应用:一般在脚本最后,使用$0获取脚本的路径和名字给用户。
    

    2、获取脚本的第n个参数($n)

    $n:获取脚本后的第n个参数,n大于9以后,数字需要用大括号括起来。
    企业应用:脚本中,提取第n个参数。
    

    3、获取脚本的所有参数个数($#)

    $#:脚本后所有参数的个数。
    企业应用:判断参数个数。
    

    4、获取脚本的所有参数

    $*:获取shell脚本中所有的参数。所有单数是一个整体:"$1,$2,$3"
    $@:获取脚本的所有参数。每个参数是一个整体:"$1","$2","$3"
    当需要接收脚本后所有参数,但是又不知道个数的时候,使用$*,$#
    两者区别:
    [root@centos6-kvm3 scripts]# cat test.sh
    #!/bin/bash
    for arg in "$*"
    do
     echo $arg
    done
    
    echo ------
    for arg1 in "$@"
    do
      echo $arg1
    done
    
    echo $#
    
    [root@centos6-kvm3 scripts]# bash test.sh "i am" oldboy teacher.
    i am oldboy teacher.
    ------
    i am
    oldboy
    teacher.
    3
    [root@centos6-kvm3 scripts]# 
    

    (二)shell进程特殊状态变量

    ①$?:获取上一个命令的返回值,返回值为0,表示成功,非0,表示失败。
    ②$$:获取当前执行脚本的进程号。
    ③$!:获取上一个后台工作的进程的进程号。
    ④$_:获取在此前执行命令或者脚本的最后一个参数。
    

    (三)shell变量子串知识及实践(变量内容)

    1、获取变量长度

    [root@centos6-kvm3 scripts]# oldboy="i am oldboy"
    [root@centos6-kvm3 scripts]# echo ${oldboy}
    i am oldboy
    ${#变量}:获取变量字符个数。
    [root@centos6-kvm3 scripts]# echo ${#oldboy}
    11
    [root@centos6-kvm3 scripts]# echo ${oldboy}|wc -L
    11
    计算变量字符个数方法2:
    [root@centos6-kvm3 scripts]# expr length "$oldboy"
    11
    计算变量字符个数方法3:
    [root@centos6-kvm3 scripts]# echo $oldboy| awk '{print length }'
    11
    [root@centos6-kvm3 scripts]# echo $oldboy| awk '{print length($0) }'
    11
    [root@centos6-kvm3 scripts]# echo $oldboy| awk '{print length($1) }'
    1
    获取变量第二个参数后参数:
    [root@centos6-kvm3 scripts]# echo ${oldboy:2}
    am oldboy
    [root@centos6-kvm3 scripts]# echo ${oldboy:2:2}
    am
    [root@centos6-kvm3 scripts]#
    

    2、匹配变量子串

    ${参数#字符串}:匹配开头,删除最短匹配。
    [root@centos6-kvm3 scripts]# OLDBOY=abcABC12345ABCabc
    [root@centos6-kvm3 scripts]# echo ${OLDBOY}
    abcABC12345ABCabc
    [root@centos6-kvm3 scripts]# echo ${OLDBOY#a*C}
    12345ABCabc
    ${参数##字符串}:匹配开头,删除最长匹配。
    [root@centos6-kvm3 scripts]# echo ${OLDBOY##a*C}
    abc
    ${参数%字符串}:匹配结尾,删除最短匹配。
    [root@centos6-kvm3 scripts]# echo ${OLDBOY%a*c}
    abcABC12345ABC
    ${参数%%字符串}:匹配结尾,删除最长匹配。
    [root@centos6-kvm3 scripts]# echo ${OLDBOY%%a*c}
    
    [root@centos6-kvm3 scripts]# 
    

    3、替换字符串里的子串

    ${变量/part/string}:使用string替换part第一个匹配项。
    [root@centos6-kvm3 scripts]# oldboy="i am oldboy oldboy"
    [root@centos6-kvm3 scripts]# echo ${oldboy/oldboy/oldgirl}
    i am oldgirl oldboy
    ${变量//part/string}:使用string替换part所有匹配项。
    [root@centos6-kvm3 scripts]# echo ${oldboy//oldboy/oldgirl}
    i am oldgirl oldgirl
    [root@centos6-kvm3 scripts]# 
    

    (四)shell特殊变量扩展知识

    1、变量临时赋值

    result=${变量:-word}:当变量为空时候,将word赋值给result。冒号可以省略。
    [root@centos6-kvm3 scripts]# result=${test:-UNSET}
    [root@centos6-kvm3 scripts]# echo $result
    UNSET
    [root@centos6-kvm3 scripts]# echo $test
    企业应用:
    [root@centos6-kvm3 scripts]# find ${path:-/tmp} -name  "*.log" -mtime +7| xargs rm -f
    [root@centos6-kvm3 scripts]#
    

    2、变量赋值

    result=${变量:=word},变量为空时候,work复制给result,同时复制给变量。
    [root@centos6-kvm3 scripts]# result=${test:=UNSET}
    [root@centos6-kvm3 scripts]# echo ${result}
    UNSET
    [root@centos6-kvm3 scripts]# echo ${test}
    UNSET
    [root@centos6-kvm3 scripts]# 
    

    3、变量赋值提示

    ${变量:?word}:当变量为空时候,提示word。
    
    [root@centos6-kvm3 scripts]# result=${test1:?变量为空}
    -bash: test1: 变量为空
    [root@centos6-kvm3 scripts]# echo $result
    UNSET
    [root@centos6-kvm3 scripts]# echo $test1
    
    [root@centos6-kvm3 scripts]# test1=oldboy
    [root@centos6-kvm3 scripts]# result=${test1:?变量为空}
    [root@centos6-kvm3 scripts]# echo $result
    oldboy
    [root@centos6-kvm3 scripts]#
    

    4、变量赋值覆盖

    ${变量:+word}:如果前面变量为空,什么不做,如果不为空,进行覆盖。
    [root@centos6-kvm3 scripts]# result1=${test2:+wordk}
    [root@centos6-kvm3 scripts]# echo ${result1}
    
    [root@centos6-kvm3 scripts]# echo ${test2}
    
    [root@centos6-kvm3 scripts]# test2=2
    [root@centos6-kvm3 scripts]# result1=${test2:+wordk}
    [root@centos6-kvm3 scripts]# echo ${result1}
    wordk
    [root@centos6-kvm3 scripts]# echo ${test2}
    2
    [root@centos6-kvm3 scripts]# 
    
  • 相关阅读:
    CSS伪元素:before/CSS伪元素:before/:after content 显示Font Awesome字体图标:after content 显示Font Awesome字体图标
    window.requestAnimationFrame
    HTML5 canvas clearRect() 方法
    canvas save()和canvas restore()状态的保存和恢复使用方法及实例
    git -分支管理(创建、推送、删除)
    微信小程序设置域名、不校验域名
    微信小程序访问豆瓣api403问题解决方发法
    干货:Vue粒子特效(vue-particles插件)
    chmod命令详细用法
    Python新式类和旧式类的区别
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/12791368.html
Copyright © 2020-2023  润新知