一、Shell是什么

Shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的系统级程序,用户可以用Shell来启动、挂起、停止、编写程序。

简单来说,Shell就是我们的操作与计算机交互的桥梁。

Shell 既是一种命令语言,可以直接调用Linux系统命令,还是一种强大的解释型编程语言

二、Shell的分类

Shell分为两类:Bourne Shell和C Shell

  • Bourne Shell : 最古老,也是最主流的Shell,Bourne Shell的主文件名为sh。
  • C Shell : 主要在BSD版Unix中使用,因语法与C语言类似而得名。

这两种Shell语法互不兼容。Bourne Shell主要包含sh,ksh,Bash,psh,zsh。C Shell主要包含csh,tcsh。

Bash:与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell

查询Linux支持哪些Shell

linux支持的shell放在文件 /etc/shells,可以使用命令 vi /etc/shells 查看支持的shell。

Shell模式

只要在命令行输入相应的Shell名就进去Shell模式,退出Shell模式—— exit

比如:进入sh模式—— sh

csh模式和普通的命令行模式没有区别

三、Bash是什么

Bash全称为Bourne Again shell, 正如它的名字所暗示的,是 Bourne shell(sh) 的扩展。bash 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。bash 也包含了很多 C 和 Korn shell 里的优点。bash 有很灵活和强大的编程接口,同时又有很友好的用户界面。

四、Shell脚本的执行方式

1、最基本的命令——输出命令 echo

语法:echo [输出内容]

后缀: -e:支持用\来转义(\n,\t等)

注:

  • 如果输出内容有空格,则要用双引号或单引号括起来
  • 如果输出内容有空格也有感叹号,则不能用双引号,只能用单引号括起来,因为感叹号!有特殊含义

反斜线转义表:

2、第一个脚本

如何编写Shell脚本

后缀为.sh即为Shell脚本文件 —— vim XXX.sh

#!/bin/Bash

在Shell脚本最前面都要写 #!/bin/Bash

一般#开头的为注释,但这句话不是注释,而是起标识作用,标识以下写的程序时Shell脚本。

不加这句话时,简单的程序可能没有影响,但如果在Shell脚本中嵌套其他语言,则会出错

写一个输出hello world的脚本:

  1. vim hello.sh
  2. 写入
    1. #!/bin/Bash
    2. echo 'hello world!'

3、执行shell脚本

两种方法,一种是赋予权限后以路径格式运行该文件,第二种时通过Bash调用执行文件

法一:

  1. 赋予权限:chmod 755 hello.sh
  2. 以绝对路径运行:./hello.sh

:赋予权限后直接运行hello.sh会报错,必须以路径的格式运行

扩展:linux中基本上所有的执行文件(包括shell脚本、命令等)都要通过路径的格式来执行。那为什么ls、cd等命令可以直接执行,不用调用命令文件路径呢?因为linux已经给他们配置了环境变量,配置环境变量的文件能直接执行(为了简化操作)

法二:

通过bash调用直接执行脚本:bash hello.sh

五、window写的文件转换成linux格式

window上写的shell脚本文件放到linux上可能用不了,原因是有些字符window和linux不一样

比如:window上的回车符为^M$,而linux上的回车符为$

因此在linux上运行window写的程序可能出现格式不匹配

使用 cat -A [文件名] 可以查看文件的所有字符包括隐藏字符(像回车这种都属于隐藏字符,不加 -A 的话看不到)

将window写的文件转换成linux的格式

命令:dos2unix [文件名]

:这个命令在有的linux系统上没有安装,可以使用 yum -y install dos2unix 进行安装

(将linux格式的文件转化为window格式——命令:unix2dos