Shell 编程01 Shell 脚本初步介绍

什么是Shell简单来说Shell其实就是一个命令解释器,而它的作用就是解释并执行用户输入的命令及程序。用户每输入一条命令,Shell就解释执行一次。这种方式很

大家好,Shell 编程01 Shell 脚本初步介绍相信很多的网友都不是很明白,包括也是一样,不过没有关系,接下来就来为大家分享关于Shell 编程01 Shell 脚本初步介绍和的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

Shell位于操作系统的最外层。对外提供与用户的交互对话并返回相应的执行结果。在内部,它解释用户向操作系统输入的命令。 Shell在操作系统中的位置如下图所示:

Shell在英文中的意思是外壳、外壳等。从图中还可以看出,Shell像外壳一样包围着系统的核心(Kernel)。

Shell命令与Command命令对比

什么是shell 脚本

了解了Shell之后,我们再来看看Shell脚本。当命令或程序语句不是在命令行上执行,而是通过程序文件执行时,该程序称为Shell脚本。我仍然使用Windows作为比较。当我们需要执行的命令比较少时,我们可以手动一一输入。如果您需要执行数百或数千条命令,您会怎么做?如果你聪明的话,你肯定会脱口而出,使用批处理(扩展名通常是bat或cmd)。其实Shell脚本类似于批处理。通过脚本中定义变量、执行命令、调用函数、逻辑判断、循环等,形成一个有机的整体,形成功能强大、自动化程度高的脚本。

在Windows中,通过批处理获取系统信息并保存为txt文件,然后自动打开该文件。代码如下: @echo offset date=%date:~0,4%-%date:~5,2%-%date:~8,2% echo ‘当前时间为:’%date%cd /d ‘D: \’mkdir SystemInfocd /d ‘SystemInfo’systeminfosysteminfo%date%.txtstart systeminfo%date%.txtpauseShell 脚本判断当前登录用户是否为root# !/bin/bashcurrentName=`whoami`echo $currentNameif [ ‘$currentName’=’root’ ] then echo ‘当前登录用户是root’else echo ‘当前登录用户是:’$currentNamefiShell 脚本语言类型

Shell脚本语言是一种弱类型语言,即无需定义变量类型即可使用。 UNIX/Linux 中主要有Shell:Bourne Shell 和C Shell 两大类。

伯恩壳牌

Bourne Shell 包括三种类型:Bourne Shell (sh)、Korn Shell (ksh) 和Bourne Again Shell (bash)。

Bourne Shell 由ATT 的Steve Bourne 开发,是一个标准的UNIX Shell。许多UNIX 系统都配备了sh。 Korn Shell (ksh) 由David Korn 开发。它是Bournd Shell (sh) 的超集,并添加了csh 引入的新功能。它目前是许多UNIX 系统的标准shell。这些系统上的/bin/sh 通常指向/bin。 /ksh 的符号链接Bourne Again Shell (bash) 是由GNU 项目团队开发的。其主要目标是符合POSIX标准并兼容sh。 bash 借用了csh 和ksh 的许多功能,是各种Linux 发行版中配置的默认shell。 Linux 系统上的/bin/sh 通常是指向/bin/bash 的符号链接。但bash和sh还是有很多区别的。虽然bash扩展了一些命令和参数,但bash与sh并不完全兼容,两者之间的一些行为不一致。大多数情况下差别不会太大,有时可以用bash代替sh。 C壳

C Shell 包括csh 和tcsh。 csh 由伯克利大学开发并随BSD UNIX 一起发布。它的进程控制语句与C语言非常相似,支持许多Bourne Shell不支持的功能,如作业控制、别名、系统算术、命令历史、命令行编辑等。tcsh是csh的增强版本,增加了命令补全等功能,替代FreeBSD、Mac OS X等系统上的csh。

在上面介绍的shell 中,比较常见的是标准的Bourne Shell (sh) 和C Shell (csh),其中Bourne Shell (sh) 已被Bourne Again Shell (bash) 取代。可以使用以下命令检查CentOS 7.3系统Shell支持情况。

[admin@CentOS7 tmp]$ cat /etc/shells/bin/sh #Linux常用Shell,指向/bin/bash/bin/bash #Linux常用Shell,也是默认Shell /sbin/nologin #Linux常用Shell shell,用于禁止用户登录/usr/bin/sh/usr/bin/bash/usr/sbin/nologin/bin/tcsh/bin/csh。 Linux 系统中主流的Shell 是bash,而bash 是由Bourne Shell (sh) 开发的,bash 还包含了csh 和ksh 的功能。因此,大多数脚本无需修改就可以在sh中运行。如果使用sh后的结果与预期不同,可以尝试使用bash代替sh。

常用操作系统默认shell

常用的操作系统中,Linux 中默认的Shell 是Bourne Again Shell(bash),Solaris 和FreeBSD 中默认的Shell 是Bourne Shell(sh),AIX 中默认的Shell 是Korn Shell(ksh)。那么问题来了,我们如何检查我们正在使用的系统的shell呢?以CentOS为例查看系统默认Shell:

方法一: [admin@CentOS7 tmp]$ echo $SHELL/bin/bash 方法二: [admin@CentOS7 tmp]$ grep root /etc/passwdroot:0:0:root:/root:/bin/bashoperator:x:11:0:operator3336 0/root:/sbin/nologin/bin 以结尾root用户/bash是用户登录后的Shell解释器。后续文章的重点是Bourne Again Shell(bash)。

shell脚本的创建和执行

Shell脚本的创建

在Linux系统中,Shell脚本通常是在编辑器vi/vim中编写的。可以由UNIX/Linux命令、bash shell命令、程序结构控制语句、注释等组成,推荐使用vim。

Shell 脚本的开头(第一行) 标准的Shell 脚本会在第一行指明哪个解释器将执行脚本中的内容,一般如下: #!/bin/bash 或#!/bin/sh 注意事项:

1、第一行一般要求少于255个字符。

2. #!/bin/bash 不是注释。执行脚本时,内核会根据#!后面的解释器来决定使用哪个解释器来执行脚本的内容。

3. 此行必须是每个脚本顶部的第一行。如果不是第一行,则代表一条注释。

Shell 编程01 Shell 脚本初步介绍

#!/bin/bashecho ‘bash test’#!/bin/bash #表示该行是注释#!/bin/sh #表示该行是注释bash 和sh 的区别早期的bash 与sh、bash包含了csh和ksh的功能,但大多数脚本可以直接在sh上运行。

从上图可以看出,sh是bash的软链接。大多数情况下,在脚本开头使用#!/bin/bash 和#!/bin/sh 没有区别。但仍然推荐使用#!/bin/bash。

一般情况下,安装完Linux系统后会自动安装bash软件。检查bash版本如下:

[admin@CentOS7 etc]$ cat /etc/redhat-releaseCentOS Linux release 7.3.1611 (Core) #当前系统版本[admin@CentOS7 etc]$ bash –versionGNU bash, version 4.2.46(1)-release (x86_64 -redhat-linux-gnu) # bash版本,后面省略自由软件提示信息。如果你想体验更高版本的bash,升级方法如下:

yum -y update bash #在线升级rpm -qa bash #查看bash安装包bash-4.2.46-20.el7_2.x86_64 下面是常用脚本开头的写法。不同语言的脚本一般需要在开头添加以下标识内容。

#!/bin/sh#!/bin/bash#!/usr/bin/awk#!/bin/sed#!/usr/bin/tcsh#!/usr/bin/perl CentOS 中默认的Shell 是bash。因此,即使脚本中不添加#!/bin/bash,它仍然会使用bash来解释它。如果不想使用系统默认的Shell解释器,则需要自己指定解释器。建议大家从一开始就养成良好的习惯,遵循Shell编程规范,一开始就指定第一行使用的解释器。

如果一开始没有指定解释器,想要使用对应的解释器来执行脚本,可以使用下面的方法:

Shell脚本:bash test.sh或sh test.shPython脚本:python test.py脚本注释。在许多编程语言中,都支持单行和多行注释,以便于阅读和维护。在Shell 中,使用# 注释该行。注释的内容不会作为命令执行。注释可以位于单独的行中,也可以紧跟在命令之后。建议在编写脚本时添加必要的注释,以方便自己和后续的维护者或用户。

注释中尽量不要使用中文,脚本中也尽量不要使用中文。

Shell脚本执行

Shell脚本的执行过程脚本运行时,首先会查找系统环境变量ENV,该变量指定了环境文件(加载顺序通常为/etc/profile、~/.bash_profile、~/.bashrc、/etc/) bashrc等),加载上述环境变量文件后,Shell开始执行Shell脚本中的内容。 shell脚本的执行顺序是从上到下、从左到右执行每一行的命令和语句。如果Shell中有嵌套脚本(下标),则执行嵌套脚本的内容。完成后会返回父脚本继续执行父脚本中后续的命令和语句。通常,当执行Shell脚本时,系统内核会启动一个新的进程,以便脚本的命令和下标可以在该进程中执行。流程图如下:

Shell脚本执行方式[1] bash script-name 或sh script-name

【2】路径/脚本名或./脚本名

该方法是指在当前路径下执行脚本,前提是脚本必须有可执行权限。具体方法是chmod +x脚本名。然后通过相对路径或绝对路径执行脚本。

【3】源脚本名或.script-name

【4】shscript-name 或cat script-name |嘘

这个方法也适用于bash。这个方法不常见,知道一下就可以了。其原理是利用管道技术。

作为示例,您可以查看以下脚本。哪个是正确答案?

可供参考的答案选项如下:

[ ] 当前用户[ ] admin [ ] 未输入内容正确答案是未输入内容。原因可以从Shell脚本的几种执行方式中找到。

从这个例子我们可以得出以下结论:

子Shell脚本会直接继承父Shell的变量、函数等。例如,儿子继承了父亲的基因。如果希望父Shell 继承子Shell 的变量,请使用source 或’.’

脚本规范

用户评论

Shell 编程01 Shell 脚本初步介绍
心亡则人忘

终于找到了一个上手简单Shell脚本的教程!我一直对Shell很感兴趣,但总是找不到合适的入门学习资源,这个教程讲得清清楚楚,逻辑也很通顺,感觉很容易理解!

    有16位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
陌上花

这篇Shell编程的文章介绍得太全面了,从基础语法到简单的应用场景都有所讲解。对于完全新手来说确实是一个不错的入门指导,让我对Shell脚本有了更清晰的认识。

    有19位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
志平

学习编程总是要从基础开始,这篇文章讲得不错,适合初学者一步步循序渐进地入门Shell脚本。以后我会经常参考这里来巩固自己的知识点,感谢分享!

    有7位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
人心叵测i

这个教程看起来不错,但是我感觉缺少一些实战操作的案例,希望以后可以补充一些更实用的例子,这样学习起来会更加有针对性。

    有17位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
哭着哭着就萌了°

Shell编程确实很有用,这篇文章入门讲解还可以,但我觉得应该多介绍一下常用的Shell变量和命令用法,毕竟这些是使用Shell脚本的基础。

    有5位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
绳情

看了这篇关于Shell脚本的初试文章后,感觉自己离学习这个语言还有很长的路要走啊! 希望以后的文章能讲一些更复杂的应用场景,例如创建Shell函数或使用管道等高级技巧。

    有6位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
情字何解ヘ

入门教程不错,但我觉得标题应该更具体一点,比如“掌握Shell基础语法”或者“教你写第一个Shell脚本”。

    有15位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
信仰

对学习Linux系统的有帮助。不过想进一步提高shell编程效率,可能需要阅读更多书籍或参加实战课程。单纯依靠这篇入门教程可能效果有限。

    有14位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
雨后彩虹

感觉标题有点 misleading,这篇文章只是介绍了Shell基础语法,并没有深入讲解任何脚本的应用场景。对有学习目的的人来说可能比较失望。

    有16位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
余温散尽ぺ

学习编程需要自己动手实践,这篇只有文字内容的文章对于我而言不太实际,希望能看到一些代码示例或者案例分析。

    有5位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
别伤我i

感觉写得不错,语言通俗易懂,适合喜欢DIY的人来学习Shell脚本。希望作者以后能更新更多更高级的内容!

    有10位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
一点一点把你清空

作为一个Linux新手,这篇文章对我来说非常有用,基本搞清了Shell脚本的基本语法。继续努力学!

    有12位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
箜篌引

希望将来能看到一些关于特定行业应用的Shell脚本教程,例如如何自动化web服务器管理或数据处理等,更符合我的实际需求。

    有8位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
冷嘲热讽i

这篇教程讲得太简单了,并没有给我带来实质性的帮助,建议作者能添加更多实用案例和技巧分享。

    有10位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
如梦初醒

个人感觉这篇文章对初学者来说还是比较有帮助的,能够快速入门Shell脚本的基本语法。不过想要深入学习更复杂的操作,还需要积累更多的实践经验。

    有8位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
歆久

标题有点夸大其词,这只是 Shell 编程的一点皮毛,要想真正掌握它,还需要大量的练习和探索.

    有9位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
∞◆暯小萱◆

总的来说,这篇文章是一篇不错的Shell初学者资源,可以帮你快速入门这个领域的基本知识。

    有19位网友表示赞同!

Shell 编程01 Shell 脚本初步介绍
强辩

这篇教程介绍得确实比较全面,从变量、命令到流程控制都涵盖了基本的语法结构。 不过个人感觉对于已经有一定编程基础的人来说可能有些过于简单。

    有5位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/112667.html

(0)
小su's avatar小su
上一篇 2024年8月31日 下午10:54
下一篇 2024年8月31日 下午11:02

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注