美文网首页
Shell基础变量

Shell基础变量

作者: 冬月廿拾 | 来源:发表于2019-06-24 21:45 被阅读0次

    变量的定义及使用

    变量定义类似于python
    shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串

    a="home" 
    b=asdads 
    c=112 
    array=(1 2 3) #数组
    
    d="hello world" #带空格需要使用单引号或双引号
    e="$a"  #双引号会转义
    f='${a}'   #单引号不会
    
    ###变量的使用
    echo $e && echo $f
    -->home 
    -->${a}
    echo `ls`  #输出ls执行的结果
    

    预定义变量

    echo $PATH #输出path变量
    echo $PWD #输出pwd的执行结果
    echo $RANDOM #随机整数
    $? #最后一次执行的命令返回状态,0为成功,非0为失败
    $$ #当前进程的进程号
    $! #后台运行的最后一个进程的进程号
    

    数字变量的操作

    i=1
    ((i=i+1))  #i=2
    ((i+=1))  #i=3
    ((i=i/2))  #i=3/2=1  #不会产生小数
    awk 'BEGIN{print 1/3}'  #小数运算
    awk 'BEGIN{printf("%.2f\n", 1/3)}'    #格式化,保留2位小数
    

    字符串操作

    a=12345
    echo ${a:4}  #获取指定位置的字符从0开始
    -->5
    

    {value:offset:length} 从变量中提取子串{#value} 字符串长度

    掐头去尾与内容替换

    ${value#pattern} ${value##pattern} #表示掐头 
    ${value%pattern} ${value%%pattern} %表示去尾 
    ${value/pattern/string} 
    ${value//pattern/string} /表示替换 
    #与## %与%% /与//的区别:最短匹配模式VS最长匹配模式 
    ${var/#Pattern/Replacement} ${var/%Pattern/Replacement}
    
    b=asdasd
    echo ${b#as}  #dasd
    echo ${b##*as}  #d
    echo ${b%as*}  #asd
    echo ${b%%as*}  #
    echo ${b/a/A}  #Asdasd
    
    echo $b | awk '{print substr($0,2,3)}'   #sda
    echo $b|sed 's#a#A#g'  #AsdAsd
    

    布尔变量

    • true
    • false
    • 命令执行返回值 $?
      1.任何命令执行都会有一个返回值 0表示正确
      2.非0表示错误

    判断的类型

    • 算术判断
    • 字符串判断
    • 逻辑判断
    • shell内置判断
    算术判断
    • [ 2 –eq 2 ] 相等
    • [ 2 –ne 2 ] 不等
    • [ 3 –gt 1 ] 大于
    • [ 3 –ge 3 ] 大于等于 [ 3 –lt 4 ] 小于
    • [ 3 –le 3 ] 小于等于 (())也可以表示算术比较。((10>=8)) ,((10==10))

    [ string1 = string2 ] 如果两字符串相同,则结果为真
    [ string1 != string2 ] 如果两字符串不相同,则结果为真
    [ -n $var ] 如果字符串不是空,则结果为
    [ -z $var ] 如果字符串是空,则结果为真
    [[ "xxxx" == x* ]] 在表达式中表示0或者多个字符
    [[ xxx == x?? ]] 在表达式中表示单个字符

    字符串比较

    a=asd
    b=qwe
    if [ $a = $b ];then echo true;else echo false;fi   #判断相等
    false
    if [ $a != $b ];then echo true;else echo false;fi  #判断不等
    true
    if [ -z $b ];then echo true;else echo false;fi  #判断非空
    false
    if [[ "xxx" == x* ]];then echo true;else echo false;fi  #判断x开始的0或多个字符
    true
    if [[ "xxx" == x?? ]];then echo true;else echo false;fi  #判断x开始后面还有两个字符
    true
    if [[ "xxx" == x??? ]];then echo true;else echo false;fi
    false
    

    逻辑判断

    [ 2 -ge 1 -a 3 -ge 4 ];echo $? #与
     [ 2 -ge 1 -o 3 -ge 4 ];echo $? #或
    [[ 2 -ge 1 && 3 -ge 4 ]];echo $? #与 
    [[ 2 -ge 1 || 3 -ge 4 ]];echo $? #或
    [ ! 2 -ge 1 ];echo $? #非
    

    内置判断

    -e file 如果文件存在,则结果为真
    -d file 如果文件是一个子目录,则结果为真
    -f file 如果文件是一个普通文件,则结果为真
    -r file 如果文件可读,则结果为真
    -s file 如果文件的长度不为0,则结果为真
    -w file 如果文件可写,则结果为真
    -x file 如果文件可执行,则结果为真

    数组变量

    a=(1 2 3 45 6)
    echo ${a[*]}  #输出为字符串
    1 2 3 45 6
    for i in "${a[@]}";do echo $i;done  输出为数组
    1
    2
    3
    45
    6
    for i in "${a[*]}";do echo $i;done  #输出为字符串
    1 2 3 45 6
    

    相关文章

      网友评论

          本文标题:Shell基础变量

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