开发者学堂课程【Linux Shell 编程入门与实战:Shell脚本编程基础|学习笔记】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/551/detail/7625
目录:
一、本章内容
二、编程基础
三、程序的执行方式
四、编程基本概念
五、Shell脚本基础
六、创建Shell脚本
七、脚本规范
八、Shell脚本示例
一、本章内容
编程基础:Shell编程类别,特点,与其他语言的区别,如java,C语言
脚本基本格式:Shell编程基本语法
变量
运算(加减乘除运算)
条件测试
配置用户环境:涉及到的相关配置文件
Shell脚本编程基础的实现是将之前学过的:计算机基础知识,Linux基础,文件管理,标准IO和管道,用户组和权限管理,文本处理工具的功能综合起来,去实现更自动化的任务,而非手工执行每条命令去执行部分特殊操作,而是将命令组合起来。
二、编程基础
程序:指令+数据
例: vim f1 其中vim是程序,f1是要修改管理的数据
程序本身没有较大意义,其最主要功能为处理数据
程序编程风格:
过程式:以指令为中心,数据服务于指令(关注过程;程序按预定好的步骤一步一步实现;一般不过于复杂,可以统筹地控制每个流程;C语言是面向过程的语言)
对象式:以数据为中心,指令服务于数据(更适合开发大型软件。举例:如果工程较大,不可能细化到每个步骤,如一些人协作完成的大工程,总负责人把任务下发给工人,只需关注工人而不用关注工人具体做的每一件事,此时关注的是结果而非过程;java,python都是面向对象的语言)
Shell程序:提供了编程能力,解释执行
三、程序的执行方式
计算机:运行二进制指令
编程语言:
低级:汇编
高级:通常情况下使用高级语言
编译:高级语言-->编译器(程序员手工完成)-->目标代码(二进制格式数据)
Java,C#(微软开发语言)
解释:高级语言-->解释器(又称翻译器,计算机自动完成,不需要人工参与,能够直接运行)-->机器代码
Shell,perl,python
计算机只能理解0 1
通过编译与解释两种方法把单词数字等转换为0 1
Shell脚本本质将内部命令与外部命令集合,按顺序执行
四、编程基本概念
编程逻辑处理方式:
顺序执行(按照预先设定的次序执行)
循环执行(把某段代码重复执行多次;如将磁盘上各文件逐个处理,需要用到循环逻辑,循环最总会结束,可能发生循环异常)
选择执行(达到一定条件进行判断)
Shell编程:过程式(只适合管理小程序,可以用于运维工作),解释执行(不安全,只要拿到文本就能理解内容)
编程语言的基本结构:
各种系统命令的组合(将多个命令组合在一起)
数据存储:变量,数组
表达式:a + b
语句:if
例如用shell语句写hello world:
cat > hello.sh echo”hello world”
chmod + x hello.sh //加执行权限
hello.sh 运行程序
报错:
command not found... //找不到外部文件 echo$PATH /
找文件
解决方法:直接输入绝对路径 /data/hello.sh
相对路径 ./hello.sh
显示主机名:echo my hostname is hostname.sh 后缀表示是Shell 程序
Shell编程:将命令按顺序执行
五、shell脚本基础
shell脚本:
包含一些命令或声明,并符合一定格式的文本文件
格式要求:首行shebang机制
解释: echo $SHELL
/bin/bash //该程序帮助把文本内容转化为二进制形式
> f1 //创建空文件,前提需要特定的语法不同设备支持shell语法不同,当写Shell脚本时,需要告诉系统使用的你是哪种Shell语言,即shebang机制
#!/bin/bash
#!/usr/bin/python //用于python
#!/usr/bin/perl //用于perl
标准写法: #!/bin/bash //是程序,不是文件夹。表示下面内容是以bash的shell语言写的。
Shell语言能批量执行命令,按顺序执行。适合运维工程师解决简单的,逐步性的运维工作。
例如:每天的备份;文件的复制;自动化的文本处理等
shell脚本的用途有:
自动化常用命令
执行系统管理和故障排除
创建简单的应用程序
处理文本或文件
(不适合管理复杂的环境)
六、创建shell脚本
第一步:使用文本编辑器来创建文本文件
第一行必须包括shell声明序列:#!
#!/bin/bash
添加注释(增强可读性)
注释以#开头
例如:
#Author:wang
#Data:2018-04-06
#Version:1.0
#Description:The first script
代码比较复杂的情况下,可在代码之前添加注释,解释下面代码的功能
第二步:运行脚本
给予执行权限,在命令上指定脚本的绝对或相对路径
show hostname (执行权限)
另一种运行方式:
bash hello.sh (文件即使没有执行权限也可以运行)
其他方式:
cat hello.sh | bash //只要有标准输出均可实现
cat hello.sh
将该代码内容放到一个网站上:vim/var/www/html/hello.sh
cat/var/www/html/hello.sh
现在访问其地址 192.168.30.128为默认网站 访问192.168.30.128/hello.sh,默认情况下自动下载该文件(hello.sh)
在别的计算机上可用 curl http://192.168.30.128/hello.sh直接显示出该文件内容
执行该文件 curl http://192.168.30.128/hello.sh |bash
实现远程主机的文件在本机执行,该方法可运用在远程调用脚本上。可用该方式将脚本放在远程的机器上,用自己的机器执行。
远程主机的程序在本机执行前提需要搭建共享服务,该内容之后讲解。
例如搭建了个人博客,脚本在个人博客上。
如果需要在某一台机器上运行该脚本,只需访问该路径并bash,不需要将程序下载到本机。
./hello.sh //写上路径;
更加传统的方式;前提要加执行权限
直接运行解释器,将脚本作为解释器程序的参数运行。
七、脚本规范
脚本代码开头约定
1. 第一行一般为调用使用的语言
2. 程序名,避免更改文件名为无法找到正确的文件(尽可能写有含义的英文单词组合,不要使用汉字,汉字接入性较弱,尽量避免使用拼音)
3. 版本号
4. 更改后的事件
5. 作者相关信息
6. 该程序的作用,及注意事项
7. 最后是各版本的更新简要说明
描述信息与更新说明应用注释的形式在Shel程序中写出
八、脚本的基本结构
脚本的基本结构
#!SHEBANG
CONFIGURATION_VARIABLES //变量
FUNCTION_DEFINITIONS //函数
MAIN_CODE //主程序
九、Shell脚本示例
#!/bin/bash
#------------------------
#Filename: hello.sh
#Revision: 1.1
#Date: 2017/06/01
#Author: wang
#Email: wang@gmail.com
#Website: www.magedu.com
#Description: This is the first script
#-----------------------------
#Copyright: 2017 wang
#License: GPl //程序允许修改,但必须一GPI形式发布
echo “hello world”