linux中特殊符号用法

1 #

   #  管理员账户

   $  普通账户

  在脚本中 #也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后边是注解文字,不会被执行

例如

    #!/bin/bash

    #this line is comments

   由于这个特性,当临时不想执行某行指令时,可以在行首加上#就你可以了

  如果被用在指令中,或者引号双引号扩住的话,或者在反斜线的后面,那他就变成一般的符号了,不具备上述的功能了

——————————————————————————————————-

2 ~  账户的home目录

   代表用户的home目录, cd ~ 也可以在后面加上某个用户的名称:cd ~ USERNAME,或者当成路径的一部分:~/bin

   ~+  表示当前的工作目录,这个符号代表当前的工作目录,这和内嵌的指令pwd的作用是相同的

   ~-  表示上一次的工作目录

—————————————————————————————————–

3  ; 分号,command separator

   在shell中,担任连续指令功能的符号

—————————————————————————————————–

4  ;; 连续的分号(terminator)

   专用在case条件语句选项中,担任Terminator的角色

—————————————————————————————————–

5  . 点 dot

   在shell中一个.代表当前目录,两个..代表上层目录

—————————————————————————————————–

6   'string' 单引号(single quote)

   被单引号括住的内容,将被视为单一字符串。在引号内的代表变数$符号,没有作用,也就是说,将被视作一般符号处理,放置任何变量替换

   "string"双引号(double quote)

   被双引号括住的内容,将被视为单一字符串,防止通配符的扩展,但允许变量扩展 ,这点与单引号的处理方式不同

   `command` 倒引号(backticks)

   在前面的单引号,括住的字符串如果是命令,那么命令是不会执行的,会被当作平通字符串处理,如果要执行命令,就要使用倒引号

—————————————————————————————————–

7  , 逗号(comma)

  逗号常运用在运算当中当作"区隔"用途

—————————————————————————————————–

8  / 斜线 (forward slash)

  在路径表示时,代表目录

  通常单一的/代表root根目录的意思,在四则运算中,代表除法符号

—————————————————————————————————–

9  \反斜线 

   在交互模式下的反斜线有以下几个作用。

   (1)放在指令前面,有取消别名的作用

   (2)放在特殊符号前面,则该特殊符号作用消失

   (3)放在指令的最末端,表示指令连接下一行。 

—————————————————————————————————–

10  |  管道(pipeline)

  连接上个指令的标准输出,作为下个指令的标准输入。

—————————————————————————————————–

11   ! 惊叹号(negate or reverse)

   通常表示反逻辑的作用,譬如,用!=表示不等于

—————————————————————————————————–

12  : 冒号

   在bash中,冒号是一个内建命令:“什么事都不干”,但是返回对状态值为0。

 例1

  :${HOSTNAME?}${USER?}${MAIL?}

这一行的作用是,检查这些环境变量参数是否已经设置,没有设置的将会以标准错误显示错误信息。

 例2

 写法一

repeat()

{

  while true

  do 

   $@ && return

  done

}

 写法二

repeat()

{

 while :

 do $@ && return

 done

}

   第一种写法中的true是作为/bin下的一个二进制文件来实现的,这就意味这每执行一次while循环,shell就不得不生成一个进程。使用shell内建的:命令,它总是返回为0的退出码,速度比第一种块很多

  除了上述之外,还有一个地方必须使用冒号,在用户自己的HOME目录下的.bash_profilehuo或者任何功能相似的档案中,设定关于PATH的场合中,我们使用冒号来作分隔

—————————————————————————————————–

13  ? 问号(wild card)

 在文件名扩展上表示匹配任意一个字符,但不包含null

 *星号

 在文件名扩展中表示任意字符,包含null

 在运算时表示乘法

—————————————————————————————————–

14  $ 钱号 (dollar sign)

变量替换的代表符号

在正则表达式中被定义为"行"的最末端

—————————————————————————————————–

15 ${}  位置变量的表达式

  $*

    $*引用script的执行引用变量,引用参数的算法与一般指令相同,指令本身为0,其后为1,以此类推,引用变量的代表方式如下 $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,${10},${11},${12}…..

各位数的可以直接使用数字,但是两位数以上的,则必须使用{}符号括住.    

    $*则是代表引用变量的符号,使用时,要依据情况加上双引号,例如 echo "$*"

    还有一个与$*具有相同作用的符号,但效果和处理方式有些不同  $@

$@

    $@与$*具有相同作用的符号,不过两者有一个不同点。$*将所有的变量视为一个整体,但是$@则仍保留每个引用变量的区段概念

$# 

    $#表示引用变量的总数量是多少

$?状态值(status ariable)

    一般来说,Unix like系统的进程以执行系统调用exit()来结束。这个回传值就是status值。回传给父进程,来检查子进程的执行状态。一般指令执行成功,其回传值为0;失败为1

    由于进程的ID是唯一的,所以在同一时间,不可能有重复的PID。有时script会需要产生临时文件,用来存放必要的材料。而此script有可能在同一时间被使用者们使用。在这种情况下,固定文件名的写法就显得不可靠。唯有产生动态文件名,才能符合要求。符号$$或许可以符合这种要求。他代表当前shell的PID,使用它来作为文件名的一部分,可以避免在同一时间,产生相同文件名的覆盖现象

—————————————————————————————————–

16  ( )指令群组(command group)

    用括号将一串指令括起来,这种用法对shell来说,成为指令群组。指令群组有一个特性,shell会以产生subshell来执行这组指令。因此,在其中所定义的变量,仅作用于指令群组本身。除了指令群组,括号也用在array变量的定义上,另外也应用在其他可能需要加上escape字符才能使用的场合,例如运算式

   ((  ))

    这组括号的作用于了let指令类似,用在算术运算上,是bash的内建功能。所以,在执行效率上会比使用let指令块许多

    {  } 大括号(Block of code)

    有时候script当中会出现,大括号中间夹着一段或几段以分号作结尾的指令或变量设定。这种用法与上面介绍的指令群组非常相似,但是大括号不会在当前的shell中产生subshell   

    大括号也被用在"函数"功能上。广义上说,单纯只适用大括号时,作用就像是个没有指定名称的函数一般。因此,这样写script也是相当好的一件事,尤其对输入输出的重定向上,这个做法可以精简script的复杂的。

    此外,大括号还有另一种用法,如下

{xx,yy,zz,…}

    这种大括号的组合,常用在子串的组合上,例如

mkdir {userA,userB}-{home,bin,data}

    我们得到userA-home,userA-bin,userA-data,userB-home,userB-bin,userB-data这几个目录。这组符号在适用性上相当广泛。再来看个例子

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

    如果不是因为这种用法,我们得写几行重复几次呢?

[  ]中括号

    常出现在流程控制中,扮演括住判断式的作用。if [ "$?" != 0 ];then  echo "execute error";exit 1;fi

    这个符号在正则表达式中担任类似范围的或集合的角色rm -f 200[1234]

[[  ]]

    这组符号与先前的[]符号,基本上作用相同,但它允许在其中直接使用||和&&逻辑等符号

—————————————————————————————————–

17  ||  逻辑符号

    这个代表 or 逻辑的符号

   

   &&  逻辑符号

    这个代表 and 逻辑的符号

  

   &  后台工作

    单一个&符号,且放在完整指令列的最末端,即表示将该指令列放入后台中工作

   \<…\>  单词边界

    这组符号在正则表达式中,被定义为"边界"的意思。当匹配时匹配整个单词

   +  加号plus

     在运算式中,用来表示加法

    在正则表达式中,用来表示匹配前面字元至少一次的意思

   –  减号

    在运算式中,用来表示"减法",expr 10 – 2

    此外也是系统指令的选项符号,ls -la /etc/

    在GNU指令中,如果单独使用 – 符号,不加任何该文件名称时,代表"标准输入"的意思。譬如,tar xpvf-   这里的 – 符号代表从标准输入读取资料

    不过在 cd 指令中比较特别   cd –   这代表变更工作目录到"上一次"工作目录。

————————————————————————————

18   %  除法(Modulo)

    在运算式中,用来表示除法

    此外,也被用在关于变量的正则表达式当中,例如

${parameter%word}${parameter%%word}

    一个%表示最短的word匹配,两个表示最长的word匹配

————————————————————————————

19   = 等号equals

    常在设定变量时看到的符号

    或者是PATH的设定,设置应用在运算或判断式等此类用途上

   ==  等号 equals

    常在条件判断式中看到,代表"等于"的意思

   !=  不等于

    常在条件判断式中看到,代表"不等于"

   ^  

    这个符号在正则表达式中,代表行的"开头"位置,在[]中也与"!"一样表示"非"的意思

————————————————————————————

20   输入/输出重定向

   >  >> <  <<  :>   &>   2&>   2<>>&  >&2

    文件描述符(file descriptor),用一个数字(通常为0-9)来表示一个文件。常用的文件描述符如下

   文件描述符    名称    常用缩写    默认值

     0      标准输入    stdin      键盘

    1      标准输出    stdout      屏幕

    2     标准错误输出    stderr      屏幕

   我们在简单的使用 < 或 > 时,相当于使用 0< 或 1> 

cmd > file

   把cmd命令的输出重定向到文件file中。如果file已经存在,则清空原有文件

cmd >> file

   把cmd命令的输出重定向到文件file中,如果file文件已经存在,则把信息追加到file中

cmd < file

   使cmd命令从file中读入

cmd << text

   从命令行读取输入,直到一个与text相同的行结束。除非使用引号把输入括起来,此模式将对输入内容进行shell变量替换。如果使用<<- ,则会忽略接下来输入行首的tab,结束行业可以是一堆tab再加上一个与text相同的内容  

cmd <<< word

   把word(而不是文件word)和后面的换行行为输入提供给cmd

cmd <> file

   以读写模式把文件file重定向到输入,文件file不会被破坏。仅当应用程序利用了这一特性时,它才是有意义的

 

:>filename

   把文件"filename"截断为0长度,如果文件不存在,就创建一个0长度文件(与'touch'的效果相同)

cmd >& n    把输出送到文件描述符n

cmd m>&n     把输出到文件描述符m的信息重定向到文件描述符n

cmd >&-     关闭标注输出

cmd <&n    输入来自文件描述符n

cmd m<&n     m来自文件描述符n

cmd <&-     关闭标准输入

cmd <&n-    移动输入文件描述符n而非复制它

cmd >&n-    移动输出文件描述符n而非复制它

部分摘自http://web.itivy.com/article-821-1.html

原创文章,作者:black_fish,如若转载,请注明出处:http://www.178linux.com/35067

(1)
black_fishblack_fish
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • Mariadb数据库备份恢复系列(三):xtrabackup物理备份工具之增量备份

       实验三:利用xtrabackup+二进制日志实现增量备份和恢复数据库 本例中实现的是将所有的增量日志都通过apply-log的步骤同步到完全备份文件中,如果希望利用增量日志还原到固定某次增量备份的数据,则不能使用本例中方式对所有的备份都进行apply-log操作,如果希望利用增量日志还原到固定哪次增量备份的数据,则将最初的完全备份的数据、和期望还原到某…

    Linux干货 2016-11-24
  • 高性能Mysql主从架构的复制原理及配置详解

    1 复制概述       Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器…

    Linux干货 2015-04-13
  • haproxy 动静分离负载均衡、​stats页面实现​。

    实验环境:一台主机提供haproxy、nfs、mariadb,后端2台apache部署wordpress。 实验目的:haproxy使得动静分离、以及开启stats页面。 haproxy简单介绍 负载均衡的解决方案,支持4、7层,特点是单进程模型(可配置为多进程模型)单进程能支持非常大的并发链接数量(相比较其他软件)。 到今天,马哥课程中的负载均衡方案(lv…

    Linux干货 2017-02-18
  • centos启动流程

    linux系统启动流程 内核的设计结构单内核:linux(线程–lwp轻量级进程)微内核:windows(支持真正意义上的多线程) 单内核:很多功能驱动都集成在一起 微内核:内核很小,功能单一。模块化 linux为了适应众多用户的不同硬件需求,linux内核在设计上采用模块化设计。可以动态加载模块。核心模块:ko 内核所独有的。共享对象:so 红…

    Linux干货 2016-09-09
  • 马哥教育网络班21期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。它工作于OSI(开放系统互联参考模型)参考模型第一层,即“物理层”。 网桥将两个相似的网络连接起来,并对网络数据的流通进行管理。它工作于数据链路层,不但能扩展网络的距离…

    Linux干货 2016-09-19
  • 行编辑器sed的应用

    sed sed:Stream EDitor,行编辑器 sed是一种流编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中, 称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后, 把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没 有改变,除非你使用重定向存储输出。 se…

    Linux干货 2016-08-10