Shell脚本编程(上)

    Shell脚本编程基础

Shell 脚本基础:包含一些命令或声明并符合一定格式的文本文件
Shell 脚本用途:
        1. 自动化常用命令
        2. 执行系统管理和故障排除
        3. 创建简单的应用程序
        4. 处理文本和文件

创建Shell脚本:
        首行的固定写法:
            1. #!/bin/bash      
            2. #!/bin/sh
    注:此行是告诉系统执行的时候要调用什么解释器。如果首行不写,那么执行的时候需要使用命令bash。
脚本写法:
      注释写法:
            #!/bin/bash
            #
            #Filename:XXXX.sh        脚本文件名称
            #Description:xxxx        说明
            #Author:xxxx             作者
            #Email:xxxx@xx.xxx       联系方式
            #Revision:1.0            版本
            #Date:xxxxx              脚本创建日期
            #Note:xxxx               注解
        Shell脚本编程(上)
    注:每一行之前最好有一个注释;脚本名称使用.sh结尾的尽量避免使用中文;#表示注释,此行不执行。
脚本的执行:
        1. bash
        2. sh
        3. 加执行权限
                1) 相对路径
                2) 绝对路径
                3) 放到$PATH变量指定的目录里面,直接执行(tab)
        脚本调试执行:
                bash -n 检查语法错误,不检查拼写错误
                bash -x或sh -x 显示脚本执行的时候每一个命令具体的执行结果

变量:暂时存放数据的地方,一个具有名称的内存地址空间。
    数据存储方式:1. 字符
                             2. 数值: 整形、浮点型
    作用:1. 数据存储格式
              2. 参与的运算
              3.表示的数据范围
    类型:
          强类型(如 JAVA C#):数值型和字符型不能直接计算,除非显示把字符型转换成数值型。

          弱类型(如 shell php):不会严格区分变量类型,定义变量的时候不用指定变量类型,默认字符型,如果想要计算的时候会自动帮你转换成数值型。
变量的命名规则:
        1.不能使用if for bash cd ls date 关键字
        2.不能以数字开头,不能使用特殊符号,只能使用数字、字母及下划线
        3.见名知意:看见名字知道此文件的意义
        4.建议变量使用大写
bash变量的种类:
        本地变量(全局变量)  仅仅对当前shell生效
        环境变量    对当前shell以及其他shell都生效 export
        局部变量(私有变量)  生效范围位当前shell进程中某代码片段,通常用在函数里面,使用local
本地变量:name=’value’
可以使用引用value:
        1.可以是直接字串:name=”root”
        2.变量引用:name=”$USER”
        3.命令引用:name=COMMAND  name=$(COMMAND)
变量引用:${name} $name
        ” ” :弱引用  会把双引号里面的变量替换
        ‘ ‘  :强引用  不会把引号里面的变量进行替换
        “ : 把反引号里面的命令执行结果赋值给变量
显示已定义的所有变量: set
删除变量: unset name
    注:取消变量和变量置空是两种不同概念 unset HZ  
                                                                  HZ=   

环境变量:
    变量声明、赋值:
            export name=VALUE
            declare -x name=VALUE
    变量引用: $name, ${name}
    显示所有环境变量:
            env, pringtenv, export, declare -x ,set
    删除: unset name 
    bash有许多内建的环境变量: 
            $PATH 命令的搜寻路径
            $OLDPWD 前一个工作目录
            $LANG 目前的工作语系
            $BASH bash的完整路径名
            $BASH_VERSION Bash的版本
            $HISTCONTROL 控制指令是否存入历史文件中
            $OSTYPE 显示系统类型
            $MAIL 存放邮件的文件
            $MAILCHECK 多久检查一下邮件 
            $PWD 当前路径
            $SSH_tty 当前登录的tty
            $SHLVL 当前shell在几层
            $RANDOM 随机数
只读变量:只能声明,但不能修改和删除
    声明只读变量:readonly name
                            declare -r name
    查看只读变量: readonly -p
位置变量: 在脚本代码中调用通过命令行传递给脚本的参数
        $1,$2,…: 对应第1、第2等参数,shift [n]换位置
        $0: 命令本身
        $*: 传递给脚本的所有参数,全部参数合为一个字符串
        $@: 传递给脚本的所有参数,每个参数为独立字符串。如”$@”用「”」括起来的情况、以”$1″ “$2” … “$n” 的形式输出所有参数。
        $#: 传递给脚本的参数的个数
        注:$@、$*只在被双引号包起来的时候才会有差异
        set — 清空所有位置变量
算数运算

        1. let num=算数表达式 let r=9+9

Shell脚本编程(上)

        2. var=$[算数表达式] r=$[9+9]

Shell脚本编程(上)

        3. var=$((算数表达式)) r=$((9+9))

Shell脚本编程(上)

        4. expr 8 + 3 (注意要有空格!!!)

Shell脚本编程(上)

        5. declare -i   r=9+9

Shell脚本编程(上)

         6. bc   计算1-100的和:echo {1..100} | tr ” ” “+” | bc

Shell脚本编程(上)

        注: expr 8 * 8 乘号需要用\转义,除号不用

    +=,  i+=3等于i=i+3 
    -=,  i-=3等于i=i-3
    =,  i=3等于i=i*3
    /=,  i/=3等于i=i/3
    %=,  i%=3等于i=i%3
   
    i++  先执行 执行完加1 (用的比较多)

    ++i  先加1,再执行

Shell脚本编程(上)

逻辑运算
        true 1   false 0

        1 与 1 = 1
        1 与 0 = 0
        0 与 1 = 0
        0 与 0 = 0

        1 或 1 = 1
        1 或 0 = 1 
        0 或 1 = 1
        0 或 0 = 0

        与的时候 只要有一个为假 那么整个结果就是假的。
        或的时候 只要有一个为真 那么整个结果就是真。

        !1 = 0
        !0 = 1

        && 与
        || 或

        1 && 1 = 1
        1 && 0 = 0
        1 || 1 = 1
        1 || 0 = 1

        命令执行成功 我们认为是真 
        命令执行失败 我们认为是假

短路预算:

        命令1 && 命令2  

        命令1 成功执行 则执行命令2

        命令1 执行失败 则不会执行命令2

        命令1 || 命令2  

        命令1成功执行,则命令2不执行

        命令1执行失败,则命令2执行

        命令1 && 命令2 || 命令3
        如果命令1 成功执行 则执行命令2 且命令3不会执行
        如果命令1 执行失败 那么命令2就不会执行,则命令3执行
 
        如果  命令1 成功
         则    命令2;
        否则  命令3;
退出状态
       使用$?  0代表前面一个命令执行成功
                    非0 代表前面一个命令执行失败
                    可以在脚本里面自定义退出状态

        根据退出状态来判断一个命令的执行成功与否

    exit [n]:自定义退出状态码
        注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
        注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码

测试条件
        test  测试条件
        [ 测试条件 ]
        [[ 测试条件 ]] 条件测试的前后要加上空格
                 生产环境建议使用两个中括号

   
数值测试:
        -gt: 是否大于
        -ge: 是否大于等于
        -eq: 是否等于
        -ne: 是否不等于
        -lt: 是否小于
        -le: 是否小于等于

    [[ 6 > 2 ]] && echo “OK”

字符串测试
        == 是否等于
        >  是否大于
        <  是否小于
        != 是否不等于
        =~ 左边的字符串是否包含右边指定的字符串
        注:此表达式一般用于[[ ]]中;扩展的正则表达式
        -z 测试字符串是否为空,空为真,不空为假
        -n 测试字符串是否不为空,不空为真,空为假
        注:用于字符串比较时的用到的操作数都应该使用引号

原创文章,作者:木,如若转载,请注明出处:http://www.178linux.com/73306

(0)
木
上一篇 2017-04-16 21:56
下一篇 2017-04-16 22:19

相关推荐

  • Linux入门基础知识

    1、计算机的组成及其功能。         计算机系统主要分为硬件系统和软件系统两部分。         (1)硬件系统由五部分组成,其中包括:         控制器:调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问;         运算器:对数据进行加工处理;         存储器:存储程序、信号、命令,数据等信息,并在需要时提供这些信息…

    Linux干货 2018-02-25
  • 第一周作业

    一·计算机组成及其功能     计算机由硬件和软件组成,他们构成计算机系统 硬件:构成计算机的物理装置包括中央控制器、存储器、输入设备、输出设备。 中央控制器(CPU):由控制器、运算器、寄存器和缓存组成。cpu的主频越高和缓存越大性能越好。主频是中央处理器时钟的频率,通常以兆赫兹(MHZ)为单位。缓存:可以进行高速数…

    Linux干货 2016-12-01
  • History,Help——Linux基本命令(6)

    1.     history   当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效率获得极大提升。 history是shell的内置命令,其内容在系统默认的shell的man手册中。 一些用法: history[-c] [-d offset] [n] …

    2017-07-15
  • 用户管理基本操作

    1.创建组distro,其GID为2016[root@localhost ~]# groupadd -g 2016 distro2.创建用户mandriva,其ID号为1005;基本组为distro[root@localhost ~]# useradd -u 1005 mandriva -g 20163.创建用户mageia,其ID号为1…

    Linux干货 2017-09-04
  • mysql进阶至mysql备份基础及备份工具

    一、mysql备份、恢复基础 备份:存储的数据副本 还原:把副本应用到线上系统,仅能恢复至备份操作时刻的数据状态。 硬件上的冗余并不能有效恢复逻辑操作上的错误。 备份:数据备份、服务配置文件备份、系统环境备份。程序的运行依赖于一定的系统环境,仅提供数据本身并不能确保恢复数据之后系统可用,数据备份的目的在于确保系统出现不可预料的灾难事故之后能够快速恢复运行,降…

    2016-11-18
  • linux哲学思想

    有关运维,在哲学上的思想。 正确的哲学思想在我看来就是公理,就是像1+1=2一样大家都必须得遵守的公理。 当然,所有的公理都是有前提的,而有关linux的哲学思想当然是在linux环境这个大前提下。才是公理。在我看来,公理就是在学习知识之前所要依靠的准则,linux下的一切都在这些准则下。 比如: 一切接文件  linux下所有都是以文件的形式保存…

    2017-07-22

评论列表(1条)

  • renjin
    renjin 2017-04-21 11:41

    主要介绍了shell脚本编程的基础用法,内容总结的非常详细,但是排版上还需要再注意一下!