• Shell变量


    1、位置变量
    $1-$n,需要注意从第10个开始写成${10},${20}
    shift可对位置变量控制,如:
    #!/bin/sh
    echo "1:$1"
    shift
    echo "2:$2"
    shift
    echo "3:$3"
    #sh test.sh a b c
    1:a
    2:c
    3:
    每次执行一次shift命令,位置变量个数会减一,而变量值则提前一位。shift n,可设置向前移动n位。

    2、特殊变量
    $0:脚本自身名字
    $?:返回上一次命令是否执行成功,0为执行成功,非0则为执行失败
    $#:位置参数总数
    $*:所有的位置参数被看做一个字符串
    $@:每个位置参数被看做独立的字符串
    $$:当前进程PID

    3、变量引用
    赋值运算符:=,两个变量相加:+=

    3.1、自定义变量与引用
    #VAR=123
    #echo $VAR
    123
    #VAR+=456
    #echo $VAR
    123456
    有时个别特殊字符会影响正常引用,那么需要使用${VAR},如:
    #VAR=123
    #echo $VAR_ Shell允许VAR_为变量名,所以Shell认为这是个有效的变量名,故不会输出123
    #echo ${VAR}_
    123_
    #echo $VAR456 变量名与其它字符串紧挨着也会认为是整个变量
    #echo ${VAR}456
    123456

    3.2、将命令结果作为变量值
    #VAR=`echo 123`
    #echo $VAR
    123
    #$VAR=$(echo 123)
    123
    反引号等效于$( ),都是用于执行Shell命令

    3.3、双引号和单引号
    #N=3
    #VAR="1 2 $N"
    #echo $VAR
    1 2 3
    #N=3
    #VAR='1 2 $N'
    #echo $VAR
    1 2 $N
    单引号忽略特殊字符,面双引号则解释特殊符号原有的意义,比如$、!

    4、变量字符串截取
    4.1、获取变量字符串长度
    #VAR='hello world!'
    #echo $VAR
    hello world!
    #echo ${#VAR}(注:空格也算一个字符串)
    12

    4.2、变量字符串切片
    注意:起始字符的索引从0开始计数(从前面和从后面都是从0开始计数)
    #VAR='hello world!'
    #echo ${VAR:0:5} 截取hello字符串(从0开始到第五个字符)(不包括第五个字符)
    hello
    #echo ${VAR:0-6:5} 截取world字符串(从倒数第六个字符开始向后数五个字符)
    world
    #echo ${VAR:0-1} 保留最后一个字符串
    !
    #echo ${VAR:0} 截取所有字符
    hello world!

    4.3、替换变量字符串
    #VAR='hello world world!'
    #echo ${VAR/world/WORLD} 将第一个字符串替换为WORLD
    hello WORLD world!
    #echo ${VAR//world/WORLD} 将全部world字符串替换为WORLD
    hello WORLD WORLD!

    4.4、变量字符串截取
    #:去掉左边,从左边匹配第一个,##从右边匹配第一个。
    %:去掉右边,从右边匹配第一个,%%从左边匹配第一个。
    注:有*号情况下才这样
    #URL="http://www.baidu.com/baike/user.html"
    #echo ${URL#*//} 一个#表示从左到右最短匹配
    www.baidu.com/baike/user.html
    #echo ${URL##*/} 两个#表示从左到右最长匹配
    user.html
    #echo ${URL%/*} 一个%表示从右到左最短匹配
    http://www.baidu.com/baike
    #echo ${URL%%//*} 两个%%表示从右到左最长匹配
    http:
    #echo ${URL%.*} 以. 为分隔符截取左边
    http://www.baidu.com/baike/user
    #echo ${URL##*.} 以. 为分隔符截取右边
    html

    表达式 含义:VAR=abcABC123abc
    ${VAR} 返回变量的内容
    ${#VAR} 返回变量的字符长度
    ${VAR:1} 保留第二个到最后一个字符
    ${VAR:1:3} 1表示从左边第二个字符开始,3表示字符的总个数
    ${VAR#a*c} 删除最短匹配从a开始到c结束的字符,*为所有字符
    ${VAR##a*c} 删除最长匹配从a开始到c结束的字符,*为所有字符
    ${VAR%a*c} 从未尾开始删除最短a开始到c结束的字符
    ${VAR%%a*c} 从未尾开始删除最长a开始到c结束的字符
    ${VAR/abc/ABC} 替换第一个匹配的abc
    ${VAR//abc/ABC} 替换所有的abc


    5、变量状态赋值
    ${VAR:-string} 如果VAR变量为空则返回string
    ${VAR:+string} 如果VAR变量不为空则返回string
    ${VAR:=string} 如果VAR变量为空则重新赋值VAR变量为string
    ${VAR:?string} 如果VAR变量为空则将{ }里的内容输出
    #VAR=
    #echo ${VAR:-'hello world!'}
    hello world!
    #VAR="hello"
    #echo ${VAR:+'hello world!'}
    hello world!
    #VAR=
    #echo ${VAR:=hello}
    hello
    #echo $VAR
    hello
    #VAR=
    #echo ${VAR:?value is null}
    -bash: VAR: value is null

  • 相关阅读:
    Sigma Function 数学 因子求和
    luogu P3800 Power收集
    LibreOJ #110. 乘法逆元
    luogu P3802 小魔女帕琪
    LibreOJ #6000. 「网络流 24 题」搭配飞行员
    LibreOJ #103. 子串查找
    LibreOJ #102. 最小费用流
    LibreOJ #109. 并查集
    BZOJ 1922: [Sdoi2010]大陆争霸
    LibreOJ #119. 最短路
  • 原文地址:https://www.cnblogs.com/xwupiaomiao/p/9823624.html
Copyright © 2020-2023  润新知