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

相关推荐

  • GNU awk的输出格式化和操作符

    printf命令 格式化输出:printf “FORMAT”, item1, item2, … (1) 必须指定FORMAT (2) 不会自动换行,需要显式给出换行控制符,\n (3) FORMAT中需要分别为后面每个item指定格式符 格式符:与item一一对应 %c: 显示字符的ASCII码 %d, %i: 显示十进制整数 %e, %E:显示…

    2018-01-01
  • N26-第五周博客作业

    一、显示当前系统上root、fedora或user1用户的默认shell; [root@promote home]# grep -E ‘^(root|fedora|user1)’ /etc/passwd |cut -d : -f7 /bin/bash /bin/bash /bin/bash [root@promote home]# 注…

    Linux干货 2017-05-15
  • 第六周课程作业

    1、复制/etc/rc.d/init.d/functions文件至/tmp目录,将/tmp/functions文件中 的以至少一个空白字符开头的行的行首加# ~]# cp /etc/rc.d/init.d/functions /tmp~]# vim /tmp/functions %s@^[[:space:]]\+@#@g 2、复制/boot/gru…

    Linux干货 2016-12-12
  • Linux网络功能协议介绍(二)

      上个内容中,我们知道了只要是本地通信得广播,而广播不是逻辑(IP)地址对应的MAC地址,所以主要是将逻辑地址转换成目标地址,这叫地址解析称为ARP,还有一种是反向解析RARP,都是在本地网络中完成的,逻辑IP地址分为两个阶段,前一段分为网络地址,后一段分为主机地址,如何判定?用子网掩码用来判断那一部分是网络位,那一部分是主机位,最重要…

    Linux干货 2016-11-25
  • 第四周练习

    1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限。         # cp -r /etc/skel /home/tuser1      &nb…

    Linux干货 2016-11-18
  • 马哥教育网络21期+第六周练习博客

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@localhost named]# cp /etc/rc.d/rc.sysinit /tmp/ [root@loc…

    Linux干货 2016-08-15