Bash 是 Linux 和 Mac 的默认 Shell(命令行环境),系统管理和服务器开发都需要用。
echo命令
echo作用是在屏幕上输入一行文本,可以将该命令的参数输出。一般样式
bash
$ echo "<HTML>
<HEAD>
<TITLE>Page Title</TITLE>
</HEAD>
<BODY>
Page body.
</BODY>
</HTML>"
-n 参数
默认情况,echo输出的文本末尾会有一个回车符,-n可以取消末尾的回车符。
bash
$ echo a;echo b
a
b
$ echo -n a;echo b
ab
-e 参数
解释引号中的特殊字符,默认情况下,引号会让特殊字符变成普通字符。
命令格式
命令行环境中,主要通过使用Shell命令进行各种操作。Shell命令基本都是这种格式。
bash
$ command [ arg1 ... [ argN ]]
空格
bash使用空格(或者tab键)区分不同的参数。
bash
$ echo this is a test
this is a test
bash对于多余的空格,会忽略掉多余的空格。
分号
分号(;
)是命令的结束符,使得一行可以放置多个命令,上一个命令执行结束后,再执行第二个命令。
$ clear; ls
上面例子中,Bash 先执行clear
命令,执行完成后,再执行ls
命令。
注意,使用分号时,第二个命令总是接着第一个命令执行,不管第一个命令执行成功或失败。
命令的组合符
除了分号,Bash 还提供两个命令组合符&&和||,允许更好地控制多个命令之间的继发关系。
&&表示若是前命令运行成功,则运行后命令。
||表示若是前命令运行失败,则运行后命令。
type命令
Bash 本身内置了很多命令,同时也可以执行外部程序。怎么知道一个命令是内置命令,还是外部程序呢?
type
命令用来判断命令的来源。
$ type echo
echo is a shell builtin
$ type ls
ls is hashed (/bin/ls)
上面代码中,type
命令告诉我们,echo
是内部命令,ls
是外部程序(/bin/ls
)。
type
命令的-t
参数,可以返回一个命令的类型:别名(alias),关键词(keyword),函数(function),内置命令(builtin)和文件(file)。
字符扩展
~自动扩展为当前用户的主目录。
?代表文件路径里面的任意单个字符,不包括空字符。
*表示文件路径里面的任意数量的任意字符,包括零字符。但不会匹配隐藏文件。
方括号扩展
[...] 表示文件确实存在的前提下才会扩展括号之中的任意一个字符。属于文件名匹配,扩展的结果必须符合现有的文件路径。
若是其中需要匹配[和连字号-,只能放在方括号内部的开头或结尾。
[start-end]扩展表示匹配一个连续范围。
[a-z]
:所有小写字母。[a-zA-Z]
:所有小写字母与大写字母。[a-zA-Z0-9]
:所有小写字母、大写字母与数字。[abc]*
:所有以a
、b
、c
字符之一开头的文件名。program.[co]
:文件program.c
与文件program.o
。BACKUP.[0-9][0-9][0-9]
:所有以BACKUP.
开头,后面是三个数字的文件名。
大括号扩展
表示分别扩展为大括号里面的所有值,各个值之间使用逗号分隔。**不是文件名扩展,只会扩展成所有给定的值。**内部的逗号前后不能有空格,否则大括号扩展会失效。
{start..end}
,表示扩展成一个连续序列。比如,{a..z}
可以扩展成26个小写英文字母。
如果整数前面有前导0
,扩展输出的每一项都有前导0
。
$ echo {01..5}
01 02 03 04 05
$ echo {001..5}
001 002 003 004 005
这种简写形式还可以使用第二个双点号(start..end..step
),用来指定扩展的步长。
$ echo {0..8..2}
0 2 4 6 8
上面代码将0
扩展到8
,每次递增的长度为2
,所以一共输出5个数字。
多个简写形式连用,会有循环处理的效果。
$ echo {a..c}{1..3}
a1 a2 a3 b1 b2 b3 c1 c2 c3
变量扩展
Bash将美元符号$开头的词元视为变量,将其扩展为变量值。
字符类
[[:class:]]
表示一个字符类,扩展成某一类特定字符之中的一个。常用的字符类如下。
[[:alnum:]]
:匹配任意英文字母与数字[[:alpha:]]
:匹配任意英文字母[[:blank:]]
:空格和 Tab 键。[[:cntrl:]]
:ASCII 码 0-31 的不可打印字符。[[:digit:]]
:匹配任意数字 0-9。[[:graph:]]
:A-Z、a-z、0-9 和标点符号。[[:lower:]]
:匹配任意小写字母 a-z。[[:print:]]
:ASCII 码 32-127 的可打印字符。[[:punct:]]
:标点符号(除了 A-Z、a-z、0-9 的可打印字符)。[[:space:]]
:空格、Tab、LF(10)、VT(11)、FF(12)、CR(13)。[[:upper:]]
:匹配任意大写字母 A-Z。[[:xdigit:]]
:16进制字符(A-F、a-f、0-9)。