人人都能学会的 SHELL编程
目 录
Shell 入门简介 ......................................
Shell 编程之变量详解 . ...............................
If 条件语句学习 . ....................................
使用 if 条件语句编写 MySQL备份脚本 .................
IF 条件综合 Shell 实战脚本编写 . .....................
循环语句 for ......................................
循环语句 while.....................................
Until 循环语句 .....................................
Case选择语句 ......................................
select 选择语句 . ...................................
Shell 编程函数讲解 . ................................
Shell 数组编程 .....................................
Shell 编程之 awk、sed 命令案例分析 ..................
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14. 全备和增量备份 Linux 系统脚本编写 ..................
2
5
8
11
12
20
22
23
24
25
25
27
30
31
15.
Shell 编程之 IP 匹配及磁盘邮件告警 .. 错误!未定义书签。
1. Shell 入门简介
说到 Shell 编程,我想很多从事 Linux 运维工作的朋友都不陌生,
都对 Shell 有基本的了解, 可能大家刚开始接触 Shell 的时候, 有各
种想法?
能不能不学?
高大上?
到底是浮云?还是神马?
很难啊?
我想告诉大家的是, 大家有这些想法一点都不觉得惊讶, 为什么?
这些都很正常,对于任何一件事情在未开始之前, 肯定会有总总假设,
那我今天想说的是, 学完人人都会 Shell 编程后, 我们会觉得一切的
Shell 都是浮云,我们每个人都能很好的使用它,驾驭它,更好的完
成我们日常运维的工作。
曾经有人说过,玩 Linux 不知道 Shell ,那就是不懂 Linux ;现在
细细品味确实是这样。为了让更多的人能接触 Shell 、了解 Shell ,
使用 Shell ,所以今天开设了这样一个网络课程,让我们的 Shell 飞
起来。
好的,其他不多说了,我们正式进入主题,什么是 Shell 呢?
Shell 是操作系统的最外层, Shell 可以合并编程语言以控制进程
和文件,以及启动和控制其它程序。 shell 通过提示您输入,向操作
系统解释该输入, 然后处理来自操作系统的任何结果输出来管理您与
操作系统之间的交互。 简单来说 Shell 就是一个用户跟操作系统之间
的一个命令解释器。
Shell 是用户与 Linux 操作系统之间沟通的桥梁。用户可以输入
命令执行,又可以利用 Shell 脚本编程去运行。
Linux Shell 种类非常多, 常见的有: Bourne Shell (/usr/bin/sh
或/bin/sh )、 Bourne Again Shell (/bin/bash )、 C Shell
(/usr/bin/csh )、 K Shell (/usr/bin/ksh )、 Shell for Root
(/sbin/sh )等。不同的 Shell 语言的语法有所不同,所以不能交换
使用。
最常用的 shell 是 Bash,也就是 Bourne Again Shell ,由于易用和
免费, Bash在日常工作中被广泛使用,也是大多数 Linux 系统默认
的 Shell 。接下来我们来写一个简单的 shell 脚本。(shell 脚本一般
文件名以 .sh 结尾,同时文件第一行定义该脚本为 shell 脚本 )
vi
first_shell.sh
#!/bin/bash
#This is my First shell
echo “Hello World ! ”
这就是我们的第一个脚本,是不是很简单呢,注解如下:
#!/bin/bash //
表示定义该脚本是一个 shell 脚本(固定格式)。
#This is myFirst
shell
// 这里的#号属于注解,没有任何的意义,
SHELL不会解析它。
echo “Hello World ! ” //shell 脚本主命令,我们执行这个脚
本讲看到 : Hello World !
信息。
脚本编写完毕,如何来执行呢,首先执行 shell 脚本需要执行权限,
赋予执行权限:
chmod o+x first_shell.sh
然后 ./first_shell.sh
执行即可 ; 也可
以直接使用命令执行 : /bin/sh first_shell.sh
,显示效果一样。
2. Shell 编程之变量详解
Shell 编程语言是非类型的解释型语言 , 不像 C++/JAVA语言编程
时需要事先声明变量, SHELL给一个变量赋值 , 实际上就是定义了变量,
在 Linux 支持的所有
shell 中, 都可以用赋值符号 (=) 为变量赋值。
SHELL变量可分为两类:局部变量和环境变量。局部变量只在创
建它们的 shell 脚本中使用。而环境变量则可以在创建它们的 shell
及其派生出来的任意子进程中使用。 有些变量是用户创建的, 其他的
则是专用 shell 变量。
例如在脚本里面定义 A=123 , 定义这样一个变量,前面变量名,
后面是变量的值。
引用变量可以使用 $A,把变量放在脚本里面会出现什么样的效果呢?
如下:
#!/bin/bash
#Author wugk 2014-06-10
A=123
echo “Printf variables equal is $A
”
执行脚本: sh test.sh ,结果将会显示:
Printf variables equal is 123
简单的理解变量, 相当于定义一个别名 - 名称,引用的时候加上 $符号
就可以了。
例如定义变量 name=wuguangke
执行 echo $name 将会显示 wuguangke
SHELL常见的系统变量解析 :
$0 当前程序的名称
$n 当前程序的第 n 个参数 ,n=1,2,
, 9
$* 当前程序的所有参数 ( 不包括程序本身 )
$# 当前程序的参数个数 ( 不包括程序本身 )
$? 命令或程序执行完后的状态,一般返回 0 表示执行成功。
$UID 当前用户的 ID
$PWD当前所在的目录
我们来测试一个常用变量的脚本: vi auto_var.sh
#!/bin/bash
#auto print variables
#by wugk 2014-09
echo -e '\033[32m-----------------------------\033[0m'
echo "This is $0 param !"
echo "This \$1 is $1 param !"
echo "This \$2 is $2 param !"
echo -e '\033[32m-----------------------------\033[0m'
echo "This \$* is $* param !"
echo "This \$# is $# param !"
echo "This \$? is $? param !"
echo
紧接着我们来编写一个简单的 echo 打印菜单:
#!/bin/bash
#auto install httpd
#by wugk 2014-09
echo -e '\033[32m-----------------------------\033[0m'
FILES=httpd-2.2.17.tar.bz2
URL=http://mirrors.cnnic.cn/apache/httpd/
PREFIX=/usr/local/apache2/
echo -e "\033[36mPlease Select Install Menu:\033[0m"
echo
echo "1) 官方下载 Httpd 文件包 ."
echo "2) 解 压 apache 源 码 包 ."
echo "3) 编译安装 Httpd 服务器 ."
echo "4) 启动 HTTPD服务器 ."
echo -e '\033[32m-----------------------------\033[0m'
sleep 20
3.
If 条件语句学习
在 Linux Shell 编程中, if 、for 、while 、case 等条件流程控制
语句用的非常多,把这些学好,对提升脚本的功力有非常大的帮助。
下面将逐个来讲解具体的用法:
If 条件判断语句
if ( 表达式 ) #if ( Variable in Array )