• 【Shell脚本编程系列】知识储备以及建立规范的脚本


    前言

    学习shell脚本编程需要的知识储备:

    vi/vim编辑器命令 vimrc设置要熟练

    基础命令,100多个要熟练

    基础和常用的网络服务命令要会:nfs 、 rsync、 inotify 、 lanmp 、 sersync  、ssh  key

    一、shell脚本概念及示例

    1、什么是shell

    Shell是一个命令解释器,它在操作吸引的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户。这种对话方式可以是交互的方式(从键盘输入命令立即得到Shell的回应),或非交互(脚本)的方式。

    2、什么是Shell脚本

    当命令或语句不在命令行执行,而是通过一个程序文件执行时,该程序就被称为Shell脚本或Shell程序,Shell程序很类似DOS系统下的批处理程序(*.bat)。用户可以在shell脚本中敲入一系列的命令或命令语句、这些命令、变量和流程控制语句等有机的结合起来就形成了一个功能强大的shell脚本。

    windows下利用批处理程序bat开发的备份网站及数据库的脚本。

    @echo off

    set date=%date:~0,4%-%date:~5,2%-%date:~8,2%

    mysqldump -uroot -poldboy -A -B > D:ak"%date%".sql

    rar.exe a -k -r -s -ml D:ak"%date%".sql.rar D:ak"%date%".sql

    del D:ak*.sql

    rar.exe a -k -r -s -ml D:ak"%date%"htdocs.rar D:workPHPnowhtdocs

    范例一、清除/var/log下message日志文件的简单命令文件

    1 #把所有命令放在一个文件里堆积起来就形成了脚本,下面是一个简单的命令形成的shell脚本
    2 #要使用root身份来运行这个脚本
    3 清除日志脚本,版本1
    4 cd /var/log
    5 cat /dev/null > messages
    6 echo "Logs cleaned up."
    7 提示:/var/log/messages是系统的日志文件,很重要

    缺点:

    1)不是root用户执行不了

    2)没有流程控制,没有逻辑性。

    范例二、包括命令、变量和流程控制语句的清除/var/log 下message日志的脚本

     1 #!/bin/bash
     2 #清除日志脚本,版本2
     3 LOG_DIR=/var/log
     4 ROOT_UID=0 #$uid为0的时候,用户才具有root用户的权限
     5 #要使用root用户来运行
     6 if ["$UID" -ne "$ROOT_UID"]
     7 then
     8 echo "Must be root to run this script . "
     9 exit 1
    10 fi
    11 cd $LOG_DIR || { #如果cd没有执行成功就执行大括号中的内容
    12 echo "Cannot change to nessarg directory " >&2
    13 exit 1
    14 }
    15 cat /dev/null > messages
    16 echo "Logs cleaned up"
    17 exit 0
    18 #退出之前0表示成功,返回1表示失败

    清空日志的三种方法

    1 echo >test.log #输入空的内容
    2 >test.log
    3 cat /dev/null > test.log #查看黑洞,将黑洞重定向到文件
    4 应用:保留文件,清空内容

    3、Shell程序在运维工作中的作用地位

    Shell脚本很擅长处理纯文本类型的数据,而linux中几乎所有的配置文件、日志文件(如nfs 、rsync、httpd、nginx、lvs等)都是纯文本类型的文件,因此,如果学好Shell脚本语言,就可以利用它在Linux系统中发挥巨大的作用

    下面是Shell脚本在运维工作中的作用地位形象图:

    4、脚本语言的种类

    1)shell脚本语言的种类

    unix/linux中主要有两大类shell

    Bourse shell(sh ksh bash)

    Bourne shell (sh)

    Korn shell(ksh)

    Bourne Again shell(bash)

    POSIX shell (sh)

    C shell(csh tcsh)

    C shell (csh)

    TENEX/TOPS C shell (tcsh)

    Shell脚本语言是弱类型语言,较为通用的shell有标准的Bourne shell 和C shell。其中Bourne shell已经被bash shell取代。

    2)Shell脚本与php,perl、python语言的差别?

    shell的优势在于处理操作系统底层的业务。可以结合大量的linux命令和函数来执行。一键安装、报警脚本、常规的业务应用,shell开发更简单快速。

    php,python优势在于开发运维工具,web界面的管理工具。

    5、常用操作系统的默认shell

    linux/是Bourne Again shell(bash)

    Solaris和FreeBSD缺省的是Bourse shell(sh)

    AIX下是Korn Shell(ksh)

    HP-UX缺省的是POSIX shell(sh)

    Centos linux中的shell类型是(bash)

    查看方式:1.echo $SHELL

    2、grep root /etc/passwd

     二、建立规范的shell脚本

    shell脚本的建立:

    shell脚本通常是在编辑器(vi vim)中编写,由Unix/Linux命令、bash shell命令、程序结构控制语句和注释内容组成

    脚本开头(第一行)

    一个规范的shell脚本的第一行会指出程序(解析器)来执行脚本中的内容,在linux bash编程中一般为:

    #!/bin/bash 或者#!/bin/sh

    #!又称为幻数,在执行bash脚本的时候,内核会根据它来确定该用哪个程序来解释脚本中的内容,这一行必须在脚本顶端的第一行,如果不是第一行则为注释。

    1 #!/bin/bash
    2 
    3 echo "test start"
    4 
    5 #!/bin/bash
    6 
    7 #!/bin/sh
    8 
    9 echo "test end"

    以下为linux中常用脚本语言开头的编码写法,不同语言脚本的开头一般都要加上如下相应语言的标识内容:

    • #!/bin/sh
    • #!/bin/bash
    • #!/usr/bin/awk
    • #!/bin/sed
    • #!/usr/bin/tcl
    • #!/usr/bin/expect
    • #!/usr/bin/perl
    • #!/usr/bin/env python

    如果脚本抬头不指定解释器,那么,就要用对应的解释器来执行脚本,例如:bash test.sh

    脚本注释

    shell脚本中,跟在(#)后面内容表示注释,用来对脚本进行注释说明,注释部分不会被执行,仅仅是给人看的,注释可自成一行,也可以跟在脚本命令后面与命令同在一行,开发脚本时,如果没有注释,其他人就很难理解脚本究竟在做什么,时间久了自己也会忘记。

    shell脚本的执行:

    shell脚本以非交互的方式运行时,它会先查找环境变量ENV,该变量指定了一个环境变量(通常是.bashrc)然后从环境变量文件开始执行,当读取了ENV文件后,SHELL才开始执行shell脚本中内容。

  • 相关阅读:
    Web Api系列教程第2季(OData篇)(一)——OData简介和一个小应用
    漫步ASP.NET MVC的处理管线
    使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【十】——使用CacheCow和ETag缓存资源
    工具分享——将C#文档注释生成.chm帮助文档
    使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【外传】——Attribute Routing
    使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【九】——API变了,客户端怎么办?
    使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【八】——Web Api的安全性
    C#基础——谈谈.NET异步编程的演变史
    使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【七】——实现资源的分页
    使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【六】——实现资源间的关联
  • 原文地址:https://www.cnblogs.com/dream-to-pku/p/7753448.html
Copyright © 2020-2023  润新知