shell脚本--文本处理以及编程原理
一、文本处理工具 wc命令 wc(Word count)用于统计文本文件中的字符个数 15是行数 ?78是字符个数 ??805是文件大小(字节)【1字节等于8比特】 2、参数:-l(统计行数)、-w(统计单词数)、-c(统计字节数) ? cut(切片)命令 1、指定分隔符,切割文件 2、常见参数:-d(指定分割符)、-f(指定提取哪一列)、--output-delimiter=‘’(将输出的分隔符,替换为自己想用的分隔符) 示例:cut -d”?”?-f1 /etc/fstab(取第一列) ? ? cut -d” ” -f1,3 /etc/fstab(取第1、3列) ? ? cut -d” ” -f1-3 /etc/fstab(取第1到3列) ? ? cut -d[:] -f1d /etc/fstab(指定分隔符为空格和冒号)([ ]代表括号里的 任意字符都匹配) 3、cut无法指定多个分隔符,awk可以指定多个分隔符 ?【cut的局限性:1、-d指定分隔符,不能同时指定多个 ?2、不能做高级的格式化输出;所以要掌握awk命令】 sort命令 1、sort命令根据ASCII码来进行排序,并不是数值大小 2、常用参数:-r(逆序)、-f(忽略字符的大小写) ??? -t(指定字段分隔符)、-n(以数值大小排序) ?? ?-u(排序去除重复,重复的不显示) -k(指定哪一列进行排序) uniq命令 1、uniq命令用于去重,但是只有连续且相同的命令才被视为重复【所以要先排序在去重】 2、常用参数:-c(统计某些字符重复的字数)【例:sort filename | uniq -c】 ? ? ? ? ? ? ? -d(仅仅显示未重复过的行) 练习:取出/etc/passwd文件的第6到10行,并将这些信息按照第3个字段的数值大小进行排序,最后仅显示各自的第一个字段 ? ? ? ? ? ?Head /etc/passwd | tail -5 | sort -t: -k3 -n |cut -d”?“?-f1 ?二、编程原理 1、机械码(16进制)的局限性:识别机器,各种品牌不兼容 2、机器只能识别二进制指令 3、程序=指令+数据 4、驱动硬件设备默认不能使用;CPU控制硬件资源,CPU由控制器与运算器组成 5、驱动程序:不同的厂家的硬件设备之间需要进行指令沟通时,我们需要驱动程序来进行“翻译” 6、更接近于硬件开发的工程师要学习“汇编语言”,但是汇编语言被厂家所限制 7、C语言与C++的底层为汇编语言 8、操作系统用来分配硬件资源(操作系统用C语言来写) 9、现在的编程基于高级语言及超高级语言,更好的让程序员能够实现编程功能。高级语言及超高级语言需要翻译成计算机可读的语言(二进制语言),翻译分为两种:解释型(逐行翻译,逐行执行,? ? ? 例:bash -x filename(方便排错))与编译型(一次编译,全部执行) 10、Shell,Python为解释型语言,编译安装大多使用C语言、C++、C# 11、编程语言的分类:根据服务的重心不同,编程分为面向对象编程(侧重于数据的语言)和面向过程编程(侧重于指令的语言)。 12、编程语言的执行方式【一行一行】:顺序执行(没有逻辑关系)、循环执行(for(遍历,常用)、While(循环条件,True的时候开始循环)、unti(与while相反,False的时候开始循环))、选择? ? 执行(分支if语句、case(重点使用)) 13、Shell编程介绍:shell语句是面向过程的,侧重于指令集; shell语句的基本结构组成:命令、数据-变量、逻辑关系 shell没有内嵌函数,没有函数库调用 ? ? 没调用的接口,这一点限制了shell脚本的功能,不像Python,可以调用各种模块接口 ? ? 优点:shell的功能更好的兼容系统,可以直接调用系统命令,执行效率更高 14、shell脚本的第一句话必须写(#!/bin/bash)---->定义脚本解释器 15、/etc/shells----------查看当前系统支持的shell程序? ? ? ? echo $SHELL-----查看当前会话的shell程序?? ? ? ? /etc/passwd----------制定了用户默认支持的shell程序(/bin/nologin)? 16、shell的执行:1、bash命令来执行脚本 ? ? ? 参数:-n ?查看shell脚本的逻辑错误 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -x ?逐行显示执行的脚本程序(方便排错) ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2、授权?chmod +x filename,然后使用全路径执行脚本 17、变量:环境变量 ? ? 局部变量(declare 命令--定义变量类型) ? ? 本地变量(local在函数中使用) 18、变量类型:数值型(浮点型(float),整型(int),布尔值(bollean,0、1 ???及false、true)) ? ? ? ? ? ??字符串:(普通字符及字符串、数组) 19、编程语言的分类:根据变量的不同,分为强类型语言(数值必须被定义,才能进行处理或运算)和弱类型语言(编程语言可以自动识别变量类型) 20、多态:一个数据有多个属性,而最后使用的属性取决于和它进行运算的数据 21、传参:$?(上一条命令的执行状态,0代表正确,1-255表示错误) ? ??$1、$2、${10}--------命令后面传入脚本的数据,以空格为分隔符 $#(统计传参数量,${$#}统计传参量) $*(表示所有传参,所有的传参以字符串形式输出) ? ??[email?protected](表示所有传参,所有的传参以列表形式输出) ? ? ? ? ? ? ? ? ? 22、定义变量格式:NAME=VALUE(中间不要有空格,一个等号是赋值,两个等号是判断) ?通过命令declare定义变量参数(例:declare -i a=10 int() str()) ? declare -a(代表数组)、declare -i (代表整数) 23、变量命名:下划线的方式指定变量名称 ???? 驼峰命名方式 24、文件测试、条件判断:在脚本语言中,我们需要进行语句分支,就是要做判断,判断就是使用test命令来实现的。 使用格式:test [option] file ? ? ? ? ? ? ? ? ? ?[??条件语句?] 【不用test做判断时不加[ ?]】 常见的test选项: 比较选项:-eq(等于)、-en(不等于)、-gt(大于)、-ge(大于等于)、-lt(小于)、-le(小于等于)【用于数值的判断,字符用=、!=】 判断选项:-f(判断是否为普通文件)、-d(判断是否为目录件)、-L(判断是否为链接文件)、-r、-w、-x(判断是否具有读 写 执行的权限)) 关联选项:-o(或)、-a(与)、!(非) 字符串测试:=(等于为真)、!=(不等于为假)、-z(判断字符串是否存在,存在为真,不存在为假)、-n(与-z相反) 25、逻辑运算:与 && :两边的命令都为真时结果才为真 ? ? 或 || :两边的命令,一边为真就是真,同时为假才是假 非 ! [ $? -eq 0 ] ?&& exit 0 || exit 1 前后对接的都是单独的存在的命令,前后的两个命令没有任何关系只是通过逻辑运算符联系在一起 26、算数运算:let(1+1)? ? 例:let a=1+1 echo $a ? ? ? ? ? ??expr(1*1)? ?例:exor 1* 10 ??? ?$[] ??[$1+10] 例:a=$[2+3] echo $a $(()) ??(($1/$2))? ? ? 例:a=$((2/4)) echo $a ?27、编程练习 输出100以内的书的和
执行结果: ? 传参
执行结果: ? 判断文件是否存在
? 判断用户类型 ?
? 执行结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |