《 Linux操作系统》第六讲 Shel编程 学时计划:4学时理论,4学时实验 (实验五:Shel1编程) 教学大纲: 1、She1l基础 2、 Shell语法 3、 Shell编程案例一:用户管理 4、 Shell编程案例二:备份 MySQL数据库 5、讨论与思考 She11是用户和 Linux操作系统之间的接口。 Linux中有多种 he11,其中缺省使用的是Bash 本讲讲述 Shell的工作原理、She1l的种类、 Shell的一般操作 及Bash的特性。最后通过两个案例介绍Shel1的应用方法和Shel1 编程的一般思路。 本讲仅简单介绍Shel的基础知识,对于更多的She11内容,本 讲最后推荐了一些相关的专业教程和技术书籍。 、 Shell基础 1.1She1l介绍 Linux系统的She11作为操作系统的外壳,为用户提供使用操作 系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 She1l是用户和 Linux内核之间的接口程序,如果把 Linux内核 想象成一个球体的中心,shel1就是围绕内核的外层。当从she1l或 其他程序向 Linux传递命令时,内核会做出相应的反应 1.1.1She1l是一个命令语言解释器。 Shell拥有自己内建的 Shell命令集,Shel1也能被系统中其他 应用程序所调用。用户在提示符下输入的命令都由She11先解释然后 传给 Linux核心。有一些命令,比如改变工作目录命令cd,是包含 1|(anx操作系统》讲稿/河南中医学院/阮晓龙/ phactcm.edu.cn
1 《Linux 操作系统》讲稿 / 河南中医学院 / 阮晓龙 / rxl@hactcm.edu.cn 《Linux 操作系统》第六讲: Shell 编程 学时计划:4 学时 理论,4 学时 实验 (实验五:Shell 编程) 教学大纲: 1、Shell 基础 2、Shell 语法 3、Shell 编程案例一:用户管理 4、Shell 编程案例二:备份 MySQL 数据库 5、讨论与思考 Shell 是用户和 Linux 操作系统之间的接口。Linux 中有多种 shell,其中缺省使用的是 Bash。 本讲讲述 Shell 的工作原理、Shell 的种类、Shell 的一般操作 及 Bash 的特性。最后通过两个案例介绍 Shell 的应用方法和 Shell 编程的一般思路。 本讲仅简单介绍 Shell 的基础知识,对于更多的 Shell 内容,本 讲最后推荐了一些相关的专业教程和技术书籍。 一、Shell 基础 1.1Shell 介绍 Linux 系统的 Shell 作为操作系统的外壳,为用户提供使用操作 系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 Shell 是用户和 Linux 内核之间的接口程序,如果把 Linux 内核 想象成一个球体的中心,shell 就是围绕内核的外层。当从 shell 或 其他程序向 Linux 传递命令时,内核会做出相应的反应。 1.1.1Shell 是一个命令语言解释器。 Shell 拥有自己内建的 Shell 命令集,Shell 也能被系统中其他 应用程序所调用。用户在提示符下输入的命令都由 Shell 先解释然后 传给 Linux 核心。有一些命令,比如改变工作目录命令 cd,是包含
在shel1内部的。还有一些命令,例如拷贝命令cp和移动命令rm, 是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关 心一个命令是建立在Shel1内部还是一个单独的程序。 Shell运行时,首先检查命令是否是内部命令,若不是再检查是 否是一个应用程序(这里的应用程序可以是 Linux本身的实用程序, 如1s和rm,也可以是购买的商业程序,如xv,或者是自由软件,如 emacs)。然后 Shell在搜索路径里寻找应用程序(搜索路径就是一个 能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令 并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如 果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并 传给 Linux内核。 1.1.2She1l自身就是一个解释型的程序设计语言。 She1l程序设计语言支持绝大多数在高级语言中能见到的程序元 素,如函数、变量、数组和程序控制结构。 Shell编程语言简单易学 任何在提示符中能键入的命令都能放到一个可执行的Shel程序中。 1.1.3Shel1的工作原理 当普通用户成功登录,系统将执行一个称为She11的程序。正是 Shell进程提供了命令行提示符。作为默认值,对普通用户用“$” 作提示符,对超级用户(root)用“#”作提示符。一旦出现了shel1 提示符,就可以键入命令名称及命令所需要的参数。Shel1将执行这 些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生 了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在 正常结束之前,中止它的执行)。 当用户准备结束登录对话进程时,可以键入1 gout命令、exit 命令或文件结束符(EOF)(按ctr1+d实现),结束Shel1的工作状态。 1.2She1l与 Linux内核的管理 She11、用户与 Linux操作系统内核之间的关系如下图6-1所示。 2|(amx操作系统》讲稿/河南中医学院/阮晓龙/ phactcm.edu.cn
2 《Linux 操作系统》讲稿 / 河南中医学院 / 阮晓龙 / rxl@hactcm.edu.cn 在 shell 内部的。还有一些命令,例如拷贝命令 cp 和移动命令 rm, 是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关 心一个命令是建立在 Shell 内部还是一个单独的程序。 Shell 运行时,首先检查命令是否是内部命令,若不是再检查是 否是一个应用程序(这里的应用程序可以是 Linux 本身的实用程序, 如 ls 和 rm,也可以是购买的商业程序,如 xv,或者是自由软件,如 emacs)。然后 Shell 在搜索路径里寻找应用程序(搜索路径就是一个 能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令 并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如 果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并 传给 Linux 内核。 1.1.2Shell 自身就是一个解释型的程序设计语言。 Shell程序设计语言支持绝大多数在高级语言中能见到的程序元 素,如函数、变量、数组和程序控制结构。Shell 编程语言简单易学, 任何在提示符中能键入的命令都能放到一个可执行的 Shell 程序中。 1.1.3Shell 的工作原理 当普通用户成功登录,系统将执行一个称为 Shell 的程序。正是 Shell 进程提供了命令行提示符。作为默认值,对普通用户用“$” 作提示符,对超级用户(root)用“#”作提示符。一旦出现了 shell 提示符,就可以键入命令名称及命令所需要的参数。Shell 将执行这 些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生 了大量的输出,可以从键盘上按 ctrl+c 发出中断信号来中断它(在 正常结束之前,中止它的执行)。 当用户准备结束登录对话进程时,可以键入 logout 命令、exit 命令或文件结束符(EOF)(按 ctrl+d 实现),结束 Shell 的工作状态。 1.2Shell 与 Linux 内核的管理 Shell、用户与Linux操作系统内核之间的关系如下图6-1所示
用户 命令 输出 Linux Shell 进程 系统调用 产生进程 LInux操作系统内核 计算机硬件 图6-1She、用户与 Linux操作系统内核的关系 1.3查看Shel1版本 Linux的She11有多种类型,其中最常见的就是 Bourne shel1 (sh)、 C Shell(csh)和 Korn shell(ksh)。 用户登录系统后,可以通过命令查看自己的Shel版本。 命令 shell>echo SSHELL 如果需要临时的更换She11版本的话,可以通过命令变更。 命令: shell>csh shell>echo SSHELL shell>ksh shell>echo SSHELL shell>bash shell>echo SSHELL 1. bAsh Bash是大多数 Ubuntu系统的默认Shel1。Bash的特点主要有下 面几个方面。 (1)可自动补全命令。 (2)可以使用通配符。 (3)可以保存历史命令。 (4)支持命令别名。 3l(anx操作系统》讲稿/河南中医学院/阮晓龙/ phactcm.edu.cn
3 《Linux 操作系统》讲稿 / 河南中医学院 / 阮晓龙 / rxl@hactcm.edu.cn 1.3 查看 Shell 版本 Linux 的 Shell 有多种类型,其中最常见的就是 Bourne Shell (sh)、C Shell(csh)和 Korn Shell(ksh)。 用户登录系统后,可以通过命令查看自己的 Shell 版本。 命令: shell>echo $SHELL 如果需要临时的更换 Shell 版本的话,可以通过命令变更。 命令: shell>csh shell>echo $SHELL shell>ksh shell>echo $SHELL shell>bash shell>echo $SHELL 1.4Bash Bash 是大多数 Ubuntu 系统的默认 Shell。Bash 的特点主要有下 面几个方面。 (1)可自动补全命令。 (2)可以使用通配符。 (3)可以保存历史命令。 (4)支持命令别名。 图 6-1 Shell、用户与 Linux 操作系统内核的关系
Bash中可以使用 alias和 unalias命令给命令或者可执行程序 起别名和删除别名。 命令举例: shell>lm #m命令不存在,命令执行出错。通过 alias让lm成为ls1命令的别名。 shell>alias Im='Is -I #执行lm命令,相当于执行ls1命令。 shell>lm (5)支持输入/输出重定向。 输入/输出重定向用于改变命令的输入和输出的默认配置。 Linux 系统默认的输入是键盘,默认的输出是显示器。 命令举例: shell>ls >/home/zhaodongfeng/lsl.out #s命令的结果不通过显示器显示而存放到文件中去。 shell>ls-1>/home/zhaodongfeng/lsl.out #将ls-命令的结果追加到 Isl.out文件中,并覆盖以前的内容。 (6)支持管道功能。 管道用于将一系列的命令连接起来,也就是把前面命令的输出作 为后面命令的输入。管道的命令是“|” shell>grep 211.69.3233/var/log/munin/munin-node log #查看日志中的内容。 shell>grep 211.69.3233/var/log/munin/munin-node. log Iwc-I #查看日志中的内容,其结果作为wc命令的输入,用来进行统计, (7)支持两级提示符。 Bash有两级提示符。第一级提示符是“$”。当Bash需要进一步 提示以便补全命令时,会显示第二级提示符“>”。 1.5She1l脚本的建立和执行 1.5. 1 Shell脚本的建立 She1l程序可以存放到文件中,这种被She1l解释执行的命令文 件被称为Shel1脚本。Shel1脚本程序与 Windows的.bat批处理文件 4|am操作系统》讲稿/河南中医学院/阮晓龙/@phactcm.edu.cn
4 《Linux 操作系统》讲稿 / 河南中医学院 / 阮晓龙 / rxl@hactcm.edu.cn Bash 中可以使用 alias 和 unalias 命令给命令或者可执行程序 起别名和删除别名。 命令举例: shell>lm #lm 命令不存在,命令执行出错。通过 alias 让 lm 成为 ls -l 命令的别名。 shell>alias lm=’ls -l’ #执行 lm 命令,相当于执行 ls -l 命令。 shell>lm (5)支持输入/输出重定向。 输入/输出重定向用于改变命令的输入和输出的默认配置。Linux 系统默认的输入是键盘,默认的输出是显示器。 命令举例: shell>ls > /home/zhaodongfeng/ls1.out #ls 命令的结果不通过显示器显示而存放到文件中去。 shell>ls -l > /home/zhaodongfeng/ls1.out #将 ls -l 命令的结果追加到 ls1.out 文件中,并覆盖以前的内容。 (6)支持管道功能。 管道用于将一系列的命令连接起来,也就是把前面命令的输出作 为后面命令的输入。管道的命令是“|”。 shell>grep 211.69.32.33 /var/log/munin/munin-node.log #查看日志中的内容。 shell>grep 211.69.32.33 /var/log/munin/munin-node.log |wc -l #查看日志中的内容,其结果作为 wc 命令的输入,用来进行统计。 (7)支持两级提示符。 Bash 有两级提示符。第一级提示符是“$”。当 Bash 需要进一步 提示以便补全命令时,会显示第二级提示符“>”。 1.5Shell 脚本的建立和执行 1.5.1Shell 脚本的建立 Shell 程序可以存放到文件中,这种被 Shell 解释执行的命令文 件被称为 Shell 脚本。Shell 脚本程序与 Windows 的.bat 批处理文件
非常相似,但功能要比bat文件强大的多。 She11脚本程序可以在存放时不指定扩展名,通常为了便于记忆, 总是习惯用.sh来描述Shel1脚本 1.5.2执行She11脚本的方式 执行Shel1脚本的方式有三种。 (1)输入重定向。 使用输入重定向的方式让 shell从文件中读取命令并执行。 命令: shell>bash<脚本文件路径与文件名 (2)以脚本文件为参数执行。 使用bash命令,将脚本文件作为bash命令的参数。 命令 shell>bash脚本文件路径与文件名 (3)将Shel1脚本的权限设置为可执行后直接在提示符下执行。 通常情况下,用户是不能够直接执行由文本编辑器(vi或者nano) 建立的She11脚本的,因为建立的She11脚本文件是没有执行权限的。 通过 chmod命令将She1l脚本的权限设置为执行权限后,可以直接执 行She11脚本文件。 命令 shell>chmod+x脚本文件路径与文件名 she/脚本文件路径与文件名 二、 Shell语法 2.1建立一个She11脚本程序 如同其他语言一样,使用任意一种文字编辑器,比如vi、nano 等来编写Shel1程序。 (1)程序必须以下面的行开始(必须放在文件的第一行)。 #!/bin/bash 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在 本例中使用/bin/bash来执行程序。 (2)注释 在进行Shel1编程时,以#开头的句子表示注释,直到这一行的 5《Linux操作系统》讲稿/河南中医学院/阮晓龙/rx@hactcm.edu.cn
5 《Linux 操作系统》讲稿 / 河南中医学院 / 阮晓龙 / rxl@hactcm.edu.cn 非常相似,但功能要比 bat 文件强大的多。 Shell脚本程序可以在存放时不指定扩展名,通常为了便于记忆, 总是习惯用.sh 来描述 Shell 脚本。 1.5.2 执行 Shell 脚本的方式 执行 Shell 脚本的方式有三种。 (1)输入重定向。 使用输入重定向的方式让 shell 从文件中读取命令并执行。 命令: shell>bash<脚本文件路径与文件名 (2)以脚本文件为参数执行。 使用 bash 命令,将脚本文件作为 bash 命令的参数。 命令: shell>bash 脚本文件路径与文件名 (3)将 Shell 脚本的权限设置为可执行后直接在提示符下执行。 通常情况下,用户是不能够直接执行由文本编辑器(vi 或者 nano) 建立的Shell脚本的,因为建立的Shell脚本文件是没有执行权限的。 通过 chmod 命令将 Shell 脚本的权限设置为执行权限后,可以直接执 行 Shell 脚本文件。 命令: shell>chmod +x 脚本文件路径与文件名 shell>./脚本文件路径与文件名 二、Shell 语法 2.1 建立一个 Shell 脚本程序 如同其他语言一样,使用任意一种文字编辑器,比如 vi、nano 等来编写 Shell 程序。 (1)程序必须以下面的行开始(必须放在文件的第一行)。 #!/bin/bash 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在 本例中使用/bin/bash 来执行程序。 (2)注释 在进行 Shell 编程时,以#开头的句子表示注释,直到这一行的