Linux Shell编程基础

Linux Shell编程基础

1. Shell 简介

1.1 Shell概述

  Shell 本身是一个用 C 语言编写的程序,它是用户使用 Unix/Linux 的桥梁,用户的大部分工 作都是通过 Shell 完成的。Shell 既是一种命令语言,又是一种程序设计语言: 作为命令语言,它交互式地解释和执行用户输入的命令; 作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结 构,包括循环和分支。
  Shell 它虽然不是 Unix/Linux 系统内核的一部分,但它调用了系统核心的大部分功能来执行程 序、建立文件并以并行的方式协调各个程序的运行。Shell 是用户与内核进行交互操作的一 种接口,目前最流行的 Shell 称为 bash Shell(Bourne Again Shell)
  Shell 是一门编程语言(解释型的编程语言),即 shell 脚本(就是在用 linux 的 shell 命令编程), Shell 脚本程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一 行一行敲到 Shell 提示符下执行
  Shell 是一种脚本语言,那么,就必须有解释器来执行这些脚本 Unix/Linux上常见的 Shell 脚本解释器有bash、sh、csh、ksh等,习惯上把它们称作一种 Shell。 我们常说有多少种 Shell,其实说的是 Shell 脚本解释器,可以通过 cat /etc/shells 命令查看系 统中安装的 shell,不同的 shell 可能支持的命令语法是不相同的
  sh 是 Unix 标准默认的 shell,由 Steve Bourne 开发,是 Bourne Shell 的缩写。 bash 是 Linux 标准默认的 shell,本教程也基于 bash 讲解。bash 由 Brian Fox 和 Chet Ramey 共同完成,是 Bourne Again Shell 的缩写。
  vShell 本身支持的命令并不多,内部命令一共有 40 个,但是它可以调用其他的程序,每个程 序就是一个命令,这使得Shell命令的数量可以无限扩展,其结果就是Shell的功能非常强大, 完全能够胜任 Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软 件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件 等。

1.2 Shell基本格式

  代码写在普通文本文件中,通常以.sh 结尾,虽然不是强制要求,但希望大家最好这么做
例子:
[[email protected] bin]# vi helloworld.sh
Linux Shell编程基础Linux Shell编程基础
保存退出即可.
在这里,我们就写好了一个 shell 脚本,第一行是固定需要的表明用哪一种 shell 解析器来 执行我们的这个脚本程序。本质上,shell 脚本里面的代码都是就是一些流程控制语句加一 些特殊语法再加 shell 命令组成。其中,我们可以当做每一个命令就是 shell 编程当中的关键字

1.3 Shell 执行方式

  1. sh 方式或者 bash 方式
    sh helloworld.sh
    bash helloworld.sh ## 直接指定用系统默认的 bash shell 解释执行
  2. source 方式或者.方式 source 命令也称为“点命令”,也就是一个点符号(.),是 bash 的内部命令。 功能:使 Shell 读入指定的 Shell 程序文件并依次执行文件中的所有语句 source 命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。 用法:
    source filename

    .(空格)filename
    Linux Shell编程基础
  3. 直接执行该脚本文件
    可以有两种方式,不过这两种方式的执行,都需要该文件有执行权限 所以在执行之前,我们要更改他的执行权限
    Linux Shell编程基础Linux Shell编程基础

1.4 Shell 注释

单行注释:Shell 脚本中以#开头的代码就是注释
多行注释:Shell 脚本中也可以使用多行注释:

:<<!
echo “dd” ## 这句话是注释,也就是说在 :<<! 注释语句 ! 中间的都是注释
!

Shell 基本语法

2.1、变量

2.1.1 系统变量

  Linux Shell 中的变量分为“系统变量”和“用户自定义变量” 系统变量可以通过 set 命令查看,用户环境变量可以通过 env 查看
Linux Shell编程基础Linux Shell编程基础

2.1.2 自定义变量

Linux Shell编程基础
单引号和双引号总结:
Linux Shell编程基础
3. 变量高级用法 撤销变量:unset ABC 声明静态变量:readonly ABC= ‘abc’ 特点是这种变量是只读的,不能 unset
请先看一个例子,我现在写两个脚本,在 a.sh 中调用 b.sh 执行,那我们想知道 a 脚本能 不能获取到 b 脚本的变量,b 脚本能不能获取到 a 脚本的变量?
Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础
【注】:反引号位 (`) 位于键盘的Tab键的上方

Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础
Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础Linux Shell编程基础