返回顶部

Linux基础巩固--Day6--shell编程

编程基础

什么是shell

简单来说,shell是一个执行命令的宏处理(macro processor)器。
术语宏处理器(macro processor)是指将文本和符号扩展到创建更大的表达式的功能。

Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。

Shell接收用户输入的命令并把它送入内核去执行。

Shell可以在交互式模式或非交互式模式下使用

  交互式: 执行命令从键盘键入

  非交互试:执行从文件读取到命令

shell常见名词

  • POSIX   #  一个基于Unix的开放系统标准系列。Bash主要关注POSIX 1003.1标准的外壳和实用程序部分。
  • blank    #  一个空格或者制表符
  • builtin    #  由shell本身在内部实现的命令,而不是文件系统中的某个可执行程序。
  • control operator    #  流程控制语句,执行控制功能的“令牌”。
  • exit status    #  命令返回给它的调用者的值。该值限制为8位,因此最大值为255。
  • field    #  一个文本单元,它是一个shell扩展的结果。扩展后,当执行一个命令时,结果字段被用作命令名和参数。
  • filename    #  用于标识文件的字符串
  • job    #  由管道组成的一组过程,以及由它派生的任何进程,它们都在同一个进程组中。
  • job control    #  用户可以有选择地停止(暂停)并重启(恢复)进程的机制。
  • metacharacter    #  当未被引用时,一个字符将单词分开。元字符是一个“空白”或下列字符之一。'\', '&', ';','(', ')', '<', or '>'.
  • name    #  由字母、数字和下划线组成的“单词”,以字母或下划线开头。名称被用作shell变量和函数名。也称为“标识符”。
  • operator    #  “控制操作符”或“重定向操作符”。对于重定向操作符的列表。运算符包含至少一个未被引用的“元字符”。
  • process group    #  每个具有相同进程组ID的相关进程的集合。
  • process group ID    #  在其生命周期中表示“进程组”的唯一标识符。
  • reserved word    #  一个对shell有特殊意义的词。大多数保留字引入了shell流控制结构,例如“for”和“while”。
  • return status    #  “退出状态”的同义词。
  • signal    #  一种机制,通过该机制可以通过系统中发生的事件的内核来通知进程。
  • special builtin    #  一个被POSIX标准分类为特殊的shell内置命令。
  • token    #  由shell层考虑单个单元的一系列字符。它要么是一个“单词”,要么是一个“运算符”。
  • word    #  由shell作为单元处理的一系列字符。词汇可能不包括未引用的“元字符”。

Shell语法

shell 执行命令操作

  shell 读取和执行命令时将经过下列操作:

  1.从一个文件(Shell脚本)中读取它的输入,从作为参数的字符串到 “-c” 调用选项(调用Bash),或者从用户的终端。

  2.将输入拆分为单词和操作符,遵守所描述的引用规则。这些标记由“元字符”分隔。此步骤执行别名扩展。

  3.将令牌解析为简单的复合命令。

  4.执行各种shell扩展,将扩展令牌分解为文件名、命令和参数列表。

  5.执行任何必要的重定向,并从参数列表中删除重定向操作符及其操作数。

  6.执行命令

  7.可选地等待命令完成并收集其退出状态。

引用(Quoting)

  1.转义字符

  2.单引号

  3.双引号

  4.注释

命令语法

查看帮助

  1.查看shell内置命令(builtin)的使用帮助

  2.使用info命令查看信息格式文档

 

变量

命名规则

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头

中间不能有空格,可以使用下划线(_)

不能使用标点符号

不能使用bash里的关键字(可用help命令查看保留关键字)

使用变量

your_name = "zhangw"
echo $your_name
echo ${your_name}

# {}可选,加{}是为了帮助解释器识别变量的边界,推荐给变量添加{}

 

 

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变

 

 

删除变量

使用 unset 命令可以删除变量,但不能删除只读变量

 

 

变量类型

运行shell时会同时存在三种变量:

1.局部变量

局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量

2.环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量

3.shell变量

shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

运算符

算术运算符

 

 

 

 # 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;

关系运算符

关系运算符只支持数字,和值为数字的字符串

 

 

 

 

 

 

布尔运算符

 

 

 

字符串运算符

 

 

 

 

 

 

文件测试运算符

 

 

 

 

流程控制

if

 

 

if else

 

 

if else-if else

 

 

for

 

 

while

 

 

until循环

 

 

case

 

 

break命令

 

 

continue

 

 

case ...esac

 

 

函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用

 

 

 

 

 

 在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

 

 

数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)

与大部分编程语言类似,数组元素的下标由0开始

实例:

    my_array=(a b "c" d)

读取数组元素值的一般格式是:

${array_name[index]}

 

 

 使用@ 或 * 可以获取数组中的所有元素

 

posted @ 2020-02-15 19:34  Will_D_Zhang  阅读(191)  评论(0编辑  收藏  举报