一、LINUX快速入门第八章:Shell基础
我们平时所说的 Shell可以理解为 Linux系统提供给用户的使用界面。Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。当一个用户登录 Linux之后,系统初始化程序 init就根据/etc/passwd文件中的设定,为每个用户运行一个被称为 Shell(外壳)的程序。
确切地说,Shell是一个命令行解释器,它为用户提供了一个向 Linux内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell来启动、挂起、停止甚至编写一些程序。
Shell处在内核与外层应用程序之间,起着协调用户与系统的一致性、在用户与系统之间进行交互的作用。图 1是 Linux系统层次结构图,Shell接收用户输入的命令,并把用户的命令从类似 abed的 ASCII码解释为类似 0101的机器语言,然后把命令提交到系统内核处理;当内核处理完毕之后,把处理结果再通过 Shell返回给用户。
换句话说:
Shell是一个用 C语言编写的程序,它是用户使用 Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson的 sh是第一种 Unix Shell,Windows Explorer是一个典型的图形界面 Shell。
Shell与其他 Linux命令一样,都是实用程序,但它们之间还是有区别的。一旦用户注册到系统后,Shell就被系统装入内存并一直运行到用户退出系统为止;而一般命令仅当被调用时,才由系统装入内存执行。
与一般命令相比,Shell除了是一个命令行解释器,同时还是一门功能强大的编程语言,易编写,易调试,灵活性较强。作为一种命令级语言,Shell是解释性的,组合功能很强,与操作系统有密切的关系,可以在 Shell脚本中直接使用系统命令。大多数 Linux系统的启动相关文件(一般在/etc/rc.d目录下)都是使用 Shell脚本编写的。
同传统的编程语言一样,Shell提供了很多特性,这些特性可以使 Shell脚本编程更为有用,如数据变量、参数传递、判断、流程控制、数据输入和输出、子程序及中断处理等。
说了这么多,其实我们在 Linux中操作的命令行界面就是 Linux的 Shell,也就是 Bash,但是我们的图形界面是 Shell吗?其实从广义讲,图形界面当然也是 Shell,因为它同样用来接收用户的操作,并传递到内核进行处理。不过,这里的 Shell主要指的是 Bash。
Shell脚本
Shell脚本(shell script),是一种为 shell编写的脚本程序。
业界所说的 shell通常都是指 shell脚本,但读者朋友要知道,shell和 shell script是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的"shell编程"都是指 shell脚本编程,不是指开发 shell自身。
Shell的分类
目前 Shell的版本有很多种,如 Bourne Shell、C Shell、Bash、ksh、tcsh等,它们各有特点,下面简要介绍一下。
最重要的 Shell是 Bourne Shell,这个命名是为了纪念此 Shell的发明者 Steven Bourne。从 1979年起,UNIX就开始使用 Boume Shell。Bourne Shell的主文件名为 sh,开发人员便以 sh作为 Bourne Shell的主要识别名称。
虽然 Linux与 UNIX一样,可以支持多种 Shell,但 Boume Shell的重要地位至今仍然没有改变,许多 UNIX系统中仍然使用 sh作为重要的管理工具。它的工作从开机到关机,几乎无所不包。在 Linux中,用户 Shell主要是 Bash,但在启动脚本、编辑等很多工作中仍然使用 Bourne Shell。
C Shell是广为流行的 Shell变种。C Shell主要在 BSD版的 UNIX系统中使用,发明者是柏克莱大学的 Bill Joy。C Shell因为其语法和 C语言类似而得名,这也使得 UNIX的系统工程师在学习 C Shell时感到相当方便。
Bourne Shell和 C Shell形成了 Shell的两大主流派别,后来的变种大都吸取这两种 Shell的特点,如 Korn、 tcsh及 Bash。
Bash Shell是 GNU计划的重要工具之一,也是 GNU系统中标准的 Shell。Bash与 sh兼容,所以许多早期开发出来的 Bourne Shell程序都可以继续在 Bash中运行。现在使用的 Linux就使用 Bash作为用户的基本 Shell。
Bash于 1988年发布,并在 1995-1996年推出Bash 2.0。在这之前,广为使用的版本是1.14,Bash 2.0增加了许多新的功能,以及具备更好的兼容性。表 2中详细列出了各版本的具体情况。
注意,Shell的两种主要语法类型有 Bourne和 C,这两种语法彼此不兼容。Boume家族主要包括 sh、ksh、Bash、psh、zsh;C家族主要包括 csh、tcsh(Bash和 zsh在不同程序上支持 csh的语法)。
本章讲述的脚本编程就是在 Bash环境中进行的。不过,在 Linux中除了可以支持 Bash,还可以支持很多其他的 Shell。我们可以通过/etc/shells文件来査询 Linux支持的 Shell。命令如下:
在 Linux中,这些 Shell是可以任意切换的,命令如下:
用户信息文件/etc/passwd的最后一列就是这个用户的登录 Shell。命令如下:
大家可以看到,root用户和其他可以登录系统的普通用户的登录 Shell都是/bin/bash,也就是 Linux的标准 Shell,所以这些用户登录之后可以执行权限允许范围内的所有命令。不过,所有的系统用户(伪用户)因为登录 Shell是/**in/ndogin,所以不能登录系统。
笔记:
sh/bash/csh/Tcsh/ksh/pdksh等shell的区别
二、shell脚本基本命令
如何编写一个shell脚本
首先打开编程界面,查看现在dog目录下的文件的权限信息。现在b.txt的用户权限是RW,组权限是RW,其他权限是R。现在我给用户权限加上X运行权限。
新建一个文件shell脚本一般用×.sh作为后缀当然勇气他的也可以。打开终端输入touchfirst.sh新建一个名为first的shell脚本。
在shell脚本中可以使用三类命令:1)Unix命令:虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。
在UNIX/Linux下面编写一个SHELL脚本程序并不难,只要全屏幕编辑程序vi使用得熟练,即可以编写SHELL脚本程序。
如何在shell脚本中,判断一个基本命令执行是否成功符号显示上一条命令的返回值,如果为0则代表执行成功,其他表示失败。
用特殊变量:$?判断前一个命令的执行是否成功(或者说是返回码)执行成功变量的值是0,不是零表示没有执行成功例如:注意:一定要在命令执行后立即判断,否则后面的代码会冲掉$?变量的值。
shell脚本中判断上一个命令是否执行成功shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败。结合if-else语句实现判断上一个命令是否执行成功。
第一步,将编写的bat批处理文件拖到cmd命令窗口中,以定期清除旧数据,见下图,转到下面的步骤。
、可以通过ps命令获取所有的进程,然后通过awk命令提取进程名,再用grep提取相应的进程名即可。
LINUX快速入门第八章:Shell基础1、第一种:BourneshellBourneshell又包括Bourneshell(sh)、Kornshell(ksh)、BourneAgainShell(bash)三种类型。Bourneshell(sh)由AT&T的SteveBourne开发,是标准的UNIXShell,很多UNIX系统都配有sh。
2、开头程序必须以下面的行开始(必须方在文件的第一行):!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
3、沿着前面的轨迹,接下来是Linux中shell脚本的学习。这对于生信工程师后续处理大量(海量更合适些)数据是非常非常重要的,但是同样的,作为一个有点古板的人,对于脚本是什么意思我都死磕了好久。
4、先看《鸟哥的Linux私房菜-基础学习篇》,这个建议买本书,随时可翻。
shell脚本read命令的用法)while外层的read依次读取的是文件pbook中的每一行,而内层的read是从console读取的内容。2)要实现whileread的嵌套,可以使用exec命令,将I/O重定向。注意exec的用法,以及括号的使用。
在shell脚本中,用来读取文件内各个域的内容并将其赋值给Shell变量的命令是:read-pinputaval:valecho$val。read-从标准输入读取数值。这个read内部命令被用来从标准输入读取单行数据。
while条件do...done应该前面还有个do的。这是固定结构,满足条件就会一直循环下去。因为最后有输入重定向符号,将整个while循环条件的输入指定为config变量定义的文件。
三、Shell脚本语法基础
在工作中,我们经常会接触到shell脚本,它是后端维护和开发的基础技能之一。Shell作为一种编程语言,学习它的语法基础包括数据类型定义、for循环以及if else条件判断语句等。本文将主要介绍shell语言的基本语法,并在下文中详细阐述。
🐧LINUX环境
当我们登陆linux系统时,可以通过查看默认shell来确认当前的shell环境。
🔑SHELL变量
它包括环境变量和局部变量两种类型。环境变量在子shell进程中是可见的,可以通过export关键字进行定义。
📝变量处理
在变量前面加上$符号进行引用。建议用更为标准的写法,即用${}将变量名括起来。
📚Shell数组语法
数组的定义方式如下:declare arr1=(元素1元素2)。对于数组的引用,可以使用以下语法:echo${数组名[索引号]}。
🔄Shell循环语法
For循环语句的语法结构如下:for variable in(list)do commanddone。
🔍Shell条件语法
If条件语句的语法结构如下:if expression; thencommand。在shell编程中,我们可以通过执行指令# sh if.sh来运行if语句。
好了,关于shell脚本基础和Shell脚本语法基础的问题到这里结束啦,希望可以解决您的问题哈!