# 井号(comments)
井号 出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行。
#这个井号表示注释
echo "abc" #这个井号表示注释
如果被用在指令中,或者引号双引号括住的话,或者在倒斜线的后面,那他就变成一般符号,不具上述的特殊功能。
echo "abc#abc"
~ 波浪号
波浪号 代表当前登录用户的home目录。
cd ~
~+ 表示当前的工作目录,和pwd作用相同。
echo ~+
~- 表示上次的工作目录。
echo ~-
; 分号(command seperator)
分号表示连续指令。
cd ~; ls
;; 连续分号(terminator)
连续分号 专用在case的选项,作为结束标识。
var="1"
case $var in
1)
echo 1;
;;
2)
echo 2;
;;
*)
echo "default";
;;
esac
. 点号(dot)
1个点号表示当前目录,2个点号表示上层目录。
ls .
ls ..
如果文件名以点号开头,表示该文件为隐藏属性。需要通过 ls -a 才能看到该文件。
正则表达式中,点号表示任意字符。
’ 单引号(single quote)
被单引号用括住的内容,将被视为单一字串。在引号内的代表变数的$符号,没有作用,也就是说,他被视为一般符号处理,防止任何变量替换。
var=123
echo 'number is $var' #这里输出的为$var,而不是123
” 双引号(double quote)
被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。这点与单引数的处理方式不同。
var=123
echo 'number is $var' #这里输出的为123
` 倒引号(backticks)
倒引号引住的内容为命令,会作为命令执行。类似于$()
echo `ls`
echo $(ls)
, 逗号(comma)
逗号用在运算表达式中间,用于分隔表达式。
a=1
b=2
((a++, b++))
echo $a
echo $b
/ 斜线(forward slash)
斜线在路径表示时,代表目录。
cd /etc/sysconfig/
通常单一的斜线表示系统根目录。
ls /
在四则运算中,表示除法。
let "var=25/5"
echo $var #输出5
\ 反斜杠
反斜杠放在指令前,表示取消alias作用。
\ls
反斜杠房子特殊符号前,则该特殊符号的作用消失,表示转义
echo "\"abc\""
反斜杠放在指令的末端,表示指令链接下一行。
ls /etc/ \
-la
| 竖线(pipeline)
unix系统中,竖线表示管道,连接上个指令的标准输出,作为下个指令的标准输入。
ls -la | wc -l
! 感叹号(negate or reverse)
感叹号通常表示反逻辑的作用,如:条件语句中,表示 不等于
if [ $var != 2 ]; then
echo "not equal"
fi
在正则表达式中,表示反逻辑。
ls a[!0-9]
: 冒号
冒号在bash中,这是一个内建指令,表示:什么都不做,但返回值为0
:
echo $? #返回0
? 问号
问号在文件名扩展上,表示任意单个字符,但不包括null字符。
ls a?a
* 星号
星号在文件名扩展上,表示任意多个字符,包括null字符。
ls a*
星号在运算时,代表乘法。
let "var = 3 * 4"
echo $var #12
两个星号在运算时代表次方运算。
let "var=2**3"
echo $var #8
$ 美元符号(dollar sign)
美元符号表示变量替换。
var=3
echo $var
正则表达式中,美元符号表示行结束符。
变量的正规表达式。bash对 变 量 的 正 规 表 达 式 。 b a s h 对 {} 定义了不少用法。以下是取自线上说明
${parameter:-word} 使用默认值word来代替那些空的或者没有复制的变量。
${parameter:=word} 使用指定值word来代替空的或者没有复制的变量。
${parameter:?word} 如果变量为空或者未赋值,那么就会显示出错误信息word并中止脚本的执行同时返回退出码1。
${parameter:+word}
${parameterffset}
${parameterffset:length}
${!prefix*}
${#parameter} 字符串长度
${parameter#word} 从字符串的头部开始删除与word匹配的最小部分,然后返回剩余部分
${parameter##word} 从字符串的头部开始删除与word匹配的最长部分,然后返回剩余部分
${parameter%word} 从字符串的尾部开始删除与word匹配的最小部分,然后返回剩余部分
${parameter%%word} 从字符串的尾部开始删除与word匹配的最长部分,然后返回剩余部分
${parameter/pattern/string}
${parameter//pattern/string}
∗表示脚本的所有参数,使用时视情况加上双引号。引用参数的方式如下:
∗
表
示
脚
本
的
所
有
参
数
,
使
用
时
视
情
况
加
上
双
引
号
。
引
用
参
数
的
方
式
如
下
:
0,
1,
1
,
2, ...,
10,
10
,
{11}, …
其中:
0表示脚本名,
0
表
示
脚
本
名
,
1, … 表示脚本参数。
@与
@
与
* 具有相同作用。
不同点是:
∗是将所有的引用变量视为一个整体,
∗
是
将
所
有
的
引
用
变
量
视
为
一
个
整
体
,
@ 则仍保留每个引用变量的区段概念。
$# 也是与引用变量相关的符号,表示引用变量的数量。
$? 状态值(status variable)
表示指令的结果码,一般来说:0表示正常,非0表示异常。
$$ 表示当前进程的pid
$- 显示shell使用的当前选项
$! 最后一个后台运行的进程ID
() 圆括号(指令群组,command group)
用括号将一串连续指令括起来,这种用法对 shell 来说,称为指令群组。
(cd ~ ; vcgh=`pwd` ;echo $vcgh)
指令群组有一个特性,shell会以产生 subshell来执行这组指令。因此,在其中所定义的变数,仅作用于指令群组本身。
除了上述的指令群组,括号也用在 array 变数的定义上;另外也应用在其他可能需要加上escape字元才能使用的场合,如运算式。
(()) 双圆括号
这组符号的作用与 let 指令相似,用在算数运算上,是 bash 的内建功能。所以,在执行效率上会比使用 let指令要好许多。
var=1
((++var))
echo $var #2
{} 大括号(block of code)
脚本中,大括号中夹杂着一段或几段以分号做结尾的指令或变量,这种情况下,和指令群组类似,但不同的是,它在当前shell执行,不会产生subshell。
{
echo abc
}
大括号也被用在函数的功能上,广义的讲,单纯只使用大括号时,作用就像是个没有指定名称的函数一样。
此外,大括号还有另一种用法,如下
{xx,yy,zz,…}
这种大括号的组合,常用在字串的组合上,来看个例子
mkdir {userA,userB,userC}-{home,bin,data}
我们得到 userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data, userC-home, userC-bin,userC-data,这几个目录。
[] 中括号
中括号常用在流程控制中,用于括住判断式。可理解为指向test命令的一个软链接。所以其用法可以参照test,将test位置替换为[即可。
if [ -z $var ]; then
fi
正则表达式中,表示范围或集合。
ls abc[1-9]
[[]] 与[] 作用类似,允许使用|| && 逻辑等符号。
var=5
if [[ $var > 4 ]]; then echo "large"; fi;
|| 双竖线
双竖线表示逻辑符号 or,可以链接多个命令。允许执行一系列命令直到有一条命令成功为止,其后所有命令将不再被执行。
&& 双and符号
双and符号表示逻辑符号 and,可以连接多个命令。只有在前面所有的命令都执行成功的情况下才执行后一条命令。
echo "a" && echo "b" && echo "c"
& and符号
单一个and符号放在完整指令末端,表示后台执行。
+ 加号(plus)
在运算表达式中,表示加法。
此外在正则表达式中,用来表示很多个的前面字符的意思。
grep '10\\+9' fileB109100910000910000931010009#这个符号在使用时,前面必须加上转义字符。
- 减号(dash)
在运算表达式中,表示减号。
let "var=5-3"
减号表示系统指令的选项符号。
ls -la
在GNU指令中,如果单独使用-,不加任何该加的文件名称时,代表标准输入的意思。只是GNU指令的共通选项。
tar xpvf - #代表从标准输入读取资料。
cd指令中,表示回到上次目录。
cd -
% 百分号(modulo)
在运算表达式中,表示取模
expr 10 % 2 #输出2
此外,也被运用在关于变量的规则表达式当中
${parameter%word}${parameter%%word}
一个 % 表示最短的 word 匹配,两个表示最长的 word 匹配。
= 等号(equals)
等号表示变量赋值,PATH设定。
var=3
export JAVA_HOME=/usr/local/java
== 双等号
双等号在条件表达式中,表示等于。
if [ $var1 == $var2 ]; ...
!= 不等于
不等于号在条件表达式中,表示不等于。
if [ $var1 != $var2 ]; ...
^ 上尖括号
正则表达式中,表示行首,在[]中,表示非。
输出/输入重导向
ls >> a.txt #追加操作
ls > a.txt #创建操作
ls 1>>/dev/null 2>>&1