说到 Shell 编程,很多从事 Linux 运维工作的朋友都不陌生,都对 Shell 有基本的了解,读者可能刚开始接触 Shell 的时候,有各种想法,感觉编程非常困难,SHELL 编程是所有编程语言中最容易上手,最容易学习的编程脚本语言。
本章向读者介绍 Shell 编程入门、Shell 编程变量、If、While、For、Case、Select基本语句案例演练及 Shell 编程四剑客 Find、Grep、Awk、Sed 深度剖析等。
shell入门
简单来说 Shell 就是一个用户跟操作系统之间的一个命令解释器。
Shell 是用户与 Linux 操作系统之间沟通的桥梁,用户可以输入命令执行,又可以利用 Shell 脚本编程去运行
Linux Shell 种类非常多,常见的 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 脚本名称命名一般为英文、大写、小写;
❑ 不能使用特殊符号、空格来命名;
❑ Shell 脚本后缀以.sh 结尾;
❑ 不建议 Shell 命名为纯数字,一般以脚本功能命名。
❑ Shell 脚本内容首行需以#!/bin/bash 开头;
❑ Shell 脚本中变量名称尽量使用大写字母,字母间不能使用“-”,可以使用
“_”;
❑ Shell 脚本变量名称不能以数字、特殊符号开头。
如下为第一个 Shell 编程脚本,脚本名称为:first_shell.sh
#!/bin/bash #固定格式,定义该脚本所使用的 Shell 类型;
#This is my First shell
#By author Mr.xu 2020
echo “Hello World ”
Shell 编程之变量
Shell 编程中变量分为三种,分别是系统变量、环境变量和用户变量,其中系统变量
在对参数判断和命令返回值判断时使用,而环境变量则主要是在程序运行时需要设置,
用户变量又称为局部变量,多使用在 Shell 脚本内部或者临时局部使用。
Shell 变量名在定义时,首个字符必须为字母(a-z,A-Z),不能以数字开头,中间
不能有空格,可以使用下划线(_),不能使用(-),也不能使用标点符号等。
1. SHELL 编程常见系统变量
变量 | 说明 |
---|---|
$0 | 当前脚本的名称; |
$n | 当前脚本的第 n 个参数,n=1,2,…9; |
$* | 当前脚本的所有参数(不包括程序本身); |
$# | 当前脚本的参数个数(不包括程序本身); |
$? | 命令或程序执行完后的状态,返回 0 表示执行成功; |
$$ | 程序本身的 PID 号。 |
2. SHELL 编程常见环境变量
变量 | 说明 |
---|---|
PATH | 命令所示路径,以冒号为分割; |
HOME | 打印用户家目录; |
SHELL | 显示当前 Shell 类型; |
USER | 打印当前用户名; |
ID | 打印当前用户 id 信息; |
PWD | 显示当前所在路径; |
TERM | 打印当前终端类型; |
HOSTNAME | 显示当前主机名。 |
3. SHELL 编程用户变量
变量 | 说明 |
---|---|
A=jfedu.net | 自定义变量 A; |
N_SOFT=nginx-1.12.0.tar.gz | 自定义变量 N_SOFT; |
BACK_DIR=/data/backup/ | 自定义变量 BACK_DIR; |
IP1=192.168.1.11 | 自定义变量 IP1; |
IP2=192.168.1.12 | 自定义变量 IP2 |
创建 Echo 打印菜单 Shell 脚本,脚本代码如下:
#!/bin/bash
#auto install httpd
#By author jfedu.net 2017
echo -e '\033[32m-----------------------------\033[0m'
FILE=httpd-2.2.31.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
运行脚本,执行结果如图