自动化运维[shell编程]——————[什么是shell、shell的版本、redhat支持的shell、编辑运行一个shell脚本]

文章目录

  • 1.了解shell
    • 1.1什么是shell
    • 1.2 shell的作用
    • 1.3 常见的shell类型
    • 1.4 linux中支持的shell
  • 2. shell脚本的执行方式
    • 2.1 echo输出命令
    • 2.2编写第一个脚本
    • 2.3 执行脚本
    • 2.3 编辑脚本要注意的内容

1.了解shell

1.1什么是shell

在计算机的早期并没有图形界面,我们只能通过一个一个地命令来控制计算机,这些命令有成百上千之多,且不说记住这些命令非常困难,每天面对没有任何色彩的“黑屏”本身就是一件枯燥的事情;这个时候的计算机还远远谈不上炫酷和普及,只有专业人员才能使用。

对于图形界面,用户点击某个图标就能启动某个程序;对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序。这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行。换句话说,图形界面和命令行要达到的目的是一样的,都是让用户控制计算机。然而,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁

由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核。如此一来,用户和内核之间就多了一层“代理”,这层“代理”既简化了用户的操作,也保护了内核

用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做 Shell

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

自动化运维[shell编程]——————[什么是shell、shell的版本、redhat支持的shell、编辑运行一个shell脚本]_第1张图片
把用户敲入的命令翻译为0101的机器命令再告诉内核。内核指示硬件进行工作。

1.2 shell的作用

Shell 除了能解释用户输入的命令,将它传递给内核,还可以:

  • 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果
  • 在多个程序之间传递数据,把一个程序的输出作为另一个程序的输入;
  • Shell 本身也可以被其他程序调用

由此可见,Shell 是将内核、程序和用户连接了起来。

Shell 本身支持的命令并不多,但是它可以调用其他的程序,每个程序就是一个命令,这使得 Shell 命令的数量可以无限扩展,其结果就是 Shell 的功能非常强大,完全能够胜任 Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件等。

Shell 并不是简单的堆砌命令,我们还可以在 Shell 中编程,这和使用 C/C++、Java、Python 等常见的编程语言并没有什么两样。Shell 虽然没有 C/C++、Java、Python 等强大,但也支持了基本的编程元素,例如:

  • if…else 选择结构,switch…case 开关语句,for、while、until 循环;
  • 变量、数组、字符串、注释、加减乘除、逻辑运算等概念;
  • 函数,包括用户自定义的函数和内置函数(例如 printf、export、eval 等)。

站在这个角度讲,Shell 也是一种编程语言,它的编译器(解释器)是 Shell 这个程序。我们平时所说的 Shell,有时候是指连接用户和内核的这个程序,有时候又是指 Shell 编程。

Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、一键搭建Web开发环境、日志分析等,Shell 都非常合适。

1.3 常见的shell类型

常见的shell类型有 sh、bash、csh、tcsh、ash 等。

sh、bash、csh、tcsh、ash 

sh
sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。
sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell

csh
sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。主要用在BSD版的Unix系统当中。
Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器,还是 Sun 公司的创始人之一。

Shell的两种主要语法类型有Bourne和C,两种语法并不兼容

  • Bourne:sh、ksh、bash、psh、zsh;
  • C:csh、tcsh;

tcsh
tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持

ash
一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

bash
bash shell 是 Linux 的默认 shell
bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。
bash 兼容 sh 意味着,针对 sh 编写的 Shell 代码可以不加修改地在 bash 中运行
尽管如此,bash 和 sh 还是有一些不同之处:

  • 一方面,bash 扩展了一些命令和参数
  • 另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh

所以对linux来说,我们指的就是bash。

1.4 linux中支持的shell

我们如何知道自己的linux系统支持那些版本的shell吗,查看文件:

/etc/shells

自动化运维[shell编程]——————[什么是shell、shell的版本、redhat支持的shell、编辑运行一个shell脚本]_第2张图片
nologin就是不能登录系统的shell。

既然redhat支持这些shell,就可以直接切换使用:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
nologin就不使用了,会直接无法登录系统,我们就不使用了。

2. shell脚本的执行方式

2.1 echo输出命令

使用这个命令,可以输出你要的内容:

echo [选项] [输出内容]

-e: 支持反斜线控制的字符转换

如果不加选项可以直接执行:

在这里插入图片描述
如果加上-e就可以执行特殊符号:

控制字符 作用
\ 输出\本身
\a 输出警告音
\b 退格键,也就是向左删除键
\c 取消输出行末的换行符。和-n选项一致
\e ESCAPE键
\f 换页符
\n 换行符
\r 回车键
\t 制表符
\v 垂直制表符
\0nnn 按照八进制ASCII码表输出字符,其中0为数字零,nnn是三位八进制数
\xhh 按照十六进制ASCII码输出字符,其中hh是两位十六进制数

在这里插入图片描述在这里插入图片描述
在这里插入图片描述查看ASCII码表:
自动化运维[shell编程]——————[什么是shell、shell的版本、redhat支持的shell、编辑运行一个shell脚本]_第3张图片
我们可以设定输出指定字符:
在这里插入图片描述号可以输出颜色:

echo -e "\e[1;颜色 要输出的内容\e[0m"

30m黑 	31m红	 32m绿	 33m黄 
34m蓝 	35m洋红	 36m青 	 37m白 

在这里插入图片描述

2.2编写第一个脚本

linux是不区分扩展名的,但是如果我将脚本的后缀名写为.sh,就是告诉系统,我写的是bash脚本,这时使用vim他会尝试使用颜色帮助:

vim one.sh

#!/bin/bash 	#这句话不是注释,是告诉系统这个文件用bash来作为解释器,这个脚本就是shell脚本
#接下来就可以加注释
#The first program 
#Author:Song
#E-mail:[email protected]

echo -e 'This is the first shell script!' 	#脚本要执行的内容

现在开始实验:

在这里插入图片描述
在这里插入图片描述保存退出,就完成了编写。

2.3 执行脚本

一个脚本要执行首先要具有执行权限,可以直接运行:

chmod +x one.sh
./hello.sh

可以直接使用绝对路径执行或相对路径执行
在这里插入图片描述或者你也可以使用以下方式:

bash one.sh

这时就算没有执行权限也可以执行:

在这里插入图片描述也就是说使用bash版本的shell解释器来解释这个脚本,使脚本执行。

2.3 编辑脚本要注意的内容

如果一个脚本,是在linux中编辑,我们查看他的回车符:

cat -A one.sh

-A:查看所有包括隐藏内容

自动化运维[shell编程]——————[什么是shell、shell的版本、redhat支持的shell、编辑运行一个shell脚本]_第4张图片而再linux下运行一个windows中编写的shell脚本,无法执行,是因为回车符是^M$
,所以执行的时候有问题。

你可以将它进行转换,直接使用命令:

dos2unix 脚本 	# 从dos转换为unix格式

如果没有,yum可以安装这个命令。

在这里插入图片描述

你可能感兴趣的:(shell)