• SHELL脚本的一些特殊用法


    • +=运算符
    数组追加:
    
    $ arr=(1 2 3)
    $ arr+=(4 5)
    
    自然地我们会想到如果一个变量是数字,是否也可以用+=作运算呢?
    
    $ i=1
    $ i+=1
    但是,运行后你会发现i的结果并不为2,而是11,这里bash并不认为i是一个整数,而是作为字符串。
    
    这时可以通过declare声明一个变量为整数,上面的问题就解决了:
    
    $ declare -i int=1
    $ int+=1
    $ echo $int
    2
    • Here document不为人知的用法
    一般的here document的用法是这样的:
    
    $ cat b.sh 
    cat<<EOF
    hello, $USER
    EOF
    $ sh b.sh 
    hello, kodango
    here document中的变量都是会被展开的,那能不能不展开呢?答案是可以的,将EOF用引号括起来就可以:
    
    $ cat b.sh 
    cat<<"EOF"
    hello, $USER
    EOF
    $ sh b.sh 
    hello, $USER
    一般here document用得最多的是在帮助函数(helpusage)函数里面,因为在这里我们要写一大段的脚本用法。
    
    如果你有强迫症(比如我),有时候使用here document的时候会很不爽,因为here document里面每行首部的空格都会被保留,而如果要顶格写,在缩进的地方又会有点打乱结构,例如:
    
    $ cat b.sh
    # part 1
    if :; then
    cat << EOF
    hello, $USER 
    EOF
    fi
    
    # part 2
    if :; then
    if :; then
    cat << EOF
    hello, $USER 
    EOF
    fi
    fi
    上面的脚本执行的结果为:
    
    $ sh b.sh 
    hello, kodango # part 1 result
    hello, kodango # part 2 result
    有没有办法既兼顾到缩进又能不保留行首空格呢?
    
    答案也是肯定的,只不过语法又要稍稍变一下,现在在<<的后面加一个短横,这个用法下,行首的Tab字符都会被忽略:
    
    $ cat b.sh 
    if :; then
    cat <<- EOF
    hello, $USER 
    EOF
    fi
    $ sh b.sh 
    hello, kodango
    fi
    一定要是Tab键哦,空格也是不可以的,在vim里面还要注意如果设置了smarttab选项,行首插入的Tab键会替换成相应个数的空格(这里可以按ctrl+v tab插入实际的空格)。
    
    关于这一节的内容,可以进一步参考Redirection#here_documents [Bash Hackers Wiki]。
    • 善用let或者(())命令做算术运算
    如何对一个数字做++运算,可能你会这样用:
    a=1
    a=`expr a + 1`
    为何不用你熟悉的:
    
    a=1
    let a++
    let a+=2
    • SHELL调试
    1. 通过set -o命令来查看当前 shell 的选项配置。
    2. set -x
    这个可以打开 shell 的调试开关,调试 shell 脚本非常有用.
  • 相关阅读:
    percona-toolkit 之 【pt-heartbeat】说明
    sql-索引的作用(超详细)
    SqlServer2005 海量数据 数据表分区解决难题
    怎样玩转千万级别的数据(表分区)
    SQL数据缓存依赖总结
    关于缓存中Cookie,Session,Cache的使用
    Anti-Forgery Request Recipes For ASP.NET MVC And AJAX
    jquery 父、子页面之间页面元素的获取,方法的调用
    win7系统部分软件显示乱码怎么办
    转:mvc 当中 [ValidateAntiForgeryToken] 的作用
  • 原文地址:https://www.cnblogs.com/eric-geoffrey/p/5012091.html
Copyright © 2020-2023  润新知