初识shell脚本编程

shell的编程三种分类方式介绍,如何使用nano命令编写一个脚本命令,及脚本命令运行的2种方式。bash的配置文件及系统启动时加载配置文件的顺序流程

shell脚本编程三种分类方式:

1、编译语言的分类:

目前常见的编程有两种一种是编译运行,将源代码通过编译器编译成系统可读的语言。由于此种方式,出现错误不便于修复处理,后来便出现了第二种带有项目管理程序的解释运行方式,他能够将一个完整的程序的所有代码放置在多个可执行文件中,方便了以后的修复和编译。

  • 编辑运行: 源代码需要用编译器转换成系统可执行的二进制程序文件,运行程序时可直接运行无需编译器。(例如C语言是通过调用函数库中或类库中的函数进行编译,运行时无需调用外部程序)
  • 解释运行: 源代码运行时启动一个(解释器程序)由解释器检查通篇检查完代码以后,边解释边运行。(例如脚本编程是完全借助于外部程序进行编程的。)

区别:

  • [x] 编译运行:运行时效率更高,尤其是早起电脑性能底下式。
  • [x] 解释运行:有项目管理程序,能够将完整的程序代码放置在多个文件中,方便程序的出错时进行编译。

2、编程过程中功能分类:

  • shell脚本编程: 利用系统的命令及编程组件进行编程。
  • 完整编程: 并不需要系统中事先存在的某种编译语言。而是根据自己库中的编程组件进行编译。

区别:

  • [x] shell脚本编程:需要调用外部的系统中的命令及编程组件进行编程。
  • [x] 完整编程:无需调用系统中的某种编译语言。二审根据自己裤子的

3、编程模型分类:

过程编译语言。面向对象的编译语言。 程序=指令+数据

  • 过程式: 以指令为中心来组织代码,数据是服务于代码
    • 顺序执行:按命令行至上而下逐行运行。
    • 选着执行:只执行一个程序中某一段代码其中的一部分。
    • 循环执行:把循环体中的代码,反复执行多遍。
  • 对象式: 以数据为中心来组织代码,围绕数据来组织指令。

区别:

  • [x] 过程式:代表C,bash是面向过程的。
  • [x] 对象式:要事先生成数个对象,每一个对象就相当于是一种特性的数据类型。(或特定的数据模式)编程前要实现编程许多的class(类:被可实例化的对象组成) 代表有 java,C++,pythom。
shell脚本编程:过程式编程,解释运行是依赖于外部程序文件来运行。

如何编写shell脚本:

脚本的第一行,需要顶格写出shebang(解释器的路径),用于指明需要调用的解释执行当前脚本的解释器程序文件。

常见的解释器:

  • bash:—路径位置 #!/bin/bash
  • python:路径位置 #!/usr/bin/python
  • perl:— 路径位置 #!/usr/bin/perl

linux按编译界面可分为两类:

  • 行编译器:sed
  • 全屏幕编译器:nano、vi、vim

编译器注意:

  • [x] 命令行运行时如果出错可以直观查看。
  • [x] 在脚本中,一旦出现一个命令错误便会终止异常退出。现实中很多命令都不是幂等性的,以免运行中不幂等性程序终止。这里就需要选着执行、循环执行、顺序执行。
  • [x] 并不是每个shell脚本执行出错都会退出除非exit命令或者写入的某种判断机制退出。(语法错误也会退出的)
    不幂等性:就是命令不可重复执行,如果重复执行便会报错。例如useradd、mkdir、
    幂等性:命令可以重复执行,例如echo、ls、mktemp、date、

编写shell命令:nano

如果编写对象存在会直接打开,如果存在便创建然后打开。

写脚本示例:

1、创建一个/tmp/fstab

image

2、编辑内容 创建用户centos 显示系统时间 按ctrl+o(保存) ,ctrl+x(退出)

image

3、执行2遍查看返回值

useradd是非幂等性–多次执行报错
date则是幂等性–可执行多次

image

shell脚本是什么?

:是由多个执行单一操作的命令组合堆积在一起。由于很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足,以免其运行中发生错误。

运行脚本:

(1) 赋权执行权限,并直接运行此程序文件。 * chmod +x /PATH/TO/SCRIPT_FILE

  • /PATH/TO/SCRIP_FILE

(2) 直接运行解释器,将脚本命令参数传递给解释器。 * bash /PATH/TO/SCRIPT_FILE

区别:

  • [x] 赋权执行需要在脚本中首行顶头位几个字节来判断文本类型。由标准格式#!后面指定的解释器执行每行代码。需要事前给与文本指定执行用户的权限。
  • [x] 直接运行解释器无需在脚本中首行输入指定的解释器,是将编写的脚本当作bash的参数来运行。也无需运行文本权限。

注意:

  • [x] shell脚本中的一行的空格会被忽略,如果想要加入空格可在空格的上一行键入echo即可。
  • [x] #号开头的文字都会被认定为注视行被忽略。
  • [x] shell脚本的运行是通过一个bash的子shell进程来实现的。

示例 :直接运行解释

打开一个脚本文件 Notes. sh

image

编辑界面注意首行没有指定外部的解释器。每句下面一行都留有空格行还有最后一句的#号

image

验证了# 、于空白行都被忽略了

image

示例 : 赋权执行权限

创建文件Ga. sh

image

编辑命令首行输入标准格式

image

授权给文件执行权限并退出系统

image

重新登陆查看效果

image


bash的配置文件:

由于bash的特性避免bash的声明周期结束时,配置文件也同时随之结束。可以通过将bash写入配置文件中来突破生命周期。bash的配置文件分为量两类:

  • profile类:为交互式登录的shell的进程提供配置。
  • bashrc 类:非交互式登录的shell的进程提供配置。

登录类型:

  • 交互式登录的shell进程:
    • 直接登录console、pst、tty、ttys、任意一种终端输入账号和密码后登录打开的shell进程,
    • 使用su命令:su USERNAME 或 su – USERNAME(登录式)执行切换。
  • 非交互式登录shell进程:
    • su SUERNAME执行的用户登录切换。
    • 图形界面下打开的终端
    • 运行脚本。

profile类文件:

Cento 系统把很多的配置文件切割成主配置文件和配置文件放置在.d 或者.sh文件中,

全局配置: 对所有用户有效。 /etc/profile /etc/profile.d/*.sh

用户个人: 仅对当前用户有效 * ~/.bans_profile

~:表示家目录

功用:

  • 1、用来定义环境变量,【将配置文件定义到profile下,每次运行时都打开】
  • 2、运行命令或脚本,【也是通过profile】

bashrc类型:

用于定义本地变量和命令别名

全局: * /etc/bansrc

用户个人: * ~/.bashrc

~:表示家目录

功用:

  • 1、定义本地变量。在bansrc内,
  • 2、定义别名。

shell进程加载配置流程图:

image

image

注意:

  • 仅有管理员有权限修改全局配置文件。
  • 当前用户编写的脚本不会立即生效需,只有在下次用户登陆进程才有效。
  • 为了方便日后对脚本的管理,可以在文件特定的文件内新建一个以sh结尾的配置文件。

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90078

(0)
N28_刚好遇到小熊猫N28_刚好遇到小熊猫
上一篇 2017-12-14
下一篇 2017-12-15

相关推荐

  • class15磁盘管理(二) 高级磁盘管理(一)

    挂载点和/etc/fstab 配置文件系统体系 被mount、fsck和其它程序使用 系统重启时保留文件系统体系 可以在设备栏使用文件系统卷标 使用mount -a命令挂载  /etc/fstab 中的所有文件系统 文件挂载配置文件 /etc/fstab每行定义一个要挂载的文件系统;   &nbsp…

    Linux干货 2016-09-05
  • 正则表达式之初体验

    学习正则表达式之前,看过这复杂的表达式,犹如天书,无比高大上;怀着战战兢兢的心情,开始了学习之旅: 一、  正则表达式:Global search REgular expression and Print out the line. 我的理解是:通过一大堆符号组成的公式逐行查找文本中匹配的字符串并显示出来  分类: &…

    Linux干货 2015-03-31
  • shell脚本的一点补充

    脚本内容补充 数组 变量:存储单个元素的内存空间数组:存储多个元素的连续的内存空间,相当于多个变量的集合。 数组名和索引 索引:编号从0开始,属于数值索引注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持。bash的数组支持稀疏格式(索引不连续) 数组的使用 声明数组: declare -a ARRAY_NAME…

    Linux干货 2016-08-24
  • 企业实时同步方案—-Sersync介绍

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1433109 Sersync 项目利用 Inotify 和 Rsync 技术实现对服务器数据实时同步的解决方案,其中 Inotify 用于监控 Sersync…

    Linux干货 2016-08-15
  • grep基本正则表达式以及扩展正则表达式

    基本正则表达式: grep:Globel serach REgular expression and print out the line 作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行 模式:由正则表达式的元字符及文本字符所编写出的过滤条件 grep选项:       &nbs…

    Linux干货 2016-08-08
  • 基于iptables mangle的lvs && lvs的持久连接

    一、lvs-dr类型:也称direct routing,简称为g(gatewaying);配置lvs-dr基于iptables mangle的实现方式  实验图:  地址规划:    VIP: 172.16.2.100    DIP: 172.16.2.13    RIP1:17…

    Linux干货 2015-06-30