前言

学习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:\bak\"%date%".sql

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

del D:\bak\*.sql

rar.exe a -k -r -s -ml D:\bak\"%date%"\htdocs.rar D:\work\PHPnow\htdocs

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

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

缺点:

1)不是root用户执行不了

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

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

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

清空日志的三种方法

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

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脚本的时候,内核会根据它来确定该用哪个程序来解释脚本中的内容,这一行必须在脚本顶端的第一行,如果不是第一行则为注释。

 #!/bin/bash

 echo "test start"

 #!/bin/bash

 #!/bin/sh

 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脚本中内容。

【Shell脚本编程系列】知识储备以及建立规范的脚本的更多相关文章

  1. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

  2. (C#)Windows Shell 外壳编程系列8 - 同后缀名不同图标?

    原文 (C#)Windows Shell 外壳编程系列8 - 同后缀名不同图标? (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳 ...

  3. (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示

    原文 (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows She ...

  4. (C#)Windows Shell 外壳编程系列7 - ContextMenu 注册文件右键菜单

    原文 (C#)Windows Shell 外壳编程系列7 - ContextMenu 注册文件右键菜单 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windo ...

  5. (C#)Windows Shell 外壳编程系列6 - 执行

    原文(C#)Windows Shell 外壳编程系列6 - 执行 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列5 - ...

  6. (C#)Windows Shell 外壳编程系列5 - 获取图标

    (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令 有 ...

  7. (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令

    (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单 上一节说到如 ...

  8. (C#)Windows Shell 外壳编程系列2 - 解释,从“桌面”开始展开

    (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一篇:(C#)Windows Shell 外壳编程系列1 - 基础,浏览一个文件夹 让我们详细解释一下 Shell 编程中最基本 ...

  9. (C#)Windows Shell 外壳编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单

    (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列2 - 解释,从“桌面”开始展开 这里解释上一节中获取名称的方法 GetD ...

随机推荐

  1. nodejs基础 -- express框架

    Node.js Express 框架 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP ...

  2. WAS启动报错Service failed to start. startServer return code = -1

    http://www-01.ibm.com/support/docview.wss?uid=swg21368020 Problem(Abstract) Attempts to start IBM We ...

  3. Saltstack配置管理

    制作简单初始化模块(在minion主机安装软件): 1.定义master配置文件file_roots [root@localhost~]# cat /etc/salt/master file_root ...

  4. 非常酷的CSS3垂直下拉动画菜单

    昨天我向大家介绍了一款兼容性不错的jQuery淡入淡出下拉菜单,今天要分享一款相对绚丽的CSS3垂直下拉动画菜单,不过需要支持CSS3的浏览器才能有效果.下面是效果图,一起看看. 我们也可以在这里查看 ...

  5. 阿里云Redis开发规范[转]

    一.键值设计 1. key名设计 (1)[建议]: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id ugc:video:1 (2)[建议]:简洁性 ...

  6. Linux-centos6.8下关闭防火墙

    一.临时关闭防火墙 1. 查看防火墙的状态 [root@vpnSS ~]# /etc/init.d/iptables status Table: filter Chain INPUT (policy ...

  7. iOS: 定义 Block

    定义 typedef void (^RFAudioBasicBlock) (void); typedef void (^RFAudioSuccessBlock) (BOOL flag); typede ...

  8. SOAP消息头的处理

    SOAP消息头的处理 WebService学习总结(四)——调用第三方提供的webService服务 SOAP中 RPC/ENC 为啥被抛弃

  9. android studio怎么导入appcompat-v7

    方法1: 在项目的build.gradle文件里,用传统的自动依赖处理方式:compile ‘com.Android.support:appcompat-v7:+’,然后rebuild就可以了. 方法 ...

  10. 使用 CGContextRef 进行简单内容绘制

    摘要 : CGContextRef 功能强大,我们借助它可以画各种图形.这里所举例子只是简单内容绘制,冰山一角,对此感兴趣的朋友可以举一反三,实现各种酷炫效果. 效果如下: KMDrawView.h ...