shell脚本编程进阶

前言:进入正题之前我们先来复习一下有关脚本编程的条件测试

一,流程控制

  1. 过程式编程语言

    a.顺序执行

    b.选择执行

    c.循环执行

  2. 顺序执行

    顾名思义,就是按照你脚本里所敲的内容顺序执行

  3. 选择执行

    fi

    a.条件选择if语句,可以嵌套

    b.格式

    单支

    if 判断条件;then

    条件为真

    fi

    双分支

    if 判断条件;then

    条件为真

    else

    条件为假

    fi

    多分支

    if 判断条件;then

    条件为真

    elif(相当于else if) 判断条件;then

    条件为真

    else

    上述条件都为假

    fi

    逐条进行判断,第一次遇到真条件时,执行分支,然后fi结束整个if语句



    看几个例子,了解一下具体在脚本里格式是什么样的

    所有的脚本写完之后的操作都一样,就在这里演示一次后面就都不演示了



    case

    a.case支持glob风格的通配符

    * 任意长度任意字符
    ? 任意单个字符
    [ ] 指定范围内的任意单个字符
    a|b a或者b

    b.格式

    case 变量引用 in

    pat1) 分支;;

    pat2) 分支;;

    ...

    *) 分支;;

    esac




  4. 循环执行

    定义:将某代码段重复运行多次,有进入条件和退出条件

    for

    a.格式

    for 变量名 in 赋值列表;do

    循环体

    done

    b.执行机制:依次将列表的元素赋值给变量名,每次赋值后执行一次循环体,知道列表中耗尽,循环结束

    c.列表生成方式

    (1)直接给出列表 {1,2,3}

    (2)整数列表

    (a){1..10}

    (b)$(seq 1 10)

    (3)返回列表的命令 $(cmd)

    (4)变量引用 [email protected],$#





    while

    a.格式

    while 循环控制条件;do

    循环体

    done

    b.循环控制条件是true,进入循环,否则退出循环

    c.特殊用法   遍历文件的每一行

    while read line;do

    循环体

    done < 文件名

    依次读取文件的每一行,并且赋值给$line





    until

    a.格式

    until 循环控制条件;do

    循环体

    done

    b.循环控制条件是false,进入循环,否则退出循环





    continue

    用于循环体中,提前结束第N层的本轮循环,进入下一轮N+1层循环

    break

    用于循环体中,提前结束第N层本轮循环



    这俩个是在其他循环语句中应用,在其他示例的图片里一起讲了



    shift

    shift n

    用于参量列表,左移指定次数,不指定为左移一次;一旦被移动,最左端的参数从列表中删除





    select        用于创建菜单

    a.格式

    select variable in list;do

    循环体命令

    done

    b.PS3提示符

    c.输入菜单的某个数字,执行相应的命令,是无线循环,需用break退出循环或者exit终止脚本




  5. 特殊用法

    ((...)) 可以用于运算

    for ((变量初始化;条件判断表达式;控制变量的修正表达式));do

    循环体

    done

    每轮循环结束会先进行控制变量修正运算,然后再做条件判断




二,函数

  1. 函数介绍

    不是单独的进程,不能独立运行,是shell程序的一部分,在当前shell中运行

  2. 定义函数

    a.方式一

    函数名 () { 函数体;}    常用

    b.方式二

    function 函数名 { 函数体;}

    c.方式三

    function 函数名 () { 函数体;}

  3. 函数使用

    a.可在交互式环境下定义函数

    b.可将函数放在脚本文件中作为它的一部分

    c.可放在只包含函数的单独文件

    d.函数只有被调用才会执行

  4. 函数返回值

    return 从函数中返回,用最后状态命令决定返回值,是0,则是无错误返回;是1-255,则是有错误返回

  5. 定义及使用函数

    a.交互式环境

    定义函数后,将一直保留到用户从系统退出,或者执行unset   删除函数,取消函数赋值

    b.脚本中

    调用函数直接调用函数名即可

  6. 载入函数

    函数文件创建好后,用 . 或者source 接上文件名载入函数

  7. 执行shell函数

    直接输入函数名即可

  8. 函数参数

    可以接受调用$1,$2,...这些参数,还有特殊变量

    [email protected],$*  表示所有的参数

    $#  表示参数个数

  9. 函数变量

    a.环境变量

    当前shell和子shell有效

    b.本地变量

    只在当前函数运行期间有效

    c.全局函数

    对当前shell有效

  10. 函数递归

    函数直接或间接调用自身




三,数组

  1. 相关数组的含义

    a.变量

    存储单个元素的内存空间

    b.数组

    存储多个元素的连续的内存空间,相当于多个变量的集合

    c.索引

    从0开始,数值索引,declare -a 数组名  声明数字索引

    也可以自定义,为关联索引,declare -A 数组名  声明关联索引

  2. 数组赋值

    a.一次赋值一个元素

    title[1]=a

    b.一次赋值全部元素

    title=(a b c )    下标自动从0开始排

    c.指定下标数

    title=([0]=a [3]=b)

    d.交互式赋值

    read -a 数组名

  3. 引用数组

    a.引用数组元素

    ${数组名[下标数]}

    b.引用数组所有元素

    ${数组名[@|*]}

    c.数组元素的个数

    ${#数组名[@|*]}

    c.删除数组或者元素

    unset 数组名[下标值]

  4. 数组数据处理

    a.引用数组中元素

    ${数组名[@] :i:j}

    i:为正数时是从左往右跳过i个元素;为负数时是从右往左取出i个元素

    j:为正数时是从左往右取出j个元素;为负数时是从右往左去掉j个元素





    b.追加元素

    数组名[${#数组名[@]}]=元素值

    c.关联数组

    关联数组必须先声明再调用

    d.显示字符串长度

    ${#数组名}


四,高级字符串操作

  1. 基于模式取字符串

    ${数组名#*字符串}   从左往右开始删除直到第一次出现匹配到字符串的所有字符

    ${数组名##*字符串}    从左往右开始删除直到最后一次出现匹配到字符串的所有字符

    ${数组名%字符串*}    跟#用法一样,但是是从右往左开始




  2. 查找替换

    ${数组名/匹配的字符串/替换的字符串}  第一次被匹配到的字符串,替换

    ${数组名//匹配的字符串/替换的字符串}   所有被匹配的字符串,替换

    ${数组名/#匹配的字符串/替换的字符串}    行首被匹配的字符串,替换

    ${数组名/%匹配的字符串/替换的字符串}    行尾被匹配的字符串,替换




  3. 查找删除

    与替换用法一样,不输入替换的字符串即可

  4. 字符大小写转换

    ${数组名^^}   把数组中的所有小写字母换成大写

    ${数组名,,}   把数组中的所有大写字母换成小写




五,高级变量

  1. declare

    有类型变量

    如果declare -a 和 declare -A 后面没有接变量名则表示显示索引数组和关联数组

  2. eval

    会先扫描所有的置换,然后执行命令;适用于一次扫描无法实现的变量;对变量进行俩次扫描

  3. mktemp

    创建并显示临时文件,可避免冲突

  4. install

    安装复制文件

  5. expect

    a.介绍

    主要应用于自动化交互操作的场景,就是把交互式操作成自动完成

原文地址:http://blog.51cto.com/13572810/2090670

时间: 2024-08-08 06:55:31

shell脚本编程进阶的相关文章

shell脚本编程进阶练习题

这两天学习了shell脚本编程进阶,作为一枚文科生,小编觉得...恩..脚本很烧脑.....,不过小编还是做了些题,稍作总结后,呈给各位看官,内容如下: 一.条件选择if语句 选择执行: 注意:if语句可嵌套 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi 多分支 if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; t

SHELL脚本编程进阶(二)

写在前面(最重要) 本文部分资料和示例援引自以下书籍.在此,感谢原作者的创作,以及所有译者的付出,向他们致敬. Advanced Bash-Scripting Guide <高级Bash脚本编程指南>Revision 10中文版 Linux脚本编程执导 其中 <高级Bash脚本编程指南>Revision 10中文版 是 <Advanced Bash-Scripting Guide> 的中文翻译版,文档翻译正在进行中,再次感谢译者付出. 前言 在之前的文章 Linux 基

SHELL脚本编程进阶(一)

写在前面(最重要) 本文部分资料和示例援引自以下书籍.在此,感谢原作者的创作,以及所有译者的付出,向他们致敬. Advanced Bash-Scripting Guide <高级Bash脚本编程指南>Revision 10中文版 Linux脚本编程执导 其中 <高级Bash脚本编程指南>Revision 10中文版 是 <Advanced Bash-Scripting Guide> 的中文翻译版,文档翻译正在进行中,再次感谢译者付出. 前言 在之前的文章中,我们已经详细

第14章,Shell脚本编程进阶

更多内容请点击: Linux学习从入门到打死也不放弃,完全笔记整理(持续更新,求收藏,求点赞~~~~) http://blog.51cto.com/13683480/2095439 本章内容: 条件判断 循环 信号捕捉 函数 数组 高级字符串操作 高级变量 Expect 过程式编程语言执行方式: 顺序执行,选择执行,循环执行 条件选择----------------------------------------------------------------------- if语句: 结构: 

shell脚本编程——进阶篇(真刀实干)

条件测试 文件测试 整数测试 字符串与逻辑测试 if语句 if单分支语句 if双分支语句 if多分支语句 if嵌套语句 test命令测试特定的表达式 是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值. 格式1:test 条件表达式 格式2:[ 条件表达式 ] (注意前后至少有1个空格,否则不予执行) 文件测试格式:[ 操作符 文件或目录 ]常用的测试操作符:1.-d:测试是否为目录(Directory)2.-e:测试目录或文件是否存在(Exist)3.-f:测试是否为文件(File)

《Linux命令行与shell脚本编程大全》学习笔记(转)

第一部分:Linux命令行<Linux命令行与shell脚本编程大全> 第一章:初识Linux shell<Linux命令行与shell脚本编程大全> 第二章:走进shell<Linux命令行与shell脚本编程大全> 第三章:基本的bash shell命令<Linux命令行与shell脚本编程大全> 第四章:更多的bash shell命令<Linux命令行与shell脚本编程大全> 第五章:使用Linux环境变量<Linux命令行与she

《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf

下载地址:网盘下载 内容简介  · · · · · · 本书是一本关于Linux 命令行与shell 脚本编程的全面教程.全书分为四部分:第一部分介绍Linuxshell 命令行:第二部分介绍shell 脚本编程基础:第三部分深入探讨shell 脚本编程的高级内容:第四部分介绍如何在现实环境中使用shell 脚本.本书不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料. 本书内容全面,语言简练,示例丰富,适合于linux 系统管理员及Linux 爱好者阅读

shell脚本编程高级篇

SHELL脚本编程进阶循环执行:简单来说就是把一些指令重复循环. 循环代码具体的指令有三种: for , while , until其中for, while用的最多.for循环 for 变量名 in 列表;do 循环体 done 关键字的帮助都是用help来查询.for循环语法:在shell编程中 for,in,do,done.这些都是他的关键字,其中循环的指零就放在do和done之间.WORDS决定了循环次数.循环的次数由in 后面跟的WORDS(字符串)的数量决定.字符串的个数决定了do和d

shell脚本基础进阶(四)----作业

20150913-15作业 1.描述shell程序的运行原理(可附带必要的图形说明) shell脚本基础进阶(一)----shell介绍 2.总结shell编程中所涉及到的所有知识点(如:变量.语法.命令状态等等等,要带图的哟) shell脚本基础进阶(二)----变量及运算符 3.总结课程所讲的所有循环语句.条件判断的使用方法及其相关示例:(if (jpg|png is not exist):echo "You say a XX") shell脚本基础进阶(三)----流程控制语句