zoukankan      html  css  js  c++  java
  • bash 技巧

    本文主要记录一些bash的语法,备忘

    英文还行的话,看看这篇Bash Guide for Beginners

    1. 进制转换

    $ echo $(( 2#11 ))
    3
    $ echo $(( 16#1E ))
    30

    即将指定进制的数转为10进制,例如上面是将16进制的数1E转为10进制,所以结果是30。

    2. 查看变量值由多少个字符组成

    $ a="Hello world"; echo ${#a}
    11

    参考:bash 算式

    3. Here Documents(不好意思,不知道怎么翻译)

    下面的>也是提示符
    $ cat <<EOF
    > 1
    > 2
    EOF
    1
    2
    $ cat <<'EOF'
    > $1
    > $2
    EOF
    $1
    $2

    我一般用这个完成多行注释
    $ :<<'EOF'
    > line1
    > line2
    EOF

    参考:Bash Reference Manual

    4. Coprocesses

    使用coproc后面接shell命令的方式, 可以让命令在后台启动, 后面的命令就可以通过特定的方式来访问其输入和输出。
    还是用示例来说明吧,我又感到了言匮词穷。。。
    $ coproc awk '{print "I am "$0; fflush()}'
    [1] 8156
    $ echo 'happy' >&${COPROC[1]}
    $ read -u ${COPROC[0]} s
    $ echo $s
    I am happy
    $ kill ${COPROC_PID}
    [1]+ Terminated coproc COPROC awk '{print "I am "$0; fflush()}'

    说起来就是变量COPROC[0]是这个后台进程的stdout对应的文件描述符, 变量COPROC[1]是这个后台进程的stdin对应的文件描述符, 变量COPROC_PID是这个后台进程的进程号。
    参考:
    1.Coprocesses
    2.how-do-you-use-the-command-coproc-in-various-shells

    5. ps 查看进程状态

    $ ps -eo pid,lstart,etime,cmd # 查看进程号,进程启动时间,运行时间,命令名
    $ man ps # ps命令的参数实在很多很杂,现在我已放弃记忆,不清楚就直接man一下

    6. 花括号扩展

    $ echo a{d,c,b}e
    ade ace abe
    $ echo a{01..5}
    a01 a02 a03 a04 a05
    $ echo /usr/{ucb/{ex,edit},lib/{ex?.?,how_ex}}
    /usr/ucb/ex /usr/ucb/edit /usr/lib/ex?.?
    /usr/lib/how_ex
    $ b=2;echo {${b},6} # 花括号扩展中${b}这种变量替换方式不受影响。
    2 6

    需要注意的是花括号扩展比其它扩展优先级要高。
    (Brace expansion is performed before any other expansions, and any characters special to other expansions are preserved in the result. It is strictly textual.)
    参考:
    1.bash manual
    2.浅析 Bash 中的 {花括号}

    7. tar命令

    $ tar -cvf log.tar *.log # 1.把所有的log文件打包成log.tar(必须指定一个文件名)
    $ tar -czvf log.tar.gz *.log # 2. 把所有的log文件打包并用gzip压缩成log.tar.gz
    $ tar -cjvf log.tar.bz2 *.log # 3. 把所有的log文件打包并用bzip2压缩成log.tar.bz2
    $ tar -xvf log.tar # 4. 解包,1的逆向操作
    $ tar -xzvf log.tar.gz # 5. 用gunzip解压缩并解包,2的逆向操作
    $ tar -xjvf log.tar.bz2 # 6. 用bunzip2 解压缩并解包,3的逆向操作
    # -C 可指定输出到指定文件夹
    # -c 打包 -z 用gzip压缩 -j 用bzip2压缩 -x 解包 -v 显示详细信息
    

    参考:
    1.tar命令详解

  • 相关阅读:
    Java接口总结
    java面向对象特点总结
    二分查找的两种实现方法
    关于Java的对象equals方法
    java加密枝术是怎样的?
    Java中子类和父类间的调用关系
    Java中字符串的完美度
    Java源代码不编译到字节码文件
    java生成6位随机数
    Struts2中ModelDriven的使用
  • 原文地址:https://www.cnblogs.com/lyg-blog/p/11768308.html
Copyright © 2011-2022 走看看