程序:什么是程序
- 程序是指令加数据来组合来完成
- 真正关心的是对数据的处理,通过指令对数据的操作
- 程序编程风格
- 在程序的编程风格中主流的有两种
- 一种为过程式的
- 还有一种为面向对象式的
- 面向过程就是以指令为中心,数据服务于指令
- 我们关心的是对指令的操作
- 你象早期的语言,什么C语言,C++等语言一般关注的是过程
- 过程式的开发语言,程序员都在关注整个程序运行的流程,所以头脑要对整个过程非常清楚
- 一般的小程序用过程式的语言来开发是非常适合的
- 所以过程式的语言一般用于小程序
- 对象式是以数据中心,指令服从于数据
- 正好和过程式语言相反,一般用于大型的项目
- 对象式需要的是一个团队,你面对的是一个团队,每个人分工合作,你来管理就好了,所以对象式只需要结果不需要流程,也可以理解为程式的升级版
程序的执行方式 - 在计算机里面运行方式是基于二进制,但是我们编代码不是用的二进制哦
- 所以我们有专用的编程语言
- 低级一点的就以汇编语言
- 汇编语言写起来也是很痛苦的,不不过用因为来代替了数字,这里就不详细说汇编了
- 高级语言的编译型语言有java、c#
- 高级解释性语言就是我们的shell .perl.python
- 所以对我们老外来说编程对他们很简单啊
- 童鞋们我们想学好shell,可能有点难啊
- 但是万事只有开头难啊,让我们来一起加油吧
bash基础
什么是shell
- 说起bash ,那我们先说说shell
- shell 是一个命令解释器,他的作用是解释执行用户的输入的命令已经程序
- 用户每一条命令,shell 就解释一条
- 这种从键盘输入一条,他就可以立即得到回应的,对话方式,称为交互方式
-shell 在操作系统的最外层,负责直接与用户对话,把用户输入的信息解释给操作系统 - 并把处理各种各样的操作系统的输出结果,然后输出到屏幕上返回给用户
- 用简单点shell就是应该翻译员,他专帮我们和计算机进行交流
- shell种类很多如:
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
- 这是我linux 系统里面的shell类型
- 这篇我们说的是bash ,好了不了啰嗦了开始吧
编程基础
程序 = 指令+数据
- 每个程序都是以指令发出以后在来处理数据,数据才是我在最重要的
- 那比如说
vim
他的程序组成部分就是指令加数据 - 程序编程风格主要就分为两种
- 过程式:以指令为中心,数据服务于指令
- 对象式:以数据为中心,指令服务于数据
- 过程式比如象以前的,C语言,C++,等等语言,那些语言开发的时候关注的都是过程,过程式象做一个项目都要,画流程图的,第一步要干什么,第二步以此类推,这个项目怎么去走,怎么去开发,有可能还会绕回来,等等流程,过程式语言一般适用于小程序,就是过程式
- 对象式一般针对于非常大的项目,需要一个很大的团队,来分工合作,分队,需要好好的管理,只要结果不要流程,只不过是过程式的一种升级版罢了
程序的执行方式
- 计算机:运行二进制指令
- 大家都知道在计算机里面他的指令运行方式都是基于二进制的
- 但是写脚本不是写二进制哦
- 编程语言:
- 低级语言:汇编
中间语言:C语言
高级语言:编译类:java,c#等===解释类:shell,python,perl等
shell脚本基础
什么是shell脚本,说简单他就是一个文本文件,不过你要跟他要求的格式来编写脚本,也可以说是带一定格式要求的文本文件
格式要求
- 首行必须要求带有shebang机制
#!bin/bash
#! /usr/bin/python
#!/usr/bin/perl
脚本的基本结构
#!SHEBANG
CONFIGURATION_VARIABLES < :变量定义
FUNCTION_DEFINITIONS < :函数定义
MAIN_CODE < : 主要代码
脚本规范
- 代码开头约定
- 1,第一行shebang机制
- 2,注释,程序名,文件名:以#号开头为注释
- 3, 版本号
- 4,更改后,写上更改时间
- 5,作者名
- 6,相关程序作用
编程基本概念
- 编程的逻辑处理方式有以下几个方式
- 顺序 执行
- 循环执行
- 选择执行
编程语言的基本结构
- 各种系统命令的组合
- 数据存储
- 变量
- 数组
- 表达式
- 语句
shell脚本基础
- 他就是一个文本文件,也可以说他是带一定特殊要求的文件,一定格式的文本文件,在格式里面强调了第一行需要
shebang
机制 - 格式要求:首行shebang机制
- ` #!bin/bash
- `#!/usr/bin/python
- `#!/usr/bin/perl
- 如果你用bash写的那你的第一行一定要用bash机制
- 如果你用python写的那你的机制一定要用pyehon机制等等
- shell类型很多种如:
[root@localhost etc]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
我们可以用
cat /etc/shell
来查系统里面的shell类型我们用bash写的那我们就要用bash机制来开头
如果我们来写脚本
写脚本我们一般都是用的VIM编辑器,编程的文件一般以·
.sh
结尾如:hello.sh
那我们来写个脚本
[root@localhost bin]# vi hello.sh
#!/bin/bash
name=hello
echo $name
上面是个小脚本运行下就可以输出hello
上面的一个小脚本是以bash的机制来编写的,用的是VIM编辑器,所以才会显示颜色,
脚本的规范
第一行一般为调用使用的语言
第二行为程序名,也就是注释
第三行为版本号
第四行为更换后的时间
第五行为作者的相关信息
第六行为该脚本的作用和,注意事项
第七行为各种版本的更新简要和说明
以上说的只是一种规范
当然每个人的性格,和环境不同,也有可能写的脚本风格都不同,但是最后还是写出来的脚本让人看的懂,简单明了,这才是脚本的最终境界,呵呵这只是对于我来说的目的,大家的志向可能更高,好了不啰嗦了,我们继续
shell脚本基础
- shell脚本的用途有以下:
- 自动化常用命令
- 执行系统管理和故障排除
- 创建简单的应用程序
- 处理文本或文件
shell脚本示例
#!/bin/bash
#=========================================
#Filename:hello.sh
#Revision:1.0
#Date:2017/XX/XX
#Author:XXXX
#Email:XXXX@gmail.com
#Website:www.XXXX.com
#Description:This is the first script
#=========================================
#Copyright:2017 XXXX
#LIcense:GPL
echo"hello world"
脚本调试
- 检查脚本中的语法错误:
- bash在复杂一点的脚本中,程序在运行中可能会有点小错误
- 我们可以用bash的语法来做一些检查如以下:
[root@localhost etc]# bash -n /path/to/some_script
- 用他可以直接查出语法错误等错误
- -n 只是执行语法,但是不执行
bash -x /path/to/some_script
- -x他不但检查语法,他还执行
- 并且还显示你每天命令执行的结果是什么
- 还有执行的过程
变量
- 那什么是变量,变量就是一个内存空间,里面存放这的一串字符串
变量:命名的内存空间
- 数据存储方式有以下:
- 字符:也就是字符串
- 数值:整形,浮点型
变量:变量的类型
- 作用:以下
- 1,数据存储格式
- 2,参与的运算
- 3,表示的数据范围
类型:
- 字符类
- 数据:整形,浮点型
强类型
- 变量不经过强制转换,它永远是这个数据类型,不允许隐式的类型转换。
- 一般定义变量时必须指定类型,参与运算必须符合类型要求
- 调用未声明变量会产生错误:如,java或C#
弱类型
- 语言的运行时会隐式做数据型转换,无须指定类型
- 默认均未字符型,参与运算会自动进行隐式类型转换
- 变量无须事先定意思可直接调用
- bash 不支持浮点数,php,也就是说bash不支持小数运算只支持整数运算
变量命令法则
- 1,不能使用程序中的保留字:例如
if`` for
- 2,只能使用数字,字母及下划线,且不能以数字开头
- 3,见名知义单独
- 4,统一命令规则:驼峰命令法
- 这里来解释下什么是驼峰命名法
- 驼峰命名法就是你到某个公司或企业去了,因为每个公司或企业他们都有一套命名的体系
- 所以跟着他们的命名法则来编写,不要一个人唱单独戏
- 还有一个意思就是大驼峰命名法就是第一个字母为大写其他都是小写
- 小驼峰命令法就是第一个为小写后面都为大写
- 这就是每个公司的风格了
bsh中的变量种类 - 根据变量的生效范围等标准有以下几种:
- 本地变量:生效范围为当前shell进程,对当前shell之外的其他shell进程,包括当前shell的子进程均无效
- 环境变量:生效范围为当前shell,已经其子进程
- 局部变量:生效范围为当前shell进程中某代码片段(通常指函数)
- 位置变量:$1,$2......来表示,用于让脚本在脚本代码中调用通过命令行传递给他的参数
- 特殊变量:$?,$0,$*,$@,$#.$$
- 以下在给大家详细解释以上等变量
本地变量
- 本地变量是默认的变量的类型
- 他的特点是我定义完的变量以后,只能自己使用不能给别人使用,包括子进程
- 本地变量你使用于当前shell,
本地变量声明和赋值:
变量赋值:
name=`calue`
可以使用和引用value:
1,可以是直接的字符串;name=""root"
2,变量引用:name="$USER"
3,命令引用:name=`COMMAND` name=$(COMMAND)
变量引用:${name} $name
"""":弱引用,其中的变量引用会被替换为变量值
'':强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所以变量:`set`命令
删除变量:unset name
环境变量
- 环境变量的作用就是生效当前的shell,以及子进程
- 想要本地变量变成环境变量方法就是,加个
export
后面接变量 - 环境变量还可以一级一级的传下去,但是不能网上传,只能自己用和继承
- 有一个命令可以来查看环境变量
env
里面全是系统自带的环境变量
环境变量声明和赋值:
export name=VALUE
declare -x name=VALUE
变量引用:
$name,${name}
显示所有环境变量:
env
printenv
export
declare -x
删除变量:
unset name
bash内建的环境变量:
echo $PATH 查看系统当前shell
echo $SHELL 查看系统shell类
echo $USER 查看系统当前用户
echo $UID 查看用户UID
echo $HOME 查看当前用户
echo $PWD 查看当前路径
echo $SHLVL
echo $LANG
echo $MAIL
echo $HOSTNAME
echo $HISTSIZE
echo $-
echo $$
只读和位置变量
什么是只读变量,说白了就是常量
就是固定不变的,常量也称为只读性变量
只读变量:只能声明,但不能修改和删除
声明只读变量
readonly name
declare -r name
查看只读变量
readonly -p
f位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1 ,$2,..........:对应第1,第2等参数,sheift[n] 换位置
$0 :命令本身
$* :传递给脚本的所有参数,全部参数合为一个字符串
$@ :传递给脚本的所有参数,每个参数为独立的字符串
$# : 传递给脚本的参数的个数
$@ $* 只在被双引号包起来的时候才会有差异
set ----- 清空所有位置变量