在Shell中,有几个符号有着特别的含义,分别是#符号、分号、引号、斜线与反斜线、反引号、冒号、问号、美元符号,小括号,大括号,中括号,尖括号,竖线,破折号,波浪号等,下面详细看看这几个特殊字符的作用。
一、#符号
行首以 # 开头(除#!之外)的是注释。#!是用于指定当前脚本的解释器,比如:#! /bin/bash,就是制定解释器为bash.
二、分号(;)
分号有两个作用,如下:
1、命令分隔符
使用分号(;)可以在同一行上写两个或两个以上的命令。
2、终止判断
使用双分号(;;)可以终止case选项。
三、引号
引号有单引号和双引号,作用如下:
双引号: “STRING” 将会阻止(解释)STRING中大部分特殊的字符
单引号: ‘STRING’将会阻止STRING中所有特殊字符的解释,这是一种比使用”更强烈的形式。后面的实验会详细说明。
四、斜线和反斜线
1.斜线(/)
文件名路径分隔符。分隔文件名不同的部分(如/home/bozo/projects/Makefile)。也可以用来作为除法算术操作符。
2.反斜线(\)
一种对单字符的引用机制。\X 将会“转义”字符X。这等价于”X”,也等价于’X’。\ 通常用来转义双引号(”)和单引号(’),这样双引号和单引号就不会被解释成特殊含义了。
五、反引号(`)
反引号中的命令会优先执行。比如用cut获取最后一个字符串最后一个字符
str='shell learn'
echo -n $str|cut -c `echo -n $str|wc -c`
六、冒号(:)
1、 空命令
等价于“NOP”(no op,一个什么也不干的命令)。也可以被认为与shell的内建命令true作用相同。“:”命令是一个bash的内建命令,它的退出码(exit status)是(0)。
while :
do
something
done
2、变量扩展/子串替换
在与>重定向操作符结合使用时,将会把一个文件清空,但是并不会修改这个文件的权限。如果之前这个文件并不存在,那么就创建这个文件。
: > test.sh # 文件“test.sh”现在被清空了
# 与 cat /dev/null > test.sh 的作用相同
# 然而,这并不会产生一个新的进程, 因为“:”是一个内建命令
在与>>重定向操作符结合使用时,将不会对预先存在的目标文件(: >> target_file)产生任何影响。如果这个文件之前并不存在,那么就创建它。
也可能用来作为注释行,但不推荐这么做。使用 # 来注释的话,将关闭剩余行的错误检查,所以可以在注释行中写任何东西。然而,使用 : 的话将不会这样
3、环境变量做分隔符
七、问号(?)
测试操作符,在一个双括号结构中,? 就是C语言的三元操作符
((x=5<10?1:0))
echo $x
八、美元符号($)
1.变量替换
比如:
a=5
echo $a
2、命令替换(同反引号)
比如:
cd $(echo mypath)
其他作用:
- s#传递到脚本的参数个数
- $*以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此选项参数可超过9个
- $$脚本运行的当前进程ID号
- $!后台运行的最后一个进程的进程ID号
- $@与$#相同,但是使用时加引号,并在引号中返回每个参数
- $-显示shell使用的当前选项,与set命令功能相同
- $?显示最后命令的退出状态。0表示没有错误,其它任何值表明有错误
九、小括号(())
1、命令组
在括号中的命令列表,将会作为一个子 shell 来运行,相当于一个局部变量,除了括号就没了。对变量的修改无效。
str="wo shi diaosi"
(str="wo shi gaofushuai")
echo $str #wo shi diaosi
2、初始化数组
arr={1 2 3 4 5}
echo $arr #1 2 3 4 5
十、大括号({})
1、文件名扩展
cp test.{c,cpp}
#上面这句与cp test.c test.cpp是等价的
2、代码块
代码块,又被称为内部组,这个结构事实上创建了一个匿名函数(一个没有名字的函数)。然而,与“标准”函数不同的是,在其中声明的变量,对于脚本其他部分的代码来说还是可见的。就是修改有效。
十一、中括号
1、条件测试
条件测试表达式放在[ ]中。
wo="diaosi"
if [$wo eq "gaofushuai"]
then
echo "hao yan guang"
else
echo "oh ,no"
fi
2、取数组元素
arr=(1,2,3,4,5)
echo $arr[2]
十二、尖括号(<和>)
重定向
十三、竖线(|)
分析前边命令的输出,并将输出作为后边命令的输入。这是一种产生命令链的好方法。
十四、波折号
1、命令选项参数前缀
在所有的命令内如果想使用选项参数的话,前边都要加上“-”。
2、用于重定向stdin或stdout
十五、波浪号(~)
当前目录。
参考资料:实验楼