在学习大数据开发时,shell的特殊符号也是基础的重要组成部分。把特殊符号牢记在心,对我们的工作效率提升有很大的帮助,内容较多,建议收藏后观看。(另外小声问一下,大家是怎么记这些特殊符号的)
一、特殊符号
1. ;分号
连续运行命令
例子:# ifdown eth0;ifup eth0
2. | 管道
正则表达式中表示或者
例子:# echo "ooooee" |egrep '(oo|ee)'{2} 表示匹配 oooo 或者 eeee 的字符
前面命令的标准输出作为后面命令的标准输入
例子:# ifconfig|grep eth0 表示ifconfig查出来的信息然后过滤出eth0的这一行
3. ||逻辑或
前面命令返回值为非0才执行后面的命令
例子:p1 || p2 ;若p1执行成功后,不执行p2,反之,才执行p2
4. # 井号
注释符号。在shell文件的行首,作为include标记,#!/bin/bash;其他地方作为注释使用
5. ;分号
语句的分隔符。在shell文件一行写多条语句时,使用分号分割。
6. ;; 双分号。
在使用case选项的时候,作为每个选项的终结符。在Bash version 4 的时候,还可以使用[;;&], [;&]
7. .英文句点号
命令等价于source, . 表示当前目录 .. 表示上一级目录,正则表达式中作为单个字符匹配
(1)相当于bash内建命令source
例子:
#!/bin/bash;
. data-file#包含data-file;
(2)作为文件名的一部分,在文件名的开头,表示该文件为隐藏文件,ls一般不显示出来(ls -a 可以显示);
(3)作为目录名,一个点代表当前目录,两个点号代表上层目录(当前目录的父目录)。注意,两个以上的点不出现,除非你用引号(单/双)包围作为点号字符本身;
(4)正则表达式中,点号表示任意一个字符。
8. :冒号
是shell的空命令(null command),什么也不做,但是返回true。用法比较多,主要有:
(1)可做while死循环的条件;
(2)占位符,if某一分支什么都不做的时候;
(3)域分隔符,比如环境变量$PATH中,或者passwd中,都有冒号的作为域分隔符的存在;
(4)清空文件。因为冒号不向标准输出任何内容,所以可以用来清空文件,示例::>file
(5)配合${:=}给未定义或为空的变量赋值,示例:: ${abc:=1234};echo $abc,输出1234
9. ''单引号
硬转义,其内部所有的shell元字符、通配符都会被关掉。注意,硬转义中不允许出现'(单引号)
10. "" 双引号
软转义,其内部只允许出现特定的shell元字符($,`,):$用于变量值替换、`用于命令替换、用于转义单个字符
11. /正斜杠
文件名分隔符,除法操作
例子:例如:echo $((10/2)) 结果就是5
12. 反斜杠
转义,去除其后紧跟的元字符或通配符的特殊意义
13. !惊叹号
将命令或者条件表达式的返回值取反
例子:# if ! [ 1<2 ]; then echo 'ok'; else echo 'no'; fi
ok
14. $ 美元符号
例子:取变量的值
# a=10
# echo $a
10
例子:正则表达式表示行尾
egrep ':$' /etc/inittab
egrep ‘^hello$' file
15. $0 当前脚本的名称
16. $# 传递给脚本或函数的参数个数
17. $* 传递给脚本或函数的所有参数
18. $@ 传递给脚本或函数的所有参数。
19. $? 上个命令的退出状态,或函数的返回值。
20. $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
21. $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
22. * 作为匹配文件名扩展的一个通配符,能自动匹配给定目录下的每一个文件。
23. ~ 波浪号
这个和shell环境变量$HOME是一样的。默认表示当前用户的家目录(主目录)
24. - 减号
和~-一样,表示前一个工作目录。
例子:cd -,回到前一个工作目录,不能echo - 来查看。
25. - - 双减号
与~相同,表示当前用户的家目录(主目录) cd - -,回到家目录。不能echo - - 来打印输出。
26. ~ 波浪号
这个和shell环境变量$HOME是一样的。默认表示当前用户的家目录(主目录)
例子:echo ~,查看家目录。
27. 加法
例子:a=10;b=20;expr $a $b结果为 30。注意空格
28. ~
当前的工作目录(current working directory)。这个和shell环境变量$PWD一样。
例子:echo ~ 可以查看当前目录。
29. ~-
前一个工作目录(previous working directory)。这个和内部变量$OLDPWD一致,和减号-一样。例子:echo ~-可以查看前一个工作目录。
30. ! 感叹号
取反操作符 != 不等于
31. *乘法
万能匹配符, 正则表达式中数学乘法** 幂运算
32. ** 双星号
算术运算中表示求幂运算
33. % 取余
例子:expr $b % $a 结果为 0
34. = 赋值
例子:a=$b,将把变量 b 的值赋给 a
35. () 小括号。
主要有两种用法:
(1)命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。
(2)用于初始化数组。如:array=(a b c d)
36. {} 大括号
代码块标识符,一般用于函数定义时表明函数体。
例子:a{3} 匹配3个 a
for i in {1...10} 循环指定范围
匿名函数{ cmd1;cmd2;cmd3;} &> /dev/null
37.> 输出重定向
例子:echo lvlv>file,将标准输出重定向文件file中去,如果文件存在则覆盖,不能存在则创建。不指定输出的内容,>file,则清空文件。
38.>> 输出重定向追加符
例子:echo lvlv 1>>file,将标准输出重定向文件file的最后面,不会覆盖file原有内容
39.>& 输出重定向等同符
作用于文件描述符,即左右两边的操作数是文件描述符
例子:echo lvlv>file 2>&1,标准输出重定向到文件file中,标准错误输出与标准输出重定向一致
40.&> 标准输出和标准错误输出重定向符
例子:echo lvlv &>file,标准输出和标准错误输出都重定向到文件file中,与echo lvlv 1>file 2>&1 功能相同
41.< 输入重定向
例子:test.sh < file,脚本test.sh需要read的地方会从文件file读取
42.<<
用法格式:cmd << text。从命令行读取输入,直到一个与text相同的行结束。除非使用引号把输入括起来,此模式将对输入内容进行shell变量替换。如果使用<<- ,则会忽略接下来输入行首的tab,结束行也可以是一堆tab再加上一个与text相同的内容。
以上就是本期的所有内容了,每一种语言的特殊符号是最为基础常见,但又非常重要。是我们基础学习的重要部分,无论在哪种工作中基础都是根,即使是在大数据开发的学习中,这特殊符号的基础也得牢记于心。