通配符和特殊符号
通配符和特殊符号
  学习原则
    正则、通配符是为了解决某问题
    先有问题场景，再琢磨如何写通配符
    不要先去写奇怪的通配符或正则，再去琢磨它是什么含义，这是外星人的做法
  定义相关
    通配符是专门用于处理文件名的特殊字符，而不是文件内容
    可以方便查找类似、但是不相同的文件名
    通配符是shell的内置语法、大部分linux命令都认识通配符
  通配符语法
    *
      匹配任意字符数。 您可以在字符串中使用星号 (*)。
        “wh*”将找到 what、white 和 why，但找不到 awhile 或 watch。
    ?
      在特定位置中匹配单个字母。
        “b?ll ”可以找到 ball、bell 和 bill。
    [ ]
      匹配方括号中的字符。
        “b[ae]ll”将找到 ball 和 bell，但找不到 bill。
    !
      在方括号中排除字符。
        “b[!ae]ll”将找到 bill 和 bull，但找不到 ball 或 bell。“Like “[!a]*””将找到不以字母 a 开头的所有项目。
    -
      匹配一个范围内的字符。 记住以升序指定字符（A 到 Z，而不是 Z 到 A）
        “b[a-c]d”将找到 bad、bbd 和 bcd。
    #
      匹配任意单个数字字符。
        “1#3”将找到 103、113 和 123。
    ^
      同感叹号、在方括号中排除字符
        b[^ae]ll，找不到ball,找不到bell，能找到bcll
  特殊符号
    路径相关
      ~
        当前登录用户的家目录
      -
        上一次工作路径
      .
        当前工作路径，或表示隐藏文件 .yuchao.linux
      ..
        上一级目录
    引号相关
      '' 单引号、所见即所得
        结论、单引号是所见即所得，单引号里面是什么，输入就是什么，没有任何改变，特殊符号也都失去了其他作用
      "" 双引号、可以解析变量及引用命令
        当输出双引号内的内容是，如果内容里有linux命令、或者变量、特殊转义符等
会优先解析变量、命令、转义字符，然后得到最终的内容
      `` 反引号、可以解析命令
        反引号中的linux命令是可以执行的，且反引号中只能写可执行的命令
        系统会首先执行反引号里的命令，然后再进行下一步的处理
          [nodel root /opt]#echo "爱情来得太快就像是`echo 龙卷风`"
爱情来得太快就像是龙卷风
      无引号，一般我们都省略了双引号去写linux命令，但是会有歧义，比如空格，建议写引号
        没有引号、很难确定字符串的边界，很容易出现各种故障
    重定向符号
      > stdout覆盖重定向
      >> stdout追加重定向
      < stdin重定向
      2> stderr重定向
      2>> stderr追加重定向
    命令执行
      command1 && command2
        command1成功后执行command2
      command1 || command2
        command1失败后执行command2
        [nodel root /opt/wwww]#mkdir /opt/wwww/ || pwd
mkdir: cannot create directory ‘/opt/wwww/’: File exists
/opt/wwww
      command1 ; command2
        无论command1成功还是失败、后执行command2
        表示命令的结束
多个命令之间的分隔符
某些配置文件的注释符
        [nodel root /opt]#pwd;mkdir hehehe;cd hehehe;pwd
/opt
/opt/hehehe
      \
        转义特殊字符，还原字符原本含义
      $()
        执行小括号里的命令
        引用系统时间，创建文件名，脚本常见做法
        [nodel root /opt/wwww]#touch www_access_$(date +%F).log
[nodel root /opt/wwww]#ll
total 0
-rw-r--r-- 1 root root 0 Apr 8 16:47 www_access_2022-04-08.log
[nodel root /opt/wwww]#
        [nodel root /opt/wwww]#rm -f $(find . -name '*.log')
[nodel root /opt/wwww]#ll
total 0
          [nodel root /opt/wwww]#rm -f `find . -name '*.log'`
[nodel root /opt/wwww]#ll
total 0
      ``
        反引号，和$()作用一样
        [nodel root /opt/wwww]#echo "${name}_`date +%F`"
快乐_2022-04-08
[nodel root /opt/wwww]#
      |
        管道符
      {}
        生成序列