元字符和文件名生成
$ls -l filename
显示文件的访问权限,符号链接,文件属主, 文件属组,文件大小, 修改时间,文件名
$ls -l *.c
类似正则表达式
*为一个元字符,用来匹配任意,包括空字符串。
abc*: 匹配所有以abc开头的空字符串
*.c: 匹配所有以.c结尾的字符串
abc?: 问号为一个通配符,如例子,只匹配以abc开头,长度为4的字符串
[…]: 自定义规则,[a-z],[0-9]等等,还可以用否定规则,如
$中[!0-9]
bash中[^0-9]
还可以将*用到路径中去:
如下:
wenshuaigedeAir:~ macbookair$ ls -l gits/*/manage.py
-rwxr-xr-x 1 macbookair staff 248 6 7 09:53 gits/Leech/manage.py
-rwxr-xr-x 1 macbookair staff 249 6 17 18:13 gits/Mysite/manage.py
一个额外的例子:
$grep ‘[Ff]irst’ *.txt
查找规则是:匹配所有内容中含有’First’或者’first’的格式为txt的文档。
转义与引用
如果想输出转义字符,并且转义字符是
’\’+字母
要在echo之后加入 -e 选项
如:
$echo -e ‘\n’
如果不是字母的转义,则不用加上-e, 如:
$echo “\””
(注:这里外围的引号必须是双引号,否则无法转义)
Shell中单引号和双引号的区别:
定义一个变量name.
echo ‘$name’ 就是将’’里面的东西当成一个字符串
echo $name 或者 echo “$name”都是将$name里面的内容输出.
如果需要转义多个连续字符,就把他们全部括在单引号里,如下:
echo ‘\*&^%$#@!’’'
所以:
1 无论怎样,如果把字符串放到单引号里,echo的时候就原封不动的输出原有样式。
2 如果定义变量,想要引用变量的值,可以直接$name访问,也可以加上双引号。
3 如果需要转义,如果是’\n’这种含有字母的转义,就需要加上’-e’;如果不是含有字母的转义,就不 需要 ‘-e’而需要双引号;但是通过-e的话,就无所谓单双引号。
一个额外的例子:
有一个文件,名为’test file’
删除的时候:
$rm test\ file
$rm test” ”file
$rm test’ ’file
查看命令历史
$fc -l 列出最近的几条命令(16条)
$fc -e 100 110 用vi打开编号为100到110之间的命令,可以编辑
$history 列出所有历史命令
$HISTFILE
$HISTSIZE
命令别名
比如:
$alias del = rm
执行之后, del 和rm的效果是等价的,不会取代rm,两者都可以用,但是当终端退出的时候,alias失效
查询命令
比如我要查询ls的用法
$man ls
然后按’Q’返回终端
命令行的解释执行过程
12个过程:
- 读取命令行
- 回显输入的命令
- 变量替换
- 命令替换
- I/O重定向(Bourne Shell)
- IFS处理
- 扩展元字符以生成文件名
- 删除引号引用
- 跟踪执行过程
- I/O重定向 (Korn Shell)
- 环境处理
- 执行命令