目录
目录
一,什么是shell
1.1什么是shell
#shell的历史
Shell起源于贝尔实验室(Bell Labs)的Ken Thompson在1969年开发的Multics操作系统。Multics是一种分时共享操作系统,它需要一种命令语言来与用户交互,于是Thompson开发了一个叫做“Command Language”(简称“sh”)的命令语言,它能够执行命令,启动进程以及管理文件和目录等操作。
1971年,Unix操作系统开发启动,Thompson将Multics的sh移植到Unix上,并对其进行了改进和优化,于是诞生了现代Shell的雏形。改进后的Shell被称为“Bourne Shell”或者“sh”,它成为了Unix系统标准的默认Shell。
之后,Unix系统发展迅速,Shell也被广泛使用。由于Shell具有简单易用、编写脚本方便等优势,它成为了Unix系统管理、配置、编程和运维工作的基本工具之一。
随着Unix系统的发展,Shell也不断更新迭代。Bourne Shell后来被Bourne-Again Shell(简称“bash”)取代,而csh、ksh、zsh等其他Shell也得到了广泛应用。此外,Windows系统上也有类似的Shell工具,如cmd.exe和PowerShell等。
#什么是shell?
shell又称为命令解释器,识别用户输入的各种命令,并传递给给操作系统。在UNIX或者localhost中,shell不仅是用户交互的界面,也是系统控制的脚本语言。它允许用户通过键入命令与操作系统进行交互,常见的Shell包括Bash、Csh、Ksh等
1.2shell的分类
-
Bourne Shell (sh):最早的 Unix Shell,具有基本的命令解释功能。
-
C Shell (csh):在 Bourne Shell 的基础上增加了一些 C 语言的特性,例如命令历史记录和编程结构。
-
Korn Shell (ksh):基于 Bourne Shell 的扩展版本,融合了 C Shell 和 Bourne Shell 的特性,功能更强大。
-
Bourne Again Shell (bash):Linux 系统默认的 Shell,是 Bourne Shell 的增强版本,兼容大多数 Bourne Shell 脚本,并提供了更多的功能和便利性。
-
PowerShell:由 Microsoft 开发的 Shell,可在 Windows 操作系统中使用。它具有强大的脚本编程能力和集成的命令行界面。
-
Zsh:一种功能强大的 Shell,提供了高级特性如自动补全、主题定制和插件支持。
这只是一些常见的 Shell。
补充:查看当前shell的命令:
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
1.3shell特性
shell不仅仅可以充当用户与操作系统交互界面的角色,还可以当一种程序设计语言来使用。可以通过shell编程,实现非常实用的功能,提高自动化水平。
shell脚本
shell脚本听起来很高级,当然毋庸置疑它确实很高级,但是他又很接地气。为什么接地气呢,因为有些问题会经常遇到,并且解决起来也不是那么方便。与其一条一条敲命令倒不如把他们那些命令有规律地组织起来,放进一个文件里,需要它时直接拿出来用就好了。
存放那些命令的文件我们就叫shell脚本,那些文件一般以.sh后缀结尾,shell脚本一般按行进行解释。他的脚本执行方式也像其他语言一样有顺序执行,选择执行和循环执行。
补充:shell是一门脚本语言,那么他和一般的编程语言有什么区别
目的不同:
Shell
脚本语言主要用于系统管理任务、命令行界面任务以及自动化任务等,而编程语言则主要以创建、开发、构建程序和应用程序以及实现算法等为主要目的。运行环境不同:
Shell
脚本语言运行在Unix/Linux
环境下,而编程语言则可以在不同的平台和操作系统上运行,如Windows
、IOS
、Linux
等。语法不同:
Shell
脚本语言的语法相对来说比较简单,并且往往使用已有命令组合完成任务,而编程语言则可以使用编程语言本身提供的语法结构来实现各种功能需求。能力不同:
Shell
脚本语言不适合用于实现大型软件开发,而编程语言则更适合于创建、开发大型或复杂的程序、游戏、框架和库等。 更重要的是脚本语言执行不需要编译器,它需要的是解释器,虽然他的运行效率差但是它的运行效率高,脚本语言也是一种动态语言,可以实时更改代码。
二,shell基础
2.1shell脚本基本元素
- shell开头必须有 #!/bin/bash --------------------->指定脚本用shell来执行
- #comment 1 --------------------->单行注释用#
:<<BLOCK
....注释内容
BLOCK --------------------->多行注释
2.2shell脚本
- 注意事项
- 脚本注释尽量不使用中文,不要吝啬自己的注释
- 多使用内部命令,内部命令用起来比外部命令节省时间
- 注意代码缩进,增加代码的可读性,这种好习惯也可以用来学习其他东西
- 脚本执行(有四种脚本执行方式,假设文件是test123.sh)
- ./test123.sh(在当前目录) ------------------------>这种方法执行时文件需要权限
- /test/test123.sh(绝对路径) ------------------------>这种方法执行时文件需要权限
- bash test123.sh(用sh或bash执行) ------------------------->该执行方式文件不要权限,建议使用
- source test123.sh 或 . test123.sh -------------------------->执行会开启子shell,不需要执行权限 补充:方法一和二执行都需要执行权限,但是三可以在脚本中不指定解释器,脚本可以没有执行权限,并且只有方法四是在当前shell中执行,方法一和三都需要开启子shell。
2.3shell特性回顾
- echo
- 用echo打印linux命令时 -n 可以取消输出后行末的换行符
`\\` | 反斜杠
`\"` | 双引号
`\'` | 单引号
`\n` | 换行符
`\r` | 回车符
`\t` | 制表符(Tab)
`\b` | 退格符
2.4打印hello world!
#!/bin/bash
# 打印 Hello World!
echo "Hello World!"