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以内的书的和


1

2

3

4

5

6

7

8

#!/bin/bash

declare -i i=0

declare -i sum=0

while [ $i -le 100 ] ;do

        sum+=$i

        let i=i+1

done

执行结果:

传参


1

2

3

4

5

6

7

#!/bin/bash

echo "$1 $2 ...${10}"

echo $?

echo $#

echo $*

echo [email protected]

echo ${$#} 

执行结果:

判断文件是否存在


1

2

3

4

5

6

7

8

#!/bin/bash

#判断文件是否存在

if [ -f $1 -a -w $1 ];then

        echo "$1 文件不存在"

else

        echo "$1 文件已存在"

fi

判断用户类型


1

2

3

4

5

6

7

8

9

10

#!/bin/bash

#判断用户类型

declare -i uid=`uid -u $1`

if [ $uid -eq 0 ];then

        echo "这个是管理员"

else

        echo "这是个普通用户"

fi

执行结果:

原文地址:https://www.cnblogs.com/Eucalyptusleaves/p/11422431.html

时间: 2024-10-12 07:21:21

shell脚本--文本处理以及编程原理的相关文章

shell脚本的基本算法编程

第一题:斐波那契数列的递归与非递归 非递归: 递归: 注意在shell下return的范围是0-255,在这不能用return1 第二题:字符串截取cut 第三题:求100个数的和 第一种非递归: 第二种递归 第三种工具 第四题:求三个数的最大值,最小值,平均值

Shell脚本-l良好的习惯

原文: http://www.javacodegeeks.com/2013/10/shell-scripting-best-practices.html#BP11 翻译: aven 大多数编程语言都有一系列使用该语言编码需要遵循良好的编程习惯.然而,对于shell脚本我没有找到一个比较全面的,所以我决定编写一个我自己的基于我多年编写shell经验的编程习惯. 移植性的注意:自从主要编写shell脚本在安装了Bash 4.2的系统上运行,我从来不担心可移植性,你也不需要担心!下面的列表都是使用Ba

第三周、文本处理工具、shell脚本编程

文本处理工具 1.cut -d指定分隔符.比如-d: -d' ' -f指定取第几列.比如-f1,3 --output-delimiter指定显示的分隔符 tr -s压缩 -d删除 -c除了 2.使用tr和cut取磁盘的百分比 [[email protected] data]# df -h | tr -s ' ' | cut -d' ' -f5 | tr -dc '[0-9]\n' 0 0 5 0 32 67 32 0 3.取IP [[email protected] data]# ifconfi

文本处理工具和正则表达式、shell脚本编程基础-第四周

第四周-文本处理工具和正则表达式.shell脚本编程基础1. 统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户的个数,并将用户都显示出来grep -v '/sbin/nologin' /etc/passwd|wc -lgrep -v '/sbin/nologin' /etc/passwd|cut -d: -f12. 查出用户UID最大值的用户名,UID及shell类型.cut -d: -f1,3,7 /etc/passwd|sort -t: -k2 -nr

文本处理工具和正则表达式、SHELL脚本编程

一.文本编辑工具VIM ●命令模式 --> 插入模式 i     insert, 在光标所在处输入 I     在当前光标所在行的行首输入 a    append, 在光标所在处后面输入 A    在当前光标所在行的行尾输入 o    在当前光标所在行的下方打开一个新行 O   在当前光标所在行的上方打开一个新行 ●插入模式 --- ESC-----> 命令模式 ●命令模式 ----:----> 扩展命令模式 ●扩展命令模式 ---ESC,enter---->命令模式 1.进入编辑

shell脚本编程常识

(这些往往是经常用到,但是各种网络上的材料都语焉不详的东西,个人认为比较有用) 七种文件类型 d            目录                                                       l             符号链接 s             套接字文件                                           b            块设备文件 c            字符设备文件              

SHELL脚本编程的常识和VI常用技巧

来源:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM#_Toc37518085 Shell脚本编程的常识... 3 七种文件类型... 3 正则表达式... 3 字符类描述... 4 shell的引号类型... 4 变量设置时的不同模式:... 4 条件测试... 5 命令执行顺序... 6 脚本调试... 6 一些常用的小trick.. 6 打印一些头信息... 6 创建

Shell脚本编程的常识

Shell脚本编程的常识 (这些往往是经常用到,但是各种网络上的材料都语焉不详的东西,个人认为比较有用) 七种文件类型 d            目录                                                       l             符号链接 s             套接字文件                                           b            块设备文件 c            字符设备文件 

shell脚本编程的选择分支结构

选择执行结构: if语句单分支结构:如果条件为真,则执行then后的命令,否则,不做任何操作: if CONDITION :then STATEMENT fi 或 if CONDITION ; then STATEMENT1 STATEMENT2 ... fi 注意:想要执行then后面的STATEMENTS,前提条件是CONDITION部分为真: if语句的双分支结构:如果条件为真,就执行then后面的命令:否则就执行else后面的命令: if CONDITION ; then STATEME