博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本编程 一
阅读量:7032 次
发布时间:2019-06-28

本文共 1709 字,大约阅读时间需要 5 分钟。

hot3.png

一、概述

    shell 脚本是自动化运维的重要工具,是每个运维人员必备的技能之一。shell 脚本与 DOS 下的批处理相似,就是将一系列命令写入一个或几个文件中,方便的一次执行。同时,shell 脚本还支持循环、条件判断和正则表达式等语法。可以这么说,shell 脚本是优秀的运维人员手中的利器。

二、基本语法

    1.开头

        #!/bin/bash
        每一个 shell 脚本都以 #!/bin/bash 开头,它告诉系统执行这个脚本时所调用的是 bash,bash 也可以换成 csh、sh 等 shell,这要根据执行脚本时 Linux 运行的是哪种 shell(可以使用 cat /etc/shells 来查看系统支持的 shell 类型)来决定。

    2.注释

        #
        好的程序都有简单明了又不冗余的注释,shell 脚本使用 # 来开始一行注释,任何以 # 开头的行都是注释。

一个简单的shell脚本

        脚本的执行可以使用 sh 命令,也可以使用 . 命令,还可以是用脚本直接执行,不过要给脚本执行的权限:chmod +x hello.sh

    3.变量

        shell 脚本中的变量都是字符串组成的,不需要事先声明,当要用到一个变量的时候,直接以 NAME=VALUE 的形式来使用。比如

        变量的引用是由 $ 开始的,如上,引用变量 a,就使用 $a。

        在 shell 脚本中,变量默认都是以字符串形式存储的,比如

        如果要避免这种情况,可以使用 declare 命令来显示声明变量,declare 是 bash 的一个内建函数,使用 -i 选项声明把变量声明成整数,比如

    4.变量类型

        本地变量:作用域为整个 shell 进程
            使用 NAME=VALUE 形式的变量都是本地变量,本地变量从出现的时候开始,在整个 shell 脚本执行的过程中都存在
        局部变量:使用 local 声明,作用域为当前代码段
            局部变量一般出现在函数的内部,为了与外部同名的变量进行区分,使用 local 前缀,表示它只存在于函数执行的过程中,与外部变量无关
        环境变量:使用 export 声明,作用域为当前 shell 进程及其子进程
            环境变量即为 shell 的环境变量
        特殊变量
            特殊变量主要有以下几个:
                $1 $2 ...:$n 表示的是脚本所跟的第 n 个参数,比如

                $?:上一条语句执行的状态返回值。每一条语句的执行都有状态返回值,执行成功返回值是 0,执行不成功返回值是非 0 的,类似 C 语言,比如

执行成功

执行不成功

    5.条件测试

        shell 脚本进行条件测试的方式有三种
            test expression
            [ expression ]
            [[ expression ]]
        其中最常使用的是第二种,这里要注意的一点是,expression 的左右两边都要有一个空格。

    6.测试条件

        整数比较
            -gt:greater than 大于
            -ge:greater than and equal 大于等于
            -lt:小于
            -le:小于等于
            -eq:等于
            -ne:不等于

        字符串比较(ASCII 顺序)

            ==
            >
            <
            -n:测试字符串是否为空
            -z:测试字符串是否不空
        注:字符串变量要加引号

        文件测试

            -e FILE:exist 判断文件是否存在
            -f FILE:file 判断是否是普通文件
            -d FILE:dictionary 判断是否为目录
            -h/-L FILE:是否为符号链接
            -r FILE:当前用户是否有读权限
            -w FILE:当前用户是否有写权限
            -x FILE:当前用户是否有执行权限
            -s FILE:文件大小不为零

    7.逻辑比较

        &&:与
        ||:或
        !:非
    8.组合条件测试
        -a:与
        -o:或
        !:非

    关于逻辑比较和组合条件测试的区别请看着两个表达式:

        if [ $? -gt 1 -a $? -lt 3 ]

        if [ $? -gt 1 ] && [ $? -lt 3 ]

    区别一目了然.

三、总结

    基础部分先说到这里了 ^ ^

转载于:https://my.oschina.net/JerryBaby/blog/214294

你可能感兴趣的文章
如何处理Express异常
查看>>
Cycle.js 状态管理模型
查看>>
[译]Effective Kotlin系列之考虑使用原始类型的数组优化性能(五)
查看>>
为什么我从 Google 辞职而为自己工作
查看>>
技术问答集锦(四)
查看>>
针对虚拟机搭建centos7不能上网问题处理方法
查看>>
React 源码分析
查看>>
JavaScript 算法之复杂度分析
查看>>
第六章——函数(inout参数与变异方法)
查看>>
掘金翻译计划月报 — 2018 年 2 月
查看>>
Android属性动画
查看>>
渐进式Express源码学习5-全副武装
查看>>
JVM难学?那是因为你没认真看完这篇文章
查看>>
python面试题(五)
查看>>
老司机 iOS 周报 #40 | 2018-10-22
查看>>
VirtualView iOS 模板加载功能实现详解
查看>>
这可能是最好的性能优化教程(二)
查看>>
被马化腾点赞的微信车票设计,背后有哪些故事?
查看>>
Spring理论基础-面向切面编程
查看>>
BloomFilter 原理,实现及优化
查看>>