shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
ken thompson 的 sh 是第一种 unix shell,windows explorer 是一个典型的图形界面 shell。
为什么要学习和使用shell?
shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学
shell的分类
cat /etc/shells
在linux中有很多类型的shell,不同的shell具备不同的功能,shell还决定了脚本中函数的语法,linux中默认的shell是 / b a s h / b a s h ( 重 点 ) \color{#ff3030}{/bash/bash(重点)} /bash/bash(重点),流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。
编写规范:
#!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器]
shell相关指令
文件命名规范:
文件名.sh .sh是linux下bash shell 的默认后缀
bash 常用快捷键
快捷键 | 作用 |
---|---|
ctrl a | 把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。 |
ctrl e | 把光标移动到命令行结尾。 |
ctrl c | 强制终止当前的命令。 |
ctrl l | 清屏,相当于clear命令。 |
ctrl u | 删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便 |
ctrl k | 删除或剪切光标之后的内容。 |
ctrl y | 粘贴ctrl u或ctul k剪切的内容。 |
ctrl r | 在历史命令中搜索,按下ctrl r之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。 |
ctrl d | 退出当前终端。 |
ctrl z | 暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管理章节详细介绍。 |
ctrl s | 暂停屏幕输出。 |
ctrl q | 恢复屏幕输出。 |
输入输出重定向
linux 的标准输入与输出
设备 | 设备名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
输入重定向
输入重定向:是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)
类型 | 符号(语法) | 功能 |
---|---|---|
标准输入 | 命令<文件1 | 命令把文件1的内容作为标准输入设备 |
标识符限定输入 | 命令<<标识符 | 命令把标准输入中读入内容,直到遇到“标识符”分解符为止 |
输入输出重定向(同时使用) | 命令< 文件1 >文件2 | 命令把文件1的内容作为标准输入,把文件2作为标准输出。 |
输出重定向
输出重定向:(通俗的讲,重定向输出就是把要输出的文件信息写入到一个文件中去,而不是将要输出的文件信息输出到控制台(显示屏),在linux中,默认的标准输出设备是控制台(或称为显示器),用户输出的信息默认情况下都会显示到控制台
&表示全部文件,文件不管对错,1表示标准输出文件,2表示标准错误输出。
类型 | 符号 | 作用 |
---|---|---|
标住输出重定向 | 命令 > 文件 | 以覆盖方式,把命令的正确输出内容输出到指定的文件或设备当中 |
标住输出重定向 | 命令 >> 文件 | 以追加方式,把命令的正确输出内容输出到指定的文件或设备当中 |
标准错误输出重定向 | 错误命令2 > 文件 | 以覆盖方式,把命令的错误输出输出到指定的文件或设备当中 |
标准错误输出重定向 | 错误命令2 >> 文件 | 以追加方式,把命令的错误输出输出到指定的文件或设备当中 |
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 |
正确输出和错误输出同时保存 | 命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 |
正确输出和错误输出同时保存 | 命令 &> 文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 |
正确输出和错误输出同时保存 | 命令 &>> 文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 |
正确输出和错误输出同时保存 | 命令 >> 文件1 2>>文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中。 |
/dev/null 文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到**/dev/null**中
[root@localhost ~]$ command > dev/null
多命令顺序执行
多命令执行符 | 作用 | 格式 |
---|---|---|
; | 命令1 ;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1 && 命令2 | 当命令1正确执行( ? = 0 ) , 则 命 令 2 才 会 执 行 当 命 令 1 执 行 不 正 确 ( ?=0),则命令2才会执行 当命令1执行不正确( ?=0),则命令2才会执行当命令1执行不正确(?≠0),则命令2不会执行 |
ll | 命令1 || 命令2 | 当命令1执行不正确( ? ≠ 0 ) , 则 命 令 2 才 会 执 行 当 命 令 1 正 确 执 行 ( ?≠0),则命令2才会执行当命令1正确执行( ?=0),则命令2才会执行当命令1正确执行(?=0),则命令2不会执行 |
shell脚本的执行
[root@localhost ~]$ vim test.sh
#!/bin/bash
echo “hello world”
两种方式执行shell脚本
第一种:给文件增加执行权限
[root@localhost ~]$ chmod u x test.sh
[root@localhost ~]$ ./test.sh #绝对路径或相对路径执行
第二种(了解):通过bash调用执行脚本
[root@localhost ~]$ bash test.sh