为什么要使用shell脚本?
为了偷懒,压榨机器 的力量来省时省力。
对于简单的命令,我们可以直接在shell窗口中输入,但如果是比较长且复杂的命令,一次一次敲就会显得很麻烦。
假如完成某个需求需要一口气输入100条命令,我们可以把这100条命令都记录到一个文档中,然后去调用文档中的命令,这样就能一步操作完成,以后再遇到这个需求的时候也只需要调用这个文档就行了,这个文档就是shell脚本,只是这个文档有它特殊的格式。
shell脚本的基本元素
第一行:
#!/bin/bash
第二行:
#一般来一点注视
#除了第一行的#,其他#开头的都是注释
然后 还能使用 变量 程序控制结构 等等程序设计语言中才出现的东西
运行:
./脚本名
一个简单的脚本演示:
shell脚本的特性
别名:
一般存储在 /etc/bashrc
/root/.bashrc
alias 别名=’替代的命令‘
alias 查看已存在的别名
unalias 删除别名
命令替换
所谓命令替代,其实就是把命令的结果作为参数输入
这里可以利用到反引号``
后台处理
一个终端可以在后台处理多个程序
nohup 命令 &
比如 nohup tar XXXX XXXX &
就可以在后台处理解压文件的过程 前台仍然可以干一些别的事情
管道 通过 管道符“|” 把 一个命令的输出 传递给 一个命令的输入
重定向 < >
和管道类似 > 会覆盖 >>会追加
-
0 表示标准输入(stdin),配合<或<<使用,数据流从右向左。
-
1 表示标准输出(stdout),配合>或>>使用,数据流从左向右。
-
2 标准错误(stderr),配合>或>>使用,数据流从左向右。
-
0<或< 标准输入重定向,清空已有内容,数据从文件流向处理的命令
-
0<<或<< 追加输入重定向,追加内容到底部,数据从文件流向处理命令
-
1>或> 标准输出重定向,正常输出重定向到文件,会清空已有内容
-
1>>或>> 标准输出重定向,追加内容到文件底部,不清空原有内容
-
2> 错误输出重定向,将标准错误内容重定向到文件,如文件存在内容则清空
-
2>> 错误输出追加重定向,将标准错误内容追加到文件底部,不会清空已有内容。
- 关于重定向的文章https://www.jianshu.com/p/2fdbf86e5902
模式匹配 *
查看以txt为扩展名的文件,或者以a开头的文件
-
*匹配任意(0个或者多个)字符或字符串,包括空字符
-
{}生成序列 引用变量作为变量与普通字符分隔
-
?匹配任意1个字符,有且只有一个字符
-
[abcd]匹配abcd中任意一个字符,abcd也可以是任意不连续字符
-
[a-z]匹配a-z范围的任意字符,字符前后要连续,-范围的意思,也可以用连续数字
-
[!abcd]表示不匹配包含[]中任意一个字符(abcd中任意一个)
其他shell中的特殊符号使用
\ 脱义字符,会将后面的特殊符号还原为普通字符$可以用作变量前面的标识符!
$ 表示上条命令的最后一个变量
;可以在一行中运行两个或两个以上的命令
~表示用户的家目录
&把一条命令放到后台执行
特殊符号&&和||
&& 只有command1执行成功后,command2才会执行,否则command2不执行
|| command执行成功后则command不执行,否则执行command2,即command1和command2中总有一条命令会执行