zoukankan      html  css  js  c++  java
  • Bash-特殊字符-上

    基础字符

      # 注释,用于一行行首(#!除外)或本行空白的后边。

      ; 命令分隔符,可以在一行中写多个命令。

      ;; 终止case选项。

      . 等价于source命令,这是一个bash内建命令。

      . 作为文件名的前缀时,则该文件为隐藏文件。作为目录名的一部分.表示当前目录..表示上一级目录。用于字符匹配中,作为正则表达式的一部分,用来匹配任何单个字符

       部分引用,”STRING”阻止了一部分特殊字符。

      ' 全引用,’STRING’阻止了全部特殊字符。

      , 逗号连接了一系列算术操作,虽然里面的内容都被运行了,当只有最后一项被返回。

       转义字符

      / 文件名路径分隔符,或用来作除法。

       `后置引用,命令替换。

      : 空命令,空操作,什么都不做

      ! 取反操作符。

      * 万能匹配符,用于文件名匹配或正则表达式中。注意:*在正则表达式匹配中与文件名匹配中是不同的。数学运算。**幂运算。

      ? 测试操作,或在正则表达式中匹配任意单个字符。

      $ 变量替换,或在正则表达式中作为行结束符。

      $$ 变量的间接引用。

      ^ 正则表达式中表示行首。

      ${} 参数替换。

      $*, $@ 位置参数。

      $? 退状态变量。

      $$ 进程ID变量,保存了运行脚本进程ID。

      () 命令组。注意:在()中的命令列表将作为一个子shell来运行。

      {xxx, yyy, ...} 大括号扩展。

      {} 代码块,又称为内部组。事实上,这个结构创建了一个匿名函数,但是与函数不同的是,在其中声明的变量,对于脚本其它部分的代码来说还是可见的。

      {}; 路径名

      [] test

      [[]] test

      [] 数组元素,或正则表达式中作为字符匹配的一个范围。

      (()) 算术扩展和赋值,以及允许C风格的变量处理机制。

      > &> >> >& 重定向。

      <,> 正则表达式中的单词边界。

      | 管线。

      >| 强制重定向。

      +,-,*,/,**,% 算术操作符

      || 逻辑或

      && 逻辑与

       逻辑非

      << 左移一位

      <<=n 左移n位

      >> 右移一位

      >>=n 右移n位

      & 按位与

      &= 按位与赋值

      | 按位或

      |= 按位或赋值

       按位非

      ^, XOR 按位异或

      ^= 异或赋值

      & 后台运行命令

    注释

     在 echo 中转义的 # 是不能作为注释的

     # 数制转换(使用二进制表示),不是一个注释,双括号表示对于数字的处理

    分号(;)命令分隔符

    使用分号 ; 可以在同一行上写两个或两个以上的命令。

    每个if语句都要用fi结束,而且是每一个if都要对应一个fi

    双分号(;)终止 case 选项 点号(.)等价于 source 命令

    使用双分号 ;; 可以终止 case 选项。

    source 命令用于在当前 bash 环境下读取并执行 FileName.sh 中的命令。

    美元符号($)

    通常情况下,在工作中用的最多的有如下几项:
    $0:Shell 的命令本身
    $1 到 $9:表示 Shell 的第几个参数
    $#:传递到脚本的参数个数
    $*:以一个单字符串显示所有向脚本传递的参数

    $@ 与$*相同。

    $!:后台运行的最后一个进程的 ID 号

    $$:脚本运行的当前进程 ID 号

    $-:显示 Shell 使用的当前选项

    $? :显示最后命令的执行情况,0表示没有错误。

    详细看Shell 脚本中 '$' 符号的多种用法

    单引号(')和双引号('')

    同样是 $HOME,单引号会直接认为是字符,而双引号认为是一个变量。

    双引号(")

    "STRING" 将会阻止(解释)STRING 中大部分特殊的字符。

    单引号(')

    'STRING' 将会阻止 STRING 中所有特殊字符的解释,这是一种比使用"更强烈的形式。

    斜线和反斜线

    斜线(/

    文件名路径分隔符。分隔文件名不同的部分(如 /home/bozo/projects/Makefile)。

    也可以用来作为除法算术操作符

    注意在 linux 中表示路径的时候,许多个 / 跟一个 / 是一样的。/home/shiyanlou 等同于 ////home///shiyanlou

    反斜线(

    一种对单字符的引用机制X 将会“转义”字符 X。这等价于"X",也等价于'X'。

     通常用来转义双引号(")和单引号('),这样双引号和单引号就不会被解释成特殊含义了。

    • 符号 说明
    •  表示新的一行
    •  表示回车
    •  表示水平制表符
    • v 表示垂直制表符
    •  表示后退符
    • a 表示"alert"(蜂鸣或者闪烁)
    • xx 转换为八进制的 ASCII 码, 等价于 0xx
    • " 表示引号('')字面的意思

    转义符也提供 续行功能,也就是编写多行命令的功能。

    每一个单独行都包含一个不同的命令,但是每行结尾的转义符都会转义换行符,这样下一行会与上一行一起形成一个命令序列。

    反引号(`)

    命令替换{

      关于命令替换

    1、命令替换,有两种方式

      方式一:`command`

      方式二:$(command)

    2、应用场景

      在命令中通过命令替换的方式,将某些子命令的结果嵌入到当前命令中。

      详细 Shell 命令替换

    }

    反引号中的命令会优先执行,如:

    cp `mkdir back` test.sh back
    ls

    先创建了 back 目录,然后复制 test.sh 到 back 目录。

    冒号(:)

    空命令

    等价于“NOP”(no op,一个什么也不干的命令)。也可以被认为与 shell 的内建命令 true 作用相同。“:”命令是一个 bash 的内建命令,它的退出码(exit status)是(0)。

    比如下面两个是等价的:

    在 if/then 中作占位符

    变量扩展/子串替换

    与 > 重定向操作符结合使用时,将会把一个文件清空,但是并不会修改这个文件的权限。如果之前这个文件并不存在,那么就创建这个文件

     与 >> 重定向操作符结合使用时,将不会对预先存在的目标文件 : >> target_file 产生任何影响。如果这个文件之前并不存在,那么就创建它

     可能用来作为注释行,但不推荐这么做。使用 # 来注释的话,将关闭剩余行的错误检查,所以可以在注释行中写任何东西。然而,使用 : 的话将不会这样。

     : 还用来在 /etc/passwd 和 $PATH 变量中做分隔符,如:

    问号(?)

    测试操作符

    在一个双括号结构中,? 就是 C 语言的三元操作符,如:

    小括号(())

    命令组

    在括号中的命令列表,将会作为一个子 shell 来运行。

    在括号中的变量,由于是在子 shell 中,所以对于脚本剩下的部分是不可用的。父进程,也就是脚本本身,将不能够读取在子进程中创建的变量,也就是在子 shell 中创建的变量。(全体变量跟局部变量的区别)如:

    初始化数组

    大括号用来表示数组 如:

    大括号({})

    文件名扩展 或 数组表示

    注意: 在大括号中,不允许有空白,除非这个空白被引用或转义。复制 t.txt 的内容到 t.back 中,如:

    代码块(未命名函数)

    代码块,又被称为内部组,这个结构事实上创建了一个匿名函数(一个没有名字的函数)。然而,与“标准”函数不同的是,在其中声明的变量,对于脚本其他部分的代码来说还是可见的。

    中括号([ ])

    条件测试

    条件测试表达式放在 [ ] 中。双中括号([[ ]])也用作条件测试(判断)。

    if常见条件表达式和逻辑表达式

    if [ -f  file ]    如果文件存在
    if [ -d ...   ]    如果目录存在
    if [ -s file  ]    如果文件存在且非空
    if [ -r file  ]    如果文件存在且可读
    if [ -w file  ]    如果文件存在且可写
    if [ -x file  ]    如果文件存在且可执行  
    if [ int1 -eq int2 ]    如果int1等于int2  
    if [ int1 -ne int2 ]    如果不等于   
    if [ int1 -ge int2 ]       如果>=
    if [ int1 -gt int2 ]       如果>
    if [ int1 -le int2 ]       如果<=
    if [ int1 -lt int2 ]       如果<
     逻辑非 !   条件表达式的相反
    if [ ! 表达式 ]
    if [ ! -d $num ]    如果不存在目录$num
        逻辑与 –a      条件表达式的并列
    if [ 表达式1  –a  表达式2 ]
        逻辑或 -o      条件表达式的或
    if [ 表达式1  –o 表达式2 ]

    详细看if语句的使用方法(条件判断)

    Shell编程之if语句实战(小结)

    -lt (less than)表示小于号,比如:

    数组元素

    在一个 array 结构的上下文中,中括号用来引用数组中每个元素的编号,大括号使得中括号引用有效。

  • 相关阅读:
    读《豆瓣的基础架构》有感
    读《【解密】京东B2B业务架构演变》有感
    soa
    读《京东咚咚架构演进》有感
    读《游戏服务器的架构演进(完整版)》有感
    读《京东物流系统架构演进中的最佳实践》有感
    读《微博众筹的架构设计》有感
    读《新浪微博如何应对极端峰值下的弹性扩容挑战》有感
    读《微博推荐架构的演进》有感
    读《新浪微博用户兴趣建模系统架构》有感
  • 原文地址:https://www.cnblogs.com/dork/p/13811786.html
Copyright © 2011-2022 走看看