shell脚本编程基础一部分

程序:什么是程序

  • 程序是指令加数据来组合来完成
  • 真正关心的是对数据的处理,通过指令对数据的操作
  • 程序编程风格
  • 在程序的编程风格中主流的有两种
  • 一种为过程式的
  • 还有一种为面向对象式的
  • 面向过程就是以指令为中心,数据服务于指令
  • 我们关心的是对指令的操作
  • 你象早期的语言,什么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 ----- 清空所有位置变量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容