Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交
互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是
Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是
最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。可以说,shell使用的熟练程度反映了用户对
Linux使用的熟练程度。
一、什么是shell
当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shell(外壳)的程序。那么,shell是什么呢?
确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、
挂起、停止甚至是编写一些程序。
当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的
字符串。shell解释用户输入的命令,就象DOS里的command.com所做的一样,所不同的是,在DOS中,command.com只有一个,而
在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。
二、几种流行的shell
目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型:
#echo $SHELL
$SHELL是一个环境变量,它记录用户所使用的shell类型。你可以用命令:
#shell-name
来转换到别的shell,这里shell-name是你想要尝试使用的shell的名称,如ash等。这个命令为用户又启动了一个shell,
这个shell在最初登录的那个shell之后,称为下级的shell或子shell。使用命令:
$exit
可以退出这个子shell。
使用不同的shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍:
1.ash
ash shell是由Kenneth
Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。
2.bash
bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again
Shell的缩写,内部命令一共有40个。Linux使用它作为默认的shell是因为它有诸如以下的特色:
(1)可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。
(2)自动通过查找匹配的方式给出以某字符串开头的命令。
(3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。
3.ksh
ksh是Korn shell的缩写,由Eric
Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版
本的性能了。
4.csh
csh是Linux比较大的内核,它由以William
Joy为代表的共计47位作者编成,共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是
tcsh。
5.zch
zch是Linux最大的shell之一,由Paul
Falstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的shell的。
3. shell程序设计(基础部分)
其实作为命令语言交互式地解释和执行用户输入的命令只是shell功能的一个方面,shell还可以用来进行程序设计,它提供了定义变量和参数
的手段以及丰富的程序控制结构。使用shell编程类似于DOS中的批处理文件,称为shell
script,又叫shell程序或shell命令文件。
1.shell基本语法
shell的基本语法主要就是如何输入命令运行程序以及如何在程序之间通过shell的一些参数提供便利手段来进行通讯。
(1)输入输出重定向
在Linux中,每一个进程都有三个特殊的文件描述指针:标准输入(standard
input,文件描述指针为0)、标准输出(standard output,文件描述指针为1)、标准错误输出(standard
error,文件描述指针为2)。这三个特殊的文件描述指针使进程在一般情况下接收标准输入终端的输入,同时由标准终端来显示输出,Linux同时也向使
用者提供可以使用普通的文件或管道来取代这些标准输入输出设备。在shell中,使用者可以利用“>”和“<”来进行输入输出重定向。如:
command>file:将命令的输出结果重定向到一个文件。
command>&file:将命令的标准错误输出一起重定向到一个文件。
command>>file:将标准输出的结果追加到文件中。
command>>&file:将标准输出和标准错误输出的结构都追加到文件中。
command
(2)管道pipe
pipe同样可以在标准输入输出和标准错误输出间做代替工作,这样一来,可以将某一个程序的输出送到另一个程序的输入,其语法如下:
command1| command2[| command3...]
也可以连同标准错误输出一起送入管道:
command1| &command2[|& command3...]
(3)前台和后台
在shell下面,一个新产生的进程可以通过用命令后面的符号“;”和“&”来分别以前台和后台的方式来执行,语法如下:
command
产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。
command &
产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。
2。shell程序的变量和参数
像高级程序设计语言一样,shell也提供说明和使用变量的功能。对shell来讲,所有变量的取值都是一个字符串,shell程序采
用$var的形式来引用名为var的变量的值。
Shell有以下几种基本类型的变量:
(1)shell定义的环境变量
shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,这些变量用户还可以重新定义,常用的shell环境变量有:
HOME:用于保存注册目录的完全路径名。
PATH:用于保存用冒号分隔的目录路径名,shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将
被执行。
TERM:终端的类型。
UID:当前用户的标识符,取值是由数字构成的字符串。
PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。
PS1:主提示符,在特权用户下,缺省的主提示符是“#”,在普通用户下,缺省的主提示符是“$”。
PS2:在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“\”然后回车,或者当用户按回车键时shell判断出用户输入的
命令没有结束时,显示这个辅助提示符,提示用户继续输入命令的其余部分,缺省的辅助提示符是“>”。
分享到:
相关推荐
在《Introduction to Unix and Linux Shell - 1》这份文档中,作者Star Ren(2008年1月19日)为我们提供了关于Unix/Linux Shell的基础介绍。这部分内容主要涵盖了Shell的基础概念、为何学习Shell的重要性以及一些...
在标题提及的"mysql-shell-8.0.30-linux-glibc2.12-x86-64bit.tar.gz"文件中,我们获取的是适用于Linux系统(glibc2.12版本)的64位MySQL Shell版本8.0.30,这是MySQL数据库8.0系列的一个重要组件。 MySQL 8.0相较...
linux-shell-scripting-fundamentals-bash.epub
"sqlite-shell-linux-x86-3080500.zip" 是针对Linux平台的x86架构的SQLite3命令行接口的压缩包,版本号为3.8.5。这个压缩包包含了一个名为"sqlite3"的可执行文件,它是用于管理和操作SQLite数据库的shell程序。 ...
"sqlite-shell-linux-x86-3080900.zip" 是一个适用于Linux环境下32位系统的SQLite交互式shell工具的压缩包,版本为3.8.9。这个工具提供了对SQLite数据库进行命令行操作的能力,是开发者和系统管理员在Linux环境中...
标题中的"mysql-shell-8.0.26-linux-glibc2.12-x86-64bit.tar.gz"指的是MySQL Shell的8.0.26版本,专为基于glibc 2.12的64位Linux系统设计。 MySQL Shell提供了以下主要功能: 1. **多语言支持**:MySQL Shell支持...
MongoDB Community Server(mongodb-shell-linux-x86_64-debian10-5.0.4.tgz)适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 ...
MongoDB Community Server(mongodb-shell-linux-x86_64-rhel70-5.0.4.tgz)适用于RedHat / CentOS 7.0 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案...
安装`mysql-shell-8.0.18-linux-glibc2.12-x86-64bit.tar.gz`压缩包时,首先需要解压文件,然后将解压后的二进制文件路径添加到系统的PATH环境变量中,以便于从任何目录下直接运行MySQL Shell。安装完成后,可以通过...
ChromeDriver是用于自动化谷歌浏览器(Chrome)的一种工具,它遵循Selenium WebDriver协议。在Web测试自动化领域,ChromeDriver扮演着至关重要的角色,因为它允许开发者控制并进行交互操作,如打开网页、点击元素、...
这个名为"Linux-Shell-Tutorial.rar_Linux shell"的压缩包文件显然包含了一个关于Linux Shell的教程,旨在帮助用户深入理解和掌握这个强大的工具。其中的"Linux Shell Tutorial.chm"是一个帮助文档,很可能包含了...
在Linux世界里,常见的Shell有Bash(Bourne-Again SHell)、C Shell、Korn Shell以及Z Shell等,其中Bash是大多数现代Linux发行版的默认Shell。 **Bash Shell** Bash是GNU项目的一部分,它是对原始的Unix Bourne ...
linux shell 教程 包含大多数的命令来源于gitbooks,可以根据命令搜索
在IT行业中,Linux Shell和Vim是两个至关重要的工具,尤其对于系统管理员和开发者来说,它们是日常工作中不可或缺的部分。让我们深入探讨一下这两个主题,并结合提供的文件名来扩展相关知识。 首先,Linux Shell是...
iperf3-with-timestamp-Linux-shell-cli
本资料“Linux-shell-command.rar”聚焦于Linux Shell的运用和运维相关的shell技巧,旨在帮助用户提升Linux环境下的工作效率。 首先,让我们深入了解什么是Linux Shell。Shell是Linux操作系统的用户界面,它提供了...
vip_2024.1129.-4 - iperf3-with-timestamp-Linux-shell-ser
"sqlite-shell-linux-x86-3080704.zip" 是一个专为Linux x86平台编译的SQLite命令行shell工具的压缩包,版本号为3.8.7.4。这个工具允许用户直接在终端中与SQLite数据库进行交互,执行SQL语句,创建、查询、更新和...
标题提到的"record-linux-shell-history.rar_history_shell"显然与Linux Shell历史记录的管理和保存有关。下面我们将深入探讨Linux Shell历史功能及其相关的知识。 1. **Shell历史记录功能** - Linux中的Shell,如...
在这个"Linux-Shell-Programming.zip_open"压缩包中,包含了一份名为"Linux Shell Programming.pdf"的教程,这是一份开源的学习资料,旨在帮助用户深入理解并掌握Linux Shell编程。 在Linux Shell编程中,有几个...