BigData~01:Shell

Shell编程基础

内容大纲

一、Shell编程
二、高级文本处理命令:sed、awk、cut
三、crontab定时器


一、Shell编程


  1. 概述
    • Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell;
    • Shell也是一门解释型的编程语言,即shell脚本;
    • 一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的;
  2. Shell脚本的执行方式
    • 拥有执行权限的两种执行方式:
      • 相对路径使用./<shell-name>.sh
      • 相对路径使用<absolutely-path>/<shell-name>.sh
    • 不用执行权限的执行方式:sh <shell-name>.sh
    • 在脚本前加.或者..的执行方式:
      • . <shell-name>.sh
      • .. <shell-name>.sh
    • 前面加...的执行方式在当前进程中执行,而前面的方式会新开进程执行脚本。重要的是,前一种新开进程之间变量共享比后一种在当前进程执行变量的共享上更加困难;
  3. Shell中的变量
    • 变量的分类(可使用set命令查看):

      • 系统变量,常见的有:$HOME$PWD$SHELL$USER
      • 自定变量,在sh脚本中定义的变量
    • Shell中变量的使用注意:

      • 等号两侧不能有空格;
      • 变量名称一般习惯为大写;
      • 双引号和单引号有区别:双引号可以替换变量,单引号会原样输出;
      • 如果一个字符串中有空格,则必须使用引号包起来;
      • 如果一个变量不再使用可以使用unset取消定义:unset name,但是如果一个变量使用readonly修饰,那么unset不会起作用;
      • export关键字,会把这个变量提升为全局变量;
    • Shell中的特殊变量

      • $? 表示上一个命令之行结束的状态值
      • $$ 表示当前进程编号
      • $0 表示当前脚本名称
      • $<n> 表示n位置的输入参数(n代表数字,n>=1)
      • $# 表示参数的个数,常用于循环
      • $*$@都表示参数列表 ,区别:
        • $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以$1 $2 … $n 的形式输出所有参数;
        • 当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数;
    • 示例

      • 使用变量获取一个文本的单词个数
        echo count = `wc -c yum.conf | cut -d ' ' -f1`
        echo count = $(wc -c yum.conf | cut -d ' ' -f1)
        
  4. 脚本的调试
    • 方式1
      sh -vx <shell-file-name>
      
    • 方式2
      • 在脚本中增加set -x

二、高级文本处理命令:

  1. sed

  2. awk

    • 简介
      • awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
      • awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
      • awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
    • 使用
      • 语法格式
        awk '{pattern + action}' {filenames}
        
      • 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
      • awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
      • 通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
    • 调用
      • 命令行方式:awk [-F field-separator] 'commands' input-file(s)

        • 其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
        • 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
      • shell脚本方式

        • 将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
        • 相当于shell脚本首行的:#!/bin/sh,可以换成:#!/bin/awk
      • 将所有的awk命令插入一个单独文件,然后调用:awk -f awk-script-file input-file(s)

        • 其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。
  3. cut:文本切割

  4. sort:行排序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • 什么是运维 术语名词 IDC--(Internet Data Center)互联网数据中心,主要服务包括整机租用、...
    lyh165阅读 2,688评论 0 19
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,151评论 2 33
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,077评论 1 19
  • 开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用,而公共代码库的版本管理是个麻烦...
    jinlei_123阅读 8,115评论 0 1