为什么要使用shell脚本?


为了偷懒,压榨机器 的力量来省时省力。

对于简单的命令,我们可以直接在shell窗口中输入,但如果是比较长且复杂的命令,一次一次敲就会显得很麻烦。

假如完成某个需求需要一口气输入100条命令,我们可以把这100条命令都记录到一个文档中,然后去调用文档中的命令,这样就能一步操作完成,以后再遇到这个需求的时候也只需要调用这个文档就行了,这个文档就是shell脚本,只是这个文档有它特殊的格式。

 

shell脚本的基本元素


第一行:

#!/bin/bash

第二行:

#一般来一点注视

#除了第一行的#,其他#开头的都是注释

然后 还能使用 变量 程序控制结构 等等程序设计语言中才出现的东西

运行:

./脚本名 

 

一个简单的脚本演示:

 

 

shell脚本的特性


 别名:

一般存储在 /etc/bashrc

     /root/.bashrc

alias  别名=’替代的命令‘

alias 查看已存在的别名

unalias 删除别名

 

 

 

命令替换

所谓命令替代,其实就是把命令的结果作为参数输入

这里可以利用到反引号``

 

后台处理

一个终端可以在后台处理多个程序

nohup      命令      &

比如 nohup  tar  XXXX  XXXX &

就可以在后台处理解压文件的过程   前台仍然可以干一些别的事情

 

管道 通过 管道符“|”  把 一个命令的输出   传递给   一个命令的输入

 

重定向  <  >

和管道类似   > 会覆盖  >>会追加

  1. 0     表示标准输入(stdin),配合<或<<使用,数据流从右向左。

  2. 1     表示标准输出(stdout),配合>或>>使用,数据流从左向右。

  3. 2     标准错误(stderr),配合>或>>使用,数据流从左向右。

  4. 0<或<    标准输入重定向,清空已有内容,数据从文件流向处理的命令

  5. 0<<或<<    追加输入重定向,追加内容到底部,数据从文件流向处理命令

  6. 1>或>     标准输出重定向,正常输出重定向到文件,会清空已有内容

  7. 1>>或>>     标准输出重定向,追加内容到文件底部,不清空原有内容

  8. 2>      错误输出重定向,将标准错误内容重定向到文件,如文件存在内容则清空

  9. 2>>       错误输出追加重定向,将标准错误内容追加到文件底部,不会清空已有内容。

  10. 关于重定向的文章https://www.jianshu.com/p/2fdbf86e5902

 

模式匹配 *

查看以txt为扩展名的文件,或者以a开头的文件

 

  1. *匹配任意(0个或者多个)字符或字符串,包括空字符

  2. {}生成序列    引用变量作为变量与普通字符分隔

  3. ?匹配任意1个字符,有且只有一个字符

  4. [abcd]匹配abcd中任意一个字符,abcd也可以是任意不连续字符

  5. [a-z]匹配a-z范围的任意字符,字符前后要连续,-范围的意思,也可以用连续数字

  6. [!abcd]表示不匹配包含[]中任意一个字符(abcd中任意一个)

 

 

 

 

其他shell中的特殊符号使用

\ 脱义字符,会将后面的特殊符号还原为普通字符$可以用作变量前面的标识符!

$ 表示上条命令的最后一个变量

;可以在一行中运行两个或两个以上的命令

~表示用户的家目录

&把一条命令放到后台执行

特殊符号&&和||
&& 只有command1执行成功后,command2才会执行,否则command2不执行
|| command执行成功后则command不执行,否则执行command2,即command1和command2中总有一条命令会执行