• 看懂Shell脚本速成—变量


    1 变量

    1.1脚本参数

         

    示例:

      脚本:

      

    #!bin/bash
    
    #参数示例
    echo "************************************************************"
    echo "This is $# ,value $# (参数个数)"
    echo "This is $* ,value $* (所有传参)"
    echo "This is $1 ,value $1 (传参1)"
    echo "This is $2 ,value $2 (传参2)"
    echo "This is $$ ,value $$ (脚本运行的当前进程ID)"
    echo "This is $! ,value $! (后台最后一个进程ID号)"
    echo "This is $@ ,value $@ (与$*相同,使用需要加引号)"
    echo "This is $? ,value $? (显示最后命令执行状态,0为没有错误"
    echo "************************************************************"

      结果 

           

    Tips: 脚本中如何获取绝对路径?

    答:

    #!bin/bash
    
    #获取当前脚本绝对路径
    BASE_PATH=$(cd `dirname $0`; pwd);
    echo "$(cd \`dirname $0\`; pwd)" $BASE_PATH
     #dirname $0,取得当前执行的脚本文件的父目录
     #cd `dirname $0`,进入这个目录(切换当前工作目录)
     #pwd,显示当前工作目录(cd执行后的)

    1.2 shell中命令替换、变量子串、数学加减符号使用

    1.2.1 命令替换  ` ` 和 $( )

      说明: ` ` (反引号)和 $( )来作命令替换。先完成符号内的命令行,再将其结果替换出来。

      区别:` `更通用,$()部分系统不支持

      示例:

    #!bin/bash
    echo $(pwd)
    echo `ls -l`

      执行结果

     1.2.2 变量子串 ${}

      变量截取

     # 是左边开始

       % 是去掉右边

           单一符号(#或%)是最小匹配;两个符号是最大匹配(##或%%)

       *是用来匹配不要的字符,也就是想要去掉的那部分

       还有指定字符分隔号,与*配合决定取哪部分

       示例:

    #!bin/bash
    
    echo "***********去掉从左边数第一个.左边的**************"
    values=left.right.last
    echo "原始值 $values ,${values#*.} 修改后" ${values#*.}
    echo "*************************************************"
    
    echo "***********去掉从右边数第一个.右边的**************"
    echo "原始值 $values ,${values%.*} 修改后" ${values%.*}
    echo "*************************************************"
    
    value2=one.two.last
    echo "***********去掉从左边数最后一个.左边的***********"
    echo "原始值 $value2 ,${value2##*.} 修改后" ${value2##*.}
    echo "*************************************************"
    
    echo "***********去掉从右边数最后一个.右边的************"
    echo "原始值 $value2 ,${value2%%.*} 修改后" ${value2%%.*}
    echo "*************************************************"

    运行结果

       

     取子串及替换

     ${value:start:len} 取value从start开始长为len的值

     ${value/val1/val2} 将第一个val1换为val2

     ${value//val1/val2} 将所有val1换为val2

     ${#value} 获取变量长度

     示例:

    #!bin/bash
    values=left.right.last
    echo "******************截取开头4位********************"
    echo "原始值 $values ,${values:0:4} 修改后" ${values:0:4}
    echo "*************************************************"
    
    echo "******************替换第一个.为|**************"
    echo "原始值 $values ,${values/./|} 修改后" ${values/./|}
    echo "*************************************************"
    
    e*-
    cho
    "******************替换所有.为|**************" echo "原始值 $values ,${values//./|} 修改后" ${values//./|} echo "*************************************************"

    结果:

     根据状态为变量赋值

    命令解释备注
    ${file-my.file.txt} 若 $file 没设定,则使用 my.file.txt 作传回值 空值及非空值不作处理
    ${file:-my.file.txt} 若 $file 没有设定或为空值,则使用 my.file.txt 作传回值 非空值时不作处理
    ${file+my.file.txt} 若$file 设为空值或非空值,均使用my.file.txt作传回值 没设定时不作处理
    ${file:+my.file.txt} 若 $file 为非空值,则使用 my.file.txt 作传回值 没设定及空值不作处理
    ${file=txt} 若 $file 没设定,则回传 txt ,并将 $file 赋值为 txt 空值及非空值不作处理
    ${file:=txt} 若 $file 没设定或空值,则回传 txt ,将 $file 赋值为txt 非空值时不作处理
    ${file?my.file.txt} 若 $file 没设定,则将 my.file.txt 输出至 STDERR 空值及非空值不作处理
    ${file:?my.file.txt} 若 $file没设定或空值,则将my.file.txt输出至STDERR 非空值时不作处理

    1.2.3 $(( ))与整数运算

    1)在(())中可使用数学+-*/符号

    2)$(( ))可以将其他进制转成十进制数显示出来。 

          示例:

    [root@localhost ~]# echo $((2#110))
    6
    [root@localhost ~]# echo $((16#2a))
    42
    [root@localhost ~]# echo $((8#11))
    9
  • 相关阅读:
    泊松盘采样(Poisson Disk Sampling)生成均匀随机点
    JSON神器之jq使用指南指北
    SSH(sshd)终极安全加固指南
    rocketmq 搭建配置
    SQL 片段: select top 100
    安装netframework4.8 或 .net 4.6.2 时 弹出“已处理证书链,但是在不受信任提供程序信任的根证书中终止”错误的解决方法
    win7 离线安装 vs2019 出现闪退解决办法(非常实用)
    在win7 上安装 Visual Studio 2019 步骤 及 vs2019离线安装包
    VMware 宿主机与虚拟机之间 共享剪切板 失效问题
    安装netframework4.8弹出“已处理证书链,但是在不受信任提供程序信任的根证书中终止”错误的解决方法
  • 原文地址:https://www.cnblogs.com/zzzmublog/p/12081270.html
Copyright © 2020-2023  润新知