初识Shell

2022-03-14 11:01:29 admin

转自计算就该这么学

一、程序 

1、什么是程序

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

2、程序能做什么?

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

3、什么是编程?

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

二、语言 

1、那计算能理解的语言是什么呢 ?

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

2、有哪些编程语言?

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

1)机器语言

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

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

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

2)汇编语言

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

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

3)高级语言

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

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

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

编译类

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

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

解释类

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

4)总结

机器语言

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

汇编语言

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

高级语言

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

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

三、Shell 的定义 

1、Shell 的含义

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

2、Shell 在Linux中的存在形式

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

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

1)Shell有两种执行指令的方式,

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

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

总结

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

四、Shell 的分类 

Linux中默认的Shell是/bin/bash,流行的Shell有ash、bash、ksh、csh、zsh等,不同的Shell都有自己的特点以 及用途。

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 Shell相同,同时具备了C Shell的易用特点。许多安装脚本都使用ksh,ksh 有42条 内部命令,与bash相比有一定的限制性。

4、tcsh

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

5、sh

是一个快捷方式,已经被/bin/bash所取代。

6、nologin

指用户不能登录

7、zsh

目前Linux里最庞大的一种 zsh。它有84个内部命令,使用起来也比较复杂。一般情况下,不会使用该Shell。

五、Shell 能做什么

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

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

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

日志分析处理程序(PV, UV, 200, !200, top 100, grep/awk)

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

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

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

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

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

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

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

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