SHELL(1)初识Shell

一、程序

1.什么是程序

程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。简单来说,电脑里面的应用都是程序来控制的,程序天天见。程序是由序列组成的,告诉计算机如何完成一个具体的任务。由于现在的计算机还不能理解人类的自然语言,所以还不能用自然语言编写计算机程序,不过现在语音识别技术己经很历害了,在不久的将来,估计,电脑就自己会编程序了。

2.程序能做什么

电脑控制手机控制机械控制物联控制。一切自动化制造的系统,都是由程序来控制的。

3.什么是编程

编程是个动词,编程==写代码,写代码为了什么?为了让计算机于你想要干的事情,比如,马XX想跟别人聊天,于是写了个聊天软件,这个软件就是一堆代码的集合,这些代码是什么)这些代码是计算机能理解的语言。

二、语言

1.计算机能理解的语言

计算机只能理解2进制——0101010,但是总不能人肉输一堆二进制给计算机虽然最原始的计算机就是这么干的让它工作吧,这样开发速度太慢了。所以最好的办法就是人输入简单的指令,计算机能把指令转成二进制进行执行。

2.有哪些编程语言

编程语言总体分以为机器语言、汇编语言、高级语言

①机器语言

●由于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。但是机器语言编写的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性很大,机器语言属于低级语言。

●用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实运行时间的几十倍或几百倍。而目,编出的程序全是些0和1的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。

●机器语言是微处理器理解和使用的,用于控制它的操作二进制代码。

②汇编语言

●汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。

●汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而目源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。

③高级语言

●高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。

●高经语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,像最简单的编程语言PASCAL语言也,属于高级语言。

●高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:

1)编译类

编是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行(编译后生成的可执行文件,是cpu可以理解的2进制的机器码组成的),使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(*.obj,也就是OBJ文件)才能执行,只有目标文件而没有源代码,修改很不方便。

编译后程序运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等。

2)解释类

执行方式类似于我们日常生活中的"同声翻译”,应用程序源代码一边由相应语言的解释器“翻译“成目标代码(机器语言),一边执行,因此效率比较低,而目不能生成可独立执行的可执行文件,应用程序不能脱离其解释器(想运行,必须先装上解释器,就像跟老外说话,必须有翻译在场),但这种方式比较灵活,可以动态地调整、修改应用程序。如Shell,Python、Java、PHP、Ruby等语言。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-im8hz8R0-1656381012840)(https://s2.loli.net/2022/06/28/XcrldeTjMxgDGFp.png)]

三、Shell的定义

1.Shell的含义

首先Shell的英文含义是"壳":它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核。linux中的Shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户录入的界面,这个界面也可以反馈运行信息。

2.Shell在Linux中的存在形式

由于Linux不同于Windows,Linux是内核与界面分离的,它可以脱离图形界面而单独运行,同样也可以在内核的基础上运行图形化的桌面。这样,在Linux系统中,就出现了两种Shell表现形式,一种是在无图形界面下的终端运行环境下的Shell,另一种是桌面上运行的类以Windows的MS-DOS运行窗口,前者我们般习惯性地简称为终端,后者一般直接称为Shell。

3.Shell如何执行用户的指令

Shell有两种执行指令的方式

·第一种方法是用户事先编写一个sh脚本文件,内含Shell脚本,而后使用Shell程序执行该脚本,这种方式,我们习惯称为Shell编程。

·第二种形式,则是用户直接在shell界面上执行Shell命令,由于Shell界面的关系,大家都习惯一行行的书写,很少写出成套的程序来一起执行,所以也称命令行。

四、Shell的分类

linux中默认的shell是/bin/bash,流行的shell有ash、bash、ksh、csh、zsh等,使用不同的 Shell 时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。

[root@localhost ~]# cat /etc/shells
/bin/sh   #是bash命令的软链接  (已经被/bin/bash所替换)
/bin/bash   基准于GNU的框架下发展出的Shell。
/usr/bin/sh   已经被bash所替换。
/usr/bin/bash   #centos和redhat系统默认使用bash shell(解释器)
/bin/tcsh   #csh的增强版,与csh完全兼容 整合了csh,提供更多的功能。
/bin/csh   #已经被/bin/bash 所替换  (整合C shell,提供更多的功能)
nologin:奇怪的shell,这个shell可以让用户无法登录主机。

这个shell是针对用户而言的,可以查看/etc/passwd里面的最后的字段使用的是哪个shell,如果想要修改可以用chmod -s或者chsh -s来重新指定。

1.bash

大多数Linux系统默认使用的Shell,bash Shell是Bourne Shell的一个免费版本,它是最早的Unix Shell,bash还有一个特点,可以通过help命令来查看帮助。包含的功能几乎可以涵盖Shell所具有的功能,所以一般的Shell脚本都会指定它为执行路径。

2.csh

C Shell使用的是"类C"语法,csh是具有C语言风格的一种Shell,其内部命令有52个,较为庞大。目前使用的并不多,已经被/bin/tcsh所取代。

3.ksh

Korn Shell的语法与Bourne Shellt相同,同时具备了C Shell的易用特点。许多安装脚本都使用ksh,ksh有42条内部命令,与bash相比有一定的限制性。

4.tcsh

tcsh是csh的增强版,与C Shell完全兼容。

5.sh

是一个快捷方式,以及被/bin/bash取代。

五、Shell脚本是什么

shell脚本就是说我们把原来 linux 命令或语句放在一个文件中,然后通过这个程序文件去执行时,我们就说这个程序为 shell 脚本或 shell 程序;我们可以在脚本中输入一系统的命令以及相关的语法语句组合,比如变量,流程控制语句等,把他们有机结合起来就形成了一个功能强大的 shell 脚本。

六、Shell脚本能做什么

·自动化批量系统初始化程序(update,软件安装,时区设置,安全策略)

·自动化批量软件部署程序(LAMP,LNMP,Tomcat,LVS,Nginx)

·应用管理程序(KVM,集群管理扩容,MySQL,DELLR720批量RAID)

·日志分析处理程序(PV,UV,200,1200,top100,grep/awk)

·自动化备份恢复程序MySQL完全备份/增量+Crond)

·自动化管理程序(批量远程修改密码,软件升级,配置更新)

·自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,.Apache,MySQL)

·配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)

·自动化扩容(增加云主机——>业务上线)

·zabbix监控CPU80%+|-50% Python API AWS/EC2(增加/删别除云主机)+Shell Script(业务上线)

·俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,坦克大战,排序算法实现

·Shell可以做任何事(一切取决于业务需求)

总结

1.机器语言

优点是最底层,速度最快,缺点是最复杂,开发效率最低。

2.汇编语言

优点是比较底层,速度最快,缺点是复杂,开发效率最低。

3.高级语言

编译型语言执行速度快,不依赖语言环境运行,跨平台性差。

解释型语言跨平台性好,一份代码到处使用,缺点是执行速度慢,依赖解释器运行。

4.Shell

Shell只是为用户与机器之间搭建成的一个桥梁,让我们能够通过Shell来对计算机进行操作和交互,从而达到让计算机为我们服务的目的。

Linux中默认的shell是/bin/bash,默认的版本是bash。

shell脚本可以将需要执行的命令保存到一个文件中,按照顺序执行,它不需要编译,它是解释型的。

END

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐