bash特殊字符

用在bash脚本或命令行中的特殊字符

1、#井号 :注释

  • 在echo中转义的#是不能作为注释的
  • 某些特定的模式匹配操作也可以使用#、

2、; 分号:命令分隔符,使用命令分隔符,可以在同一行上写两个或两个以上的命令

3、;; 双分号:用来终止case选项

4、.点号 :

  • ”点“命令,等价于source命令
  • ”点“作为文件名的一部分. 如果点放在文件名的开头的话, 那么这个文件将会成为”隐藏“文件
  • ”点“字符匹配,当用作匹配字符的作用时,通常都是作为正则表达式的一部分来使用,”点“用来匹配任何的单个字符

5、"双引号:部分引用,“STRING”将会阻止(解释)STRING中大部分特殊的字符

6、`单引号:全引用,’STRING‘将会阻止STRING中所有特殊字符的解释

7、,逗号:逗号操作符.,逗号操作符链接了一系列的算术操作,虽然里边所有的内容都被运行了,但只有最后一项被返回

8、\反斜线:转义符

9、/斜线:文件名路径分隔符,也可用作除法算术操作符

10、`:命令替换,`command`结构可以将命令的输出赋值到一个变量中去

11、:冒号:空命令,等价于“NOP”,也可以被认为与shell的内建命令true作用相同

  • 可用在while死循环中,while :
  • 在if/then中的占位符,if XXX ; then : ;else XXX
  • 在一个二元命令中提供一个占位符,: ${username=`whoami`},如果没有开头的":"的话, 将会提示一个错误,除非"username"是一个命令或者内建命令
  • 在here document中提供一个命令所需的占位符
  • 使用参数替换来评估字符串变量,: ${HOSTNAME?} ${USER?} ${MAIL?},如果一个或多个必要的环境变量没被设置的话,就打印错误信息
  • 在与>重定向操作符结合使用时, 将会把一个文件清空, 但是并不会修改这个文件的权限. 如果之前这个文件并不存在, 那么就创建这个文件(: > data.xxx # 文件"data.xxx"现在被清空了)
  • 还可用来在/etc/passwd和$PATH变量中做分隔符

12、!叹号:取反操作符,它将会反转命令的退出码的结果,也会反转测试操作符的意义

13、*星号:

  • 用作通配符,可以用来做文件名匹配
  • 也可以用在正则表达式中,用来匹配任意个数(包含0个)的字符
  • 算数操作符,乘法运算,如果是求幂操作符,就使用**

14、?问号:

  • 测试操作符,在一个特定的表达式中,用来测试一个条件的结果
  • 在一个双括号结构中,?就类似C语言的三元操作符【(( t = a<45?7:11 ))】
  • 在参数替换表达式中,用来测试一个变量是否被设置
  • 可用来做匹配单个字符的通配符,在正则表达式中, 也是用来表示一个字符

15、$:

  • 变量替换,在一个变量前面加上$用来引用这个变量的值
  • 在正则表达式中,表示行结束符

16、${}:参数替换

17、$*, [email protected]:位置参数

18、$?:退出状态码变量,一个命令,一个函数,或者是脚本本身的退出状态码

19、$$:进程ID变量,保存了它所在脚本的进程 ID

20、()小括号:命令组,【(test=xixi ; echo $test)】,在小括号中的命令列表将会作为一个子shell来运行,父shell将不能够读取在子shell中创建的变量

21、(())双小括号:这用于扩展并计算在(( ))中的整数表达式

22、{}大括号:

  • {
  • echo "haha"
  • echo "Archive Listing:"
  • } > $file
  • {read line1
  • read line2
  • } < $file
  • 一个命令可能会对大括号中的以逗号分割的文件列表起作用,mkdir {haha,xixi},注意:在大括号中,不允许有空白,除非这个空白被引用或转义
  • 大括号并命令括起来就组成代码块,实际上就是创建了一个匿名函数,与"标准"函数不同的是, 在其中声明的变量,对于脚本其他部分的代码来说必须是可见的(即不可使用local关键字)
  • 代码块和I/O重定向:从一个文件中读取多个数据到多个变量
  • 还能够将一个代码块的结果保存到文件

23、{} \;:标识路径名,一般都在find命令中使用,其中的";"是用来结束find命令序列的-exec选项

24、[]中括号:

  • 可以是条件测试命令,是一个shell内建命令
  • 在一个array结构的上下文中,中括号用来引用数组中每个元素的编号
  • 可用作正则表达式的一部分,方括号描述一个匹配的字符范围

25、[[ ]]双中括号:也是条件测试命令

26、> &> >& >> < <>:重定向

27、(command)>,<(command):进程替换

28、<<:用在here document中的重定向

29、<<<:用在here string中的重定向

30、\<, \>:正则表达式中的单词边界,grep ‘\<what\>‘ textfile

31、|:管道.,分析前边命令的输出,并将输出作为后边命令的输入

32、>|:强制重定向

33、||:逻辑或

34、&&:逻辑与

35、&:如果在命令后面跟一个&,就表示在后台运行此命令,在脚本中,命令和循环都能够运行在后台中(注意:在一个脚本中,使用后台运行命令(&)可能会使这个脚本挂起,直到敲ENTER,挂起的脚本才会被恢复,一般只有在这个命令的结果需要输出到stdout的时候,这种现象才会出现)

36、-:

  • 选项前缀
  • 用于重定向stdin或stdout【(cd /data/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)】
  • 表示上一次的工作目录
  • 用于算术操作减号

37、+,=,%:算数运算符

38、~,~+,~-:home目录,当前工作目录,先前工作目录

39、=~:在双中括号测试表达式中使用的正则表达式匹配,[[ "$variable" =~ "T*fin*es*" ]]

-----参考《高级bash脚本编程指南》

时间: 2024-11-02 12:06:31

bash特殊字符的相关文章

bash命令解释器(shell)

介于操作系统内核和用户之间的一个绝缘层,一种被称为解释性语言或者脚本语言的计算机语言.通过将系统调用.公共程序.工具和编译过的二进制程序"粘合"在一起来建立应用,所有的UNIX命令和工具再加上公共程序,对于shell脚本来说,都是可调用的 ???????? ???????? .sh 文档里 ?????????? #!/bin/bash 确定文件类型(可能被存放在 /sbin ./usr/local/bin ./usr/bin ./usr/sbin 或 /usr/local/sbin 这

【重点】Shell入门教程:流程控制(2)条件判断的写法

第三节:条件判断的写法 if条件判断中,if的语法结构中的“条件判断”可以有多种形式.测试结果是真是假,就看其传回的值是否为0. 条件测试的写法,有以下10种: 1.执行某个命令的结果 这里的命令,可包括管道命令,例如:命令1 | 命令2 | 命令3,称为 pipeline,其结束状态为最后一个命令执行的结果. 举例: #!/bin/bash if grep -q "rm" fn.sh; then echo "find in command." else echo

Linux学习(二十三)正则表达式(一)grep/egrep

一.概述 正则表达式是运维工作中经常需要用到的知识.文件查找,日志分析,rewrite规则,shell脚本等等,都需要正则表达式的知识.那么什么是正则表达式呢?我的理解就是,按照一定的规则找到或者替换你需要的字符串,这个规则就是正则表达式,准确的讲,它就是一个规则.使用正则表达式的命令有很多,我们今天讲到的grep和egrep就是最常用的.此外还有sed.awk,我们会在后续接着讲到. 二.grep/egrep egrep是grep的增强版,grep能实现的egrep都能实现,而且在某些地方,使

bash下特殊字符的含义

#:正常情况下,以#开头的是注释. #!:这个可不是注释喔...是用于指定当前脚本的注释器.后面应该接注释器的完整路劲. 如下:     #!/bin/bash   或者   #!//usr/bin/python等 分号(:):可以在同一行上写两个或两个以上的命令 such as: #!/bin/bash echo hello; echo there 双分号(;;)终止case选项 点号(.):等价于source 命令,bash中的source命令用于在当前bash环境下读取并执行filenam

Bash Shell 中的特殊字符

什么是Bash Shell中的特殊字符?某些特殊字符在Bash Shell里不是表示其字符含义本身,而是另有含义,称为:meta-meaning. 1.字符:# 代表注释,如果有一行以#开始,那么意味着这行不会被执行,只是一行说明注释. 例如: # this is comments 这是一行注释. 但是这里有个例外,那就是脚本的第一行我们经常看到的: #!/bin/bash 这个指示一个脚本的解释器,说明这个脚本是由/bin/bash 来解释的. 从#为开始,后面的字符即为注释,直到该行结束.体

*Bash:如何用bash 转义 URL里的特殊字符,让其在sed不会产生歧义?

我们在工作中,经常需要使用sed替换.增加文本中的URL.但是,我们经常会遇到URL中的特殊字符在sed中产生歧义,以至于在编写bash脚本的时候,花去大量时间测试.那么什么特殊字符会产生歧义呢? #这些都需要转义&, |, \, /, ^, *, (, ), [, ], {, }, `,? 其中,以“&,/,?“为最主要需要转移的.例如: [[email protected] test]$ url="http://www.baidu.com/cgi-bin?a=dasdfd&a

bash 替换特殊字符

bash 替换特殊字符 PID=`netstat -tpln|grep 8002`;PID=${PID#*LISTEN};PID=`echo $PID | sed -s "s/\/java//g"`

Bash中的特殊字符

# 表示注释 #! 指定当前脚本的解析器 #!/bin/bash echo "Hello World" ; 命令分隔符 #!/bin/bash echo hello;echo there filename=ttt.sh if [ -r "$filename" ]; then echo "File $filename exists."; cp $filename $filename.bak else echo "File $filenam

(转载)Bash 中的特殊字符大全

转自:https://linux.cn/article-5657-1.html Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符 号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好,往往能给我们起到事半功倍的效果,为此,特地将Shell里面的一些符号说明罗列成对 照表的形式,以便快速的查找.看看你知道下表中的哪些Shell符号呢? Shell符号及各种解释对照表: Shell符号 使用方法及说明