什么是shell:

shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

一、编程基础

1、提供了编程环境:
			程序:算法+数据结构
			数据:程序的核心
			数据结构:数据在计算机中的类型和组织方式
			算法:处理数据的方式
程序编程风格:
			过程式:以指令为中心,数据服务于指令
			对象式:以数据为中心,指令服务于数据
shell程序:提供了编程能力,解释执行   
2、程序的执行方式:
	计算机:运行二进制指令
	编程语言: 人和计算机之间交互语言
			编程语言:
					低级语言:
								机器、汇编
			高级语言:
					编译:高级语言-->编译器-->目标代码
							c、c++
					解释:高级语言-->解释器-->机器代码
							shell,perl,python
3、过程式编程:
			顺序执行:
			循环执行:
			选择执行:
	shell编程:过程式、解释执行
			编程语言的基本结构:
			各种系统命令的组合
			数据存储:变量、数组
					表达式
					语句

二、shell脚本

1、shell脚本:
	包含一些命令或声明,并符合一定格式的文本文件
2、格式要求:首行遵守shebang机制!
			#!/bin/bash
			#!/usr/bin/python
			#!/usr/bin/perl	
3、shell脚本常用的途径:
			自动化常用命令
			执行系统管理和故障排除
			创建简单的应用程序
			处理文本、文件
4、创建shell脚本
	使用文本编辑器来创建文本文件,如:nano、vi、vim等
		首行必须要求声明shell的序列: #!
			!/bin/bash  上面说到的shebang机制
		最好给脚本添加注释以区分是个什么功能的脚本
			注释符号是以#开头
			
		脚本代码开头约定
			1、第一行一般为调用使用的语言
			2、程序名,避免更改文件名为无法找到正确的文件
			3、版本号
			4、更改后的时间
			5、作者相关信息
			6、该程序的作用,及注意事项
			7、最后是各版本的更新简要说明

			#!/bin/bash
			#********************************************************************
			#Author:                 It_luo
			#QQ:                     123456
			#Date:                   2018-08-01-20:59:52
			#FileName:             backup.sh
			#URL:                   http://blog.dklwj.com
			#Description:          The test script
			#Copyright (C):         2018 All rights reserved
			#********************************************************************

		脚本的基本结构
			#!SHEBANG                                    调用使用的语言
			CONFIGURATION_VARIABLES     定义变量值
			FUNCTION_DEFINITIONS	          函数定义
			MAIN_CODE				                           主体
		
		运行脚本
		1、刚创建的文本文件是没有执行权限的,给予执行权限,执行的话指定脚本的绝对或相对路径	
		2、直接运行解释器,将脚本作为解释器程序的参数运行		
			[root@centos6 data]# chmod +x test.sh            #给脚本添加执行权限
			[root@centos6 data]# /data/test.sh                    # 绝对路径执行
			System version CentOS release 6.10 (Final)
			[root@centos6 data]# ./test.sh                           #相对路径执行
			System version CentOS release 6.10 (Final)
			[root@centos6 data]# bash test.sh                    #用shell里的bash解释器,把脚本当成参数的方式运行
			System version CentOS release 6.10 (Final)

三、shell变量

	变量:命令的内存空间

	数据存储方式: ASCII
				字符: 110: 24
				数值: 110 --> 8
							×××
							浮点数	
	变量类型
		作用:
			1、数据存储格式
			2、参与的运算
			3、表示的数据范围
		类型:
			字符
			数值:×××、浮点型
	编程程序语言:
		强类型: 
		弱类型:bash
			把所有要存储的数据统统当作字符进行
			不支持浮点数
	变量命名规范:
		1、不能使程序中的保留字:例如if, for、where等
		2、只能使用数字、字母及下划线,且不能以数字开头
		3、见名知义
		4、统一命名规则:驼峰命名法
				驼峰法又分为两类
					大驼峰
						如:StudentName
					小驼峰
						如:studentName
	变量种类:
		局部变量
			只对当前shell进程有效,对父shell或子shell及其他shell之外的shell进程均无效。
		环境变量
			当前shell及其子shell进程均有效,但对父shell无效
		本地变量
			生效范围为当前shell进程中某代码片断,通常指函数
		位置变量
			$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
		特殊变量
			$?, $0, $*, $@, $#,$$
		局部变量
			变量赋值: 			name='value'
			可以引用的value:
				1、可以是接字串;
							[root@centos6 data]# name="test"
				2、变量引用:	
							[root@centos6 data]# name=test
							[root@centos6 data]# echo "My name is ${name}"
							My name is test
							[root@centos6 data]#
				3、命令引用:
							[root@centos6 data]# name=`hostname`
							[root@centos6 data]# echo "name is ${name}"
							name is centos6
							[root@centos6 data]#
				4、变量引用:${name} $name		
							"  ":弱引用,其中的变量引用会被替换为变量值
											[root@centos6 data]# name=`hostname`
											[root@centos6 data]# echo "name is ${name}"
											name is centos6
							'  ': 强引用,其中的变量引用不会被替换为变量值,而是被当成普通字符串
											[root@centos6 data]# name=cobbler
											[root@centos6 data]# echo 'My name is $name'
											My name is $name