飞道的博客

死磕shell系列-shell介绍

305人阅读  评论(0)

一、什么是shell

在计算机科学中,Shell俗称用来区别于核),是指“为使用者提供操作界面”的软件程序命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接受用户输入的命令行(命令名+参数),然后调用相应的应用程序在内核中执行。

shell之Linux系统关系图

 

同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

  • 顺序执行:程序按从上到下顺序执行
  • 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
  • 循环执行:程序执行过程中需要重复执行多次某段语句

         

二、shell类型

Linux shell种类非常多,常见的shell如下:

  • Bourne-Again Shell(bash):GPL,CentOS 、Ubuntu、Red Hat,Slackware,Caldera 等Linux大多数系统
  • Korn Shell(ksh):AIX 
  • POSIX shell(sh):HP-UX
  • Bourne shell(sh):Solaris
  • C shell(csh): FreeBSD
  • zshMacOS

Windows PowerShell是一种新的交互式的命令行和基于任务脚本编写技术。

不同的shell语言的语法有所不同,一般不能交换使用,最常见的shell是bash,也就是Bourne Again Shell。Bash由于易用和免费,在日常工作中被广泛使用,也是大多数Linux操作系统磨人的shell环境。

查看系统shell类型


  
  1. echo ${SHELL}
  2. cat /etc/shells

三、为什么学习shell脚本编程

Shell脚本语言是实现Linux/UNIX系统管理自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。每一个合格 的Linux系统管理员或运维工程师,都需要能够熟练地编写Shell脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容。只有这样才能提升运维人员的工作效率,适应曰益复杂的工作环境,减少不必要的重复工作,从而为个人的职场发展奠定较好的基础

总之一句:运维工程师要想月薪过万,shell脚本技能必不可少!!!!

目前Linux系统下最流行的运维自动化语言就是shell和Python了。两者之间,shell几乎是IT企业必须使用的运维自动化编程语言,特别是在运维工作中的服务监控业务快速部署服务启动停止数据备份及处理日志分析等环节里,shell是不可缺的。当然Python也是一门更适合处理复杂的业务逻辑,以及开发复杂的运维软件工具,实现通过web访问等。Shell是一个命令解释器,解释执行用户所输入的命令和程序。一输入命令,就立即回应的交互的对话方式。

其实PHP、Python 都属于高级编程语言,他们也可以用来做脚本编程,因为他们都用对应的执行脚本的解析器。而主要考虑以下几个原因

  • 便捷性,Win7专业版和旗舰版默认安装PowerShell,其他主流的操作系统都预制了Shell解释器但是PHP、Python等都需要安装相应的软件及依赖包,所以使用系统自带的shell解释器编写还是非常方便的
  • 兼容性,python等高级编程语言,变量的定义存在一定的规范、没有shell 命令行、没有管道等等方面(想具体了解情况点击链接  此贴告诉你:为啥先学习shell,等有能力了再学习python

四、什么时候不适用shell

如果你需要有下面的任意一种需求,请考虑其他的更强大的脚本语言――Perl,Tcl,Python,Ruby,或者可能是其他更高级的编译型语言,例如C,C++或者是Java。尽管如此,使用Shell脚本来构造应用原型仍然是一个有用的开发步骤。

  • 资源紧张的项目,特别是那些速度是重要因素的地方(排序,散序,等等)
  • 程序要进行很复杂的数学计算,特别是浮点计算,任意精度的计算,或者是复数计算(应该用C++或是FORTRAN代替)
  • 要求交叉编译平台的可移植性(使用C或者是Java代替)
  • 需要结构化编程的复杂应用(需要变量类型检查和函数原型等等)
  • 对于影响系统全局性的关键任务应用
  • 安全非常重要,你必须保证系统完整性和抵抗入侵,攻击和恶意破坏
  • 项目由连串的依赖的各个部分组成
  • 多种文件操作要求(Bash被限制成文件顺序存取,并且是以相当笨拙,效率低下的逐行的存取方式)
  • 需要良好的多维数组支持
  • 需要类似链表或树这样的数据结构
  • 需要产生或操作图象或图形用户界面
  • 需要直接存取系统硬件
  • 需要端口号或是socket I/O
  • 需要使用可重用的函数库或接口
  • 所有的私有的不开源的应用程序(Shell脚本的源代码是直接可读,能被所有人看到的)

 

 


转载:https://blog.csdn.net/l_liangkk/article/details/116084690
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场