热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linuxshell教程细说shell编程

文章标题:linuxshell教程细说shell编程。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  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判断出用户输入的命令没有结束时,显示这个辅助提示符,提示用户继续输入命令的其余部分,缺省的辅助提示符是“>”。

[1] [2] [3] [4] [5] 下一页


推荐阅读
  • 深入理解Linux哲学与命令实践
    本文探讨了Linux系统的核心哲学理念,包括但不限于‘万物皆文件’的原则、小型且专注的程序设计、通过管道链接程序以完成复杂任务等。同时,文章还介绍了如何通过设置环境变量来增强history命令的功能,使其能够记录命令执行的具体时间,以及几个常用的Linux命令及其使用方法。 ... [详细]
  • ###########性能监控脚本###########################!binbash#监控cpu系统负载IPifconfigeth0|grepinetaddr ... [详细]
  • 利用Excel VBA调用Linux命令及Bash脚本
    Excel VBA不仅能够处理日常办公任务,还具备调用外部命令行或Bash脚本的能力。本文将介绍如何使用VBA中的Shell函数来执行命令行指令,并通过实际示例展示如何获取计算机网络配置信息。 ... [详细]
  • JavaScript 面向对象编程中的继承机制
    本文详细介绍了JavaScript中实现类继承的几种常见方法,包括通过扩展Object的prototype、使用原型链以及利用call、apply和bind等技术手段。每种方法都有其特点和适用场景。 ... [详细]
  • 本文将探讨iOS开发过程中需要掌握的三种关键编程语言——C、Objective-C和Swift,并深入解析面向过程与面向对象编程的概念,同时对比iOS与Android两大移动平台的特点。 ... [详细]
  • RabbitMQ消息分发策略与确认机制
    本文详细介绍了RabbitMQ的消息分发轮询机制以及消息确认(Message Acknowledgment)功能,通过实例演示了如何确保消息可靠传递。 ... [详细]
  • Linux环境下PostgreSQL的安装、配置及日常管理
    本文详细介绍了在Linux环境下安装、配置PostgreSQL数据库的过程,包括环境准备、安装步骤、配置数据库访问以及日常服务管理等方面的内容。适合初学者和有一定经验的数据库管理员参考。 ... [详细]
  • 本文探讨了管道符在Shell编程中的应用,详细解释了它作为进程间通信工具的功能,以及如何利用管道符实现命令间的高效数据传输。 ... [详细]
  • 本文详细介绍如何在树莓派上安装并配置Samba服务,以实现与Windows系统的网络共享兼容性。适合初学者参考。 ... [详细]
  • ANSI最全介绍linux终端字体改变颜色等ANSI转义序列维基百科,自由的百科全书由于国内不能访问wiki而且国内关于ANSI的介绍都是简短的不能达到,不够完整所以转wiki到此 ... [详细]
  • Linux系统中高效解决高Buff/Cache占用问题
    本文详细探讨了在Linux系统中遇到的高Buff/Cache占用问题及其解决方案,提供了手动清除与定时任务自动化处理的方法。 ... [详细]
  • Unix与Linux的起源与发展
    本文详细探讨了Unix与Linux的操作系统起源,从自由软件运动的兴起,到Linux内核的诞生,全面解析了这两款操作系统的发展历程及其对现代计算技术的影响。 ... [详细]
  • 本文介绍了如何在ARM架构的裸机环境中通过C语言编程点亮LED灯。主要包括初始化栈指针、关闭看门狗以及编写控制LED灯状态的C代码等关键步骤。 ... [详细]
  • 四月个人任务:Linux基础操作与网络管理
    本文介绍了两项主要任务:编写一个脚本来检测192.168.1.0/24子网中当前在线的IP地址,以及如何在Linux系统中挂载Windows网络共享目录。通过具体步骤和代码示例,帮助读者理解和掌握相关技能。 ... [详细]
  • 本文详细介绍了如何在Ubuntu操作系统中安装和配置Maven,包括必要的环境准备和验证步骤。 ... [详细]
author-avatar
mobiledu2502863683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有