zoukankan      html  css  js  c++  java
  • BASH LEARN NOTE

    BASH LEARN NOTE

    basic

    reference-basic

    echo

    1. w/o quote

      echo hello world
      result:	hello world
      
    2. w/ single quote

      单引号中变量不能被求值

      name=lina
      echo 'hello $name'
      result:	hello $name
      
    3. w/ double quote

      双引号中变量可以求职

      name=lina
      echo "hello $name"
      result:	hello lina
      

    echo -n/e

    1. echo -n

      取消末尾回车符(取消自动换行功能)

    2. echo -e

      转义字符生效

      echo "hello	lina"
      result:	hello	lina
      
      echo -e "hello	lina"
      result:	hello	lina
      

    SLMC(single line multi command)

    mkdir folder; cd folder; touch note;
    

    SCML(single command multi line)

    mkdir	
    math	
    science	
    art		
    

    命令组合符

    1. &&

      command1 && command2

      command1执行成功后执行command2

    2. ||

      command1 || command2

      command1执行失败后执行command2

    *type

      判断command为内建命令还是外部程序
    

    hotkey

      Ctrl + l : clear screen
    
      Ctrl + u : 清除光标至行首
    
      Ctrl + k : 清除光标至行尾
    
      Ctrl + a : 光标移至行首
    
      Ctrl + e : 光标移至行尾
    
      [Hotkey github](https://gist.github.com/zhulianhua/befb8f61db8c72b4763d)
    

    expansion

      [reference-expansion](https://wangdoc.com/bash/expansion.html)
    
      [reference-quation](https://wangdoc.com/bash/quotation.html)
    
      [reference-variable](https://wangdoc.com/bash/variable.html)
    
    1. ~字符扩展

      • 扩展为home path(最常用)
      • ~user扩展为用户user的home path
      • ~+扩展为当前目录(等同于pwd)[使用频率较低]
    2. ?字符扩展

      • 匹配除空字符外的单个字符
    3. *字符扩展

      • 匹配任意字符
    4. []扩展

      • []匹配方括号中的任意一字符
      • [^]或[!]不匹配方括号中的任意一字符
      • 匹配字符包含[ or ],可以放在任意位置
      • 匹配字符包含连字符-,只能放在开头或结尾
    5. [start-end]扩展

      • [a-z]匹配26个字母
      • [0-9]匹配10个数字
      • [!0-2]不匹配0 1 2(方括号内是感叹号)
    6. {}扩展

      • 扩展成大括号里的所有值,用逗号隔开
      • 字符和逗号间不能有间隔
      echo a{e,f,g}b
      result: aeb afb agb
      
      $ cp a.log{,.bak}
      # 等同于
      # cp a.log a.log.bak
      
      $ echo /bin/{cat,b*}
      /bin/cat /bin/b2sum /bin/base32 /bin/base64 ... ...
      # 基本等同于
      $ echo /bin/cat;echo /bin/b*
      
    7. {start..end}扩展

      • 连续扩展
      $ echo {a..c}
      a b c
      
      $ echo d{a..d}g
      dag dbg dcg ddg
      
      $ echo {1..4}
      1 2 3 4
      
      $ echo Number_{1..5}
      Number_1 Number_2 Number_3 Number_4 Number_5
      
      $ echo {c..a}
      c b a
      
      $ echo {5..1}
      5 4 3 2 1
      
      $ mkdir {2007..2009}-{01..12}
      
      for i in {1..4}
      do
        echo $i
      done
      
      $ echo {01..5}
      01 02 03 04 05
      
      $ echo {001..5}
      001 002 003 004 005
      
      • 连续扩展带步长
      $ echo {0..8..2}
      0 2 4 6 8
      
    8. 变量扩展

      美元符号开头的词组被当作变量

      $ echo $SHELL
      /bin/bash
      
      $ echo ${SHELL}
      /bin/bash
      
      区分变量和其他字符串
      

      ${!string*}${!string@}返回所有匹配给定字符串string的变量名

      $ echo ${!S*}
      SECONDS SHELL SHELLOPTS SHLVL SSH_AGENT_PID SSH_AUTH_SOCK
      
    9. 子命令扩展

      非常有用,定义当前path是就会用到

      • $(command)
      • command
      $ echo $(date)
      Tue Jan 28 00:01:13 CST 2020
      
      $ echo `date`
      Tue Jan 28 00:01:13 CST 2020
      
      CURRENT_PATH=`pwd` or CURRENT_PATH=$(pwd)
      
    10. 算数扩展

      • num=$((a + b))
      • let num=$a+$b [没有空格]
      • let "num = 2 + 3" [有空格需要用双引号]
    11. 字符类

    12. THINK AGAIN

      • []匹配的是有的字符
      • {}是创建包含字符的字符串
      • [start-end]用连字符
      • {start..end}用..
    13. 量词扩展

      • ?(pattern-list):匹配零个或一个模式。
      • *(pattern-list):匹配零个或多个模式。
      • +(pattern-list):匹配一个或多个模式。
      • @(pattern-list):只匹配一个模式。
      • !(pattern-list):匹配零个或一个以上的模式,但不匹配单独一个的模式。
    14. here文档*

      >> Here
      
      content
      
      Here
      

    String OP

    reference-string

    1. 字符串长度

      ${#varname} {}是必需的

      str="dear lina"
      echo ${#str}
      
    2. 子字符串

      ${varname:offset:length} length可缺省

      $ count=frogfootman
      $ echo ${count:4:4}
      foot
      
    3. 字符串头部模式匹配

      删除匹配的部分返回其余的部分

      ${variable#pattern} 非贪心匹配

      ${variable##pattern} 贪心匹配

      # 如果 pattern 匹配变量 variable 的开头,
      # 删除最短匹配(非贪婪匹配)的部分,返回剩余部分
      ${variable#pattern}
      
      # 如果 pattern 匹配变量 variable 的开头,
      # 删除最长匹配(贪婪匹配)的部分,返回剩余部分
      ${variable##pattern}
      
      $ myPath=/home/cam/book/long.file.name
      
      $ echo ${myPath#/*/}
      cam/book/long.file.name
      
      $ echo ${myPath##/*/}
      long.file.name
      
    4. 字符串头部模式匹配并替换

      ${variable/#pattern/string}

      # 模式必须出现在字符串的开头
      ${variable/#pattern/string}
      
      # 示例
      $ foo=JPG.JPG
      $ echo ${foo/#JPG/jpg}
      jpg.JPG
      
    5. 字符串尾部模式匹配

      ${varname%pattern} 非贪心匹配

      ${varname%%pattern} 贪心匹配

      ${varname/%pattern/string} 匹配并替换

    6. 任意位置匹配

      ${varname/pattern/string} 非贪心匹配

      ${varname//pattern/string} 贪心匹配

    7. 大小写转换

      # 转为大写
      ${varname^^}
      
      # 转为小写
      ${varname,,}
      
  • 相关阅读:
    Python学习笔记之操作yalm
    Python学习笔记之多线程
    Python学习笔记之网络编程
    Python学习笔记之面对象与错误处理
    Python学习笔记之装饰器
    Python学习笔记之内置模块
    Python学习笔记之函数与正则
    PAT甲级1049. Counting Ones
    PAT甲级1045. Favorite Color Stripe
    PAT甲级1034. Head of a Gang
  • 原文地址:https://www.cnblogs.com/movit/p/14193052.html
Copyright © 2011-2022 走看看