SHELL编程入门简介
一、SHELL软件概念和应用场景
1) 学习Linux技术,不是为了学习系统安装、命令操作、用户权限、配置IP、网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件、程序(Apache、MYSQL、Redis、PHP、Nginx、Tomcat等);
2) 学习Linux技术,如果不懂SHELL编程,可以说不懂Linux,要想实现月薪过万,SHELL编程技能是运维人员必备的,那么SHELL编程到底是什么呢?
3) 通过Xshell和CRT远程连接Linux操作系统,默认会登陆到命令行终端,命令行终端提示符#、$,为什么要登陆命令行呢?其实可以直接登陆图形界面,最终用户是为了什么?为了能够控制和管理操作系统。
4) 而Linux操作系统核心是Linux内核(数以万计的代码组成的),默认用户是不能直接操作Linux内核的,借助第三方的工具:命令行、图形界面UI,默认登陆到Linux命令行终端,也称为SHELL命令行终端;
5) 用户基于SHELL命令行终端,可以输入各种Linux指令,当我们在SHELL命令行终端输入df –h命令按下Enter键时,Linux指令传递给SHELL(软件程序),经过SHELL解析,并且将解析之后内容传递给Linux内核,Linux内核接收以后会处理,处理完毕之后会将数据内容返回给SHELL,由SHELL经过解析最
终返回给用户终端;
6) 通常将SHELL称为Linux内核的外壳,用于连接用户和Linux内核之间桥梁,将SHELL称为中间件,SHELL外壳程序有很多种类和版本,查看Linux操作系统SHELL类型和SHELL版本:
#查看Linux默认的SHELL种类;
echo $SHELL
#查看默认的SHELL种类版本;
/bin/bash –version
7) SHELL和SHELL编程概念有什么区别呢?
- SHELL和SHELL编程是两个不同的概念,SHELL是用户和Linux内核之间沟通桥梁,而SHELL编程主要是基于SHELL解释器去编写各种指令或者代码;
- SHELL编程一定要有SHELL(SHELL解释器),SHELL解释器是SHELL编程的基石,没有SHELL就没有SHELL编程;
8) SHELL编程的核心思想?
SHELL编程是将Linux单个指令或者多个指令按照一定的逻辑关系和顺序堆积在文本文件(脚本文件)中,文本文件中的指令会通过SHELL解释器去解析,最终实现某个具体的功能和需求;
9) SHELL编程的产物是SHELL脚本文件(以.sh结尾命名的),而SHELL脚本文件是由单个命令或者多个命令堆积而成的,SHELL脚本中命令会通过SHELL解释器去解析和执行;
10) 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编程、Shell脚本、Shell命令之前都有什么区别呢?简单来说Shell是一个整体的概念,Shell编程与Shell脚本统称为Shell编程,Shell命令是Shell编程底层具体的语句和实现方法。
二、SHELL脚本及Hello World
要熟练掌握Shell编程语言,需要大量的练习,初学者可以用Shell打印“Hello World”字符,寓意着开始新的启程!
- Shell脚本名称命名一般为英文、大写、小写;
- 不能使用特殊符号、空格来命名;
- Shell脚本后缀以.sh结尾;
- 不建议Shell命名为纯数字,一般以脚本功能命名。
- Shell脚本内容首行需以#!/bin/bash开头;
- Shell脚本中变量名称尽量使用大写字母,字母间不能使用“-”,可以使用“_”;
- Shell脚本变量名称不能以数字、特殊符号开头。
#!/bin/bash
#This is my First shell
#By author jfedu.net 2017
echo “ Hello World ”
#!/bin/bash # 固定格式,定义该脚本所使用的Shell类型;
#This is my First shell #号表示注释,没有任何的意义,SHELL不会解析它;
#By author jfedu.net 2017 #表示脚本创建人,#号表示注解;
echo “Hello World !” #Shell脚本主命令,执行该脚本呈现的内容。
1、Shell脚本编写完毕,如果运行该脚本,运行用户需要有执行权限,可以使用chmod o+x first_shell.sh赋予可执行权限。
2、然后./first_shell.sh执行即可,还可以直接使用命令执行: /bin/sh first_shell.sh直接运行脚本,不需要执行权限,最终脚本执行显示效果一样。
3、初学者学习Shell编程,可以将在Shell终端运行的各种命令依次写入到脚本内容中,可以把Shell脚本当成是Shell命令的堆积。
三、Shell编程之变量详解
Shell编程是非类型的解释型语言,不像C++、JAVA语言编程时需要事先声明变量,Shell给一个变量赋值,实际上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值,Shell变量为弱类型,定义变量不需要声明类型,但在使用时需要明确变量的类型,可以使用Declare指定类型,Declare常见参数有:
+/- "-"可用来指定变量的属性,"+"为取消变量所设的属性;
-f 仅显示函数;
r 将变量设置为只读;
x 指定的变量会成为环境变量,可供shell以外的程序来使用;
i 指定类型为数值,字符串或运算式。
Shell编程中变量分为三种,分别是系统变量、环境变量和用户变量,其中系统变量在对参数判断和命令返回值判断时使用,而环境变量则主要是在程序运行时需要设置,用户变量又称为局部变量,多使用在Shell脚本内部或者临时局部使用。
#!/bin/bash
#By author jfedu.net 2017
A=123
echo “Printf variables is $A.”
执行该Shell脚本,结果将会显示:Printf variables is jfedu.net。Shell常见的系统变量、环境变量、用户变量详解如下:
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