shell脚本编程基础

一.编程基础

             程序:指令+数据

             程序编程风格:

                过程式:以指令为中心,数据服务于指令

                对象式:以数据为中心,指令服务于数据

             shell程序:提供了编程能力,解释执行

        1.程序的执行方式

             计算机:运行二进制指令;

             编程语言:

                低级:汇编

                高级:

                编译:高级语言–>编译器–>目标代码

                    java,C#

                解释:高级语言–>解释器–>机器代码

                    shell, perl, python

        2.编程基本概念

                 编程逻辑处理方式:

                    顺序执行

                    循环执行

                    选择执行

                 shell编程:过程式、解释执行

                 编程语言的基本结构:

                    数据存储:变量、数组

                    表达式: a + b

                    语句:if

        3.编程程序语言分类

             强类型:定义变量时必须指定类型、参与运算必须符合类型

                要求;调用未声明变量会产生错误

                如 java,python

             弱类型:无须指定类型,默认均为字符型;参与运算会自动

                进行隐式类型转换;变量无须事先定义可直接调用

                如: bash 不支持浮点数

             变量命名法则:

                1、不能使程序中的保留字:例如if, for;

                2、只能使用数字、字母及下划线,且不能以数字开头

                3、见名知义

                4、统一命名规则:驼峰命名法(单词首字母大写)

                  小驼峰法(仅开头的单词首字母大写)

二.shell脚本基础

         shell脚本是包含一些命令或声明,并符合一定格式的文本文件

         格式要求:首行shebang机制

            #!/bin/bash      ———–》 指定解释器

            #!/usr/bin/python

            #!/usr/bin/perl

          注释:   单行注释 :    #注释内容

            多行注释:      :<<EOF     注释内容       EOF

          shell脚本的用途有:

                 自动化常用命令

                 执行系统管理和故障排除

                 创建简单的应用程序

                 处理文本或文件

    2 创建shell脚本

             第一步:使用文本编辑器来创建文本文件

             第一行必须包括shell声明序列: #!

                #!/bin/bash

                 添加注释

                注释以#开头

             第二步:运行脚本

                 给予执行权限,在命令行上指定脚本的绝对或相对路径

                 直接运行解释器,将脚本作为解释器程序的参数运行

        执行分类以及区别:

            1:   。或者source script_name.sh  :

                 在当前bash中执行脚本,脚本中的变量可以调用

            2:   chmod +x后 直接执行 script_name.sh :

                调用一个新的bash子进程来执行脚本,脚本中的变量无法再父shell中使用

            3:   bash script_name.sh  :  同上

     3 脚本调试

           bash -n /path/to/some_script

            检测脚本中的语法错误

           bash -x /path/to/some_script

            调试执行

三.变量

    1.变量:命名的内存空间

            数据存储方式:

            字符:

            数值:整型,浮点型

           变量:变量类型

           作用:

            1、数据存储格式

            2、参与的运算

            3、表示的数据范围

           类型:

            字符

            数值:整型、浮点型

            注: bash中不支持浮点型,默认视为 字符 型

            涉及数学运算时,应该注意强制声明类型

    2.bash中变量的种类

           根据变量的生效范围等标准:

            本地变量:生效范围为当前shell进程;对当前shell之外

                的其它shell进程,包括当前shell的子shell进程均无效

            环境变量:生效范围为当前shell进程及其子进程

            局部变量:生效范围为当前shell进程中某代码片断(通常

                指函数)

            位置变量: $1, $2, …来表示,用于让脚本在脚本代码

                中调用通过命令行传递给它的参数

            特殊变量:  $?  命令执行状态码

            $0: 命令本身

                  $*: 传递给脚本的所有参数,全部参数合为一个字符串

                $@: 传递给脚本的所有参数,每个参数为独立字符串

                $#: 传递给脚本的参数的个数

                $@ $* 只在被双引号包起来的时候才会有差异

    3.变量类型强制声明:

                 declare option value_name=value

            -a   indexed arrays  索引

            -A  arrays   数组

            -i    integer 整数

            -r    只读

            -x   环境变量

            -f   声明函数

    4 .本地变量

             变量赋值: name=‘value’,

                 可以使用引用value:

                (1) 可以是直接字串; name=“root"

                (2) 变量引用: name="$USER"

                (3) 命令引用: name=`COMMAND`, name=$(COMMAND)

             变量引用: ${name}, $name

                "":弱引用,其中的变量引用会被替换为变量值

                '':强引用,其中的变量引用不会被替换为变量值,而保

                持原字符串

             显示已定义的所有变量: set

             删除变量: unset name

    5.环境变量

             变量声明、赋值:

                export name=VALUE

                declare -x name=VALUE

             变量引用: $name,  

                ${name}   (当变量后边含有其他字符时候需要此格式)

                eg:   a = b${c}d

             显示所有环境变量:

                export

                env

                printenv

         删除: unset name  (当变量不再需要使用时,应及时释放变量以节省空间)

         bash有许多内建的环境变量: PATH, SHELL, USRE,UID,

                        HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1

    6.只读和位置变量

         只读变量:只能声时,但不能修改和删除,仅退出登录时才释放

                readonly name

                declare -r name

         位置变量:在脚本代码中调用通过命令行传递给脚本的参数

                $1, $2, …:对应第1、第2等参数, shift [n]换位置

                $0: 命令本身

                $*: 传递给脚本的所有参数,全部参数合为一个字符串

                $@: 传递给脚本的所有参数,每个参数为独立字符串

                $#: 传递给脚本的参数的个数

                $@ $* 只在被双引号包起来的时候才会有差异

            示例:判断给出的文件的行数

                linecount="$(wc -l $1| cut -d' ' -f1)"

                echo "$1 has $linecount lines."

三.算术运算

     1. bash中的算术运算:help let

            +, -, *, /, %取模(取余) , **(乘方)

          实现算术运算:

            (1) let var=算术表达式

            (2) var=$[算术表达式]

            (3) var=$((算术表达式))

            (4) var=$(expr arg1 arg2 arg3 …)

            (5) declare –i var = 数值

            (6) echo ‘算术表达式’ | bc

                 乘法符号有些场景中需要转义, 如*

             (7)expr N +/-  M  也可以用于计算,后面接参数,需要空格

                        % * 等需要加 \ 转义

                  (仅能用于计算整数,否则会报错,可以用于检测是否为整数)

         bash有内建的随机数生成器: $RANDOM( 1-32767)

        echo $[$RANDOM%50] : 0-49之间随机数

    2.赋值

         增强型赋值:(注:仅支持let)

            +=, -=, *=, /=, %=

             let varOPERvalue

            例如:let count+=3

            自加3后自赋值

         自增,自减:

            let var+=1

            let var++

            let var-=1

            let var–

            let var=++1    先自加1再使用

            let var=1++    先使用再自加1

     3.逻辑运算

            true, false

                1, 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

     4.逻辑运算

             非:!

                ! 1 = 0

                ! 0 = 1

    5. 短路运算:

            短路与:(&&)

                第一个为0,结果必定为0;

                第一个为1,第二个必须要参与运算;

            短路或:(  | |  )

                第一个为1,结果必定为1;

                第一个为0,第二个必须要参与运算;

             异或: ^

                异或的两个值,相同为假,不同为真

    6.聚集命令

            有两种聚集命令的方法:

                • 复合式: date; who | wc -l

                    命令会一个接一个地运行

                    (此处先执行date ,   再执行  who | wc -l )

                • 子shell: (date; who | wc -l ) >>/tmp/trace

                    所有的输出都被发送给单个STDOUT和STDERR

    7.退出状态

             进程使用退出状态来报告成功或失败

                • 0 代表成功, 1-255代表失败

                • $? 变量保存最近的命令退出状态

             例如:

                $ ping -c1 -W1 hostdown &> /dev/null

                $ echo $?

    8.退出状态码

             bash自定义退出状态码

                exit [n]:自定义退出状态码;

                注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出

            状态取决于exit命令后面的数字

                注意:如果未给脚本指定退出状态码,整个脚本的退出状态码

                取决于脚本中执行的最后一条命令的状态码

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

(0)
ldt195175108ldt195175108
上一篇 2016-08-12 09:01
下一篇 2016-08-12 09:01

相关推荐

  • N26-上海-莫言

    持续更新…

    Linux干货 2016-12-26
  • grep的用法

    grep的用法 1、复制/etc/skel目录为/home/tuser1及其内容文件的属组和其它用户均没有任何访问权限。 cp -R /etc/skel /home/thuser1 #复制文件/etc/skel 到/home/目录下并改名为thuser1 chmod -R 700 /home/thuser1 #更改/home/thuser1目录权限为属主全部…

    Linux干货 2017-07-23
  • 铭记今天

        2016年10月19日,我做了一个很艰难的决定,选择了马哥24期网络全程班,就算是冲动也好,无论对错都要坚持下去。 从出来工作之后,一直做销售这块,虽然跟电脑有关,但是其中的艰苦只有自己明白。慢慢的年级上来了,手中没有什么技术,做人生活,总觉得少了什么,总觉得自己以后会被社会淘汰,心一天一天着急。在后选择了一个从来都没有涉及的运维…

    Linux干货 2016-10-19
  • bash脚本编程语言if语句,find文件查找和压缩工具及课后作业练习

    一.概述 使用read命令来接受输入 使用read来把输入值分配给一个或多个shell变量: -p指定要显示的提示 -t TIMEOUT read从标准输入中读取值,给每个单词分配一个变量 所有剩余单词都被分配给最后一个变量 read -p “Enter a filename:“ FILE 过程式编程语言: 顺序执行 选择执行 循环执行 条件选择if语句 选…

    Linux干货 2016-08-22
  • 8月9日sed(更新版)

    sed命令及vim基础使用命令 处理文本的工具sed stream editor,行编辑器    sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有…

    Linux干货 2016-08-15
  • Man手册功能介绍

    Man:是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。 语法:man(选项)(参数) 选项: -a:在所有的man帮助手册中搜索 -f:等价于whatis指令,显示给定关键字的简短描述信息 -P:指定内容时使用分页程序 -M:指定man手册搜索的路径。 本地手册:/usr/share/man &nbsp…

    Linux干货 2016-10-17