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

  (2)用户定义的变量

  用户可以按照下面的语法规则定义自己的变量:

  变量名=变量值

  要注意的一点是,在定义变量时,变量名前不应加符号“$”,在引用变量的内容时则应在变量名前加“$”;在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字符串都要用双引号括起来。

  在编写shell程序时,为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。

  有时我们想要在说明一个变量并对它设定为一个特定值后就不在改变它的值,这可以用下面的命令来保证一个变量的只读性:

  readly 变量名

  在任何时候,建立的变量都只是当前shell的局部变量,所以不能被shell运行的其他命令或shell程序所利用,export命令可以将一局部变量提供给shell执行的其他命令使用,其格式为:

  export 变量名

  也可以在给变量赋值的同时使用export命令:

  export 变量名=变量值

  使用export说明的变量,在shell以后运行的所有命令或程序中都可以访问到。

  (3)位置参数

   位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,shell取第一个位置 参数替换程序文件中的$1,第二个替换$2,依次类推。$0是一个特殊的变量,它的内容是当前这个shell程序的文件名,所以,$0不是一个位置参数, 在显示当前所有的位置参数时是不包括$0的。

  (4)预定义变量

  预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成的,常用的shell预定义变量有:

  $#:位置参数的数量

  $*:所有位置参数的内容

  $?:命令执行后返回的状态

  $$:当前进程的进程号

  $!:后台运行的最后一个进程号

  $0:当前执行的进程名

  其中,“$?”用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。

  “$$”变量最常见的用途是用作临时文件的名字以保证临时文件不会重复。

  (5)参数置换的变量

  shell提供了参数置换能力以便用户可以根据不同的条件来给变量赋不同的值。参数置换的变量有四种,这些变量通常与某一个位置参数相联系,根据指定的位置参数是否已经设置类决定变量的取值,它们的语法和功能分别如下。

  a. 变量=${参数-word}:如果设置了参数,则用参数的值置换变量的值,否则用word置换。即这种变量的值等于某一个参数的值,如果该参数没有设置,则变量就等于word的值。

  b. 变量=${参数=word}:如果设置了参数,则用参数的值置换变量的值,否则把变量设置成word然后再用word替换参数的值。注意,位置参数不能用于这种方式,因为在shell程序中不能为位置参数赋值。

   c. 变量=${参数?word}:如果设置了参数,则用参数的值置换变量的值,否则就显示word并从shell中退出,如果省略了word,则显示标准信 息。这种变量要求一定等于某一个参数的值,如果该参数没有设置,就显示一个信息,然后退出,因此这种方式常用于出错指示。

  d. 变量=${参数+word}:如果设置了参数,则用word置换变量,否则不进行置换。

  所有这四种形式中的“参数”既可以是位置参数,也可以是另一个变量,只是用位置参数的情况比较多。

Linux的shell编程(二)相关推荐

  1. Linux _ Shell编程 — 循环语句

    Linux _ Shell编程 - 循环语句 一.循环语句for的用法 二.循环语句while的用法 三.循环控制语句 一.循环语句for的用法 for 变量名 in 单词表do命令表done 变量依 ...

  2. 运维 - 第一阶段 - linux与shell编程

    linux与shell编程 讲师:墨竹 系统运维与linux 1.系统运维是什么 简单来说运维(Operation and maintenance)是指对公司硬件和软件的维护. 硬件包括:机房.机柜. ...

  3. linux系统——Shell编程之变量解释

    linux系统--Shell编程之变量解释 - Shell能做什么 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略-) 自动化批量软件部署程序 (LAMP,LNMP,Tomca ...

  4. Linux _ Shell编程 — 功能语句

    Linux _ Shell编程 - 功能语句 一.说明性语句 二.常用功能性语句 1.常用功能性语句(read命令) 2.expr命令 三.结构性语句 条件测试语句 字符串测试 整数测试 文件的测试 ...

  5. shell for循环1到100_浅谈Linux下shell 编程的for循环常用的6种结构

    浅谈Linux下shell 编程的for循环常用的6种结构 1. 常用for循环结构 (1) for 变量 in 值1 值2 值3... do 程序块儿 done (2) for 变量 in `命令` ...

  6. linux中快捷脚本,Linux下Shell编程快捷键大全(日常整理)

    有时候,我们需要在 Bash 中重复执行先前的命令.你当然可以使用上方向键来查看之前曾经运行过的命令.但这里有一些更好的方式,例如,数量掌握以下的快捷键. 1) !!:重复执行上一条指令 2) !a: ...

  7. Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向

    ​ 最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! ​ Shell 函数 1. 自定义函数 linux she ...

  8. Linux 下shell编程

    什么是shell?Shell是一个命令解析器,是介于Linux操作系统的内核(kernel)与用户之间的一个绝缘层.shell脚本就是讲各类命令预先放入其中,方便一次性执行的一个程序文件,主要用于方便 ...

  9. Linux Bash Shell编程快速入门

    BASH 的基本语法 最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

最新文章

  1. 关于iOS 架构的文章
  2. 【winform程序】自定义webrowser控件调用IE的版本
  3. AngularJS基本知识点
  4. 二进制地址的伙伴地址
  5. 云将与行业走向深度融合
  6. 这款免费小工具,让你的Mac也能实现右键新建
  7. 库克看下!华为MatePad 11月25日发布:剑指苹果
  8. perl socket初步
  9. 阿里云罗庆超:我为什么写《对象存储实战指南》这本书
  10. 《HTML CSS设计与构建网站》书评之-异类的风格,不一样的效果
  11. Android 用代码Ping网络
  12. 基于深度学习的关系抽取
  13. 小程序下单支付在我司的应用
  14. C++微信网页协议实现和应用
  15. 笔记本上的 Ctrl 键突然无法使用
  16. 年份计算器-python
  17. 陌上谁家年少,足风流
  18. 新华三杯复赛实验赛题解析IPv4 BGP路由部署+路由优化部署
  19. 2021年吴文俊人工智能科学技术奖公布 华为云田奇获杰出贡献奖
  20. 简单理解:人工智能、数据挖掘、模式识别、机器学习、深度学习

热门文章

  1. 大数据---数据分析师的完整流程与知识结构体系
  2. TensorFlow 教程 --教程--2.7字词的向量表示
  3. 计算机桌面图标有箭头,电脑桌面图标为什么会有一个小箭头,原来没的呀,
  4. 运算放大器基本公式_还在被三阶/四阶/运算放大器滤波器PLL这些概念困扰?这篇文章帮你搞懂它...
  5. 一个三十岁男人的婚姻思考
  6. 一个男生写的关于怎么追女生昨天没有说一个很关键的东西
  7. 从MySQL得到最大的性能
  8. 超3千万人次观看 李佳琦助力中国青年年货节
  9. 学历全靠编,融资靠忽悠?网传“包养7个女主持”的金融大佬被揭穿了
  10. 网约车司机用橡胶棍追打女乘客被行政拘留