美文网首页Linux学习之路我用 Linux玩转大数据
大数据学习-Linux Shell脚本快速入门

大数据学习-Linux Shell脚本快速入门

作者: 慕久久 | 来源:发表于2018-02-06 16:32 被阅读0次

批量处理数据,难免会有在集群中使用Shell脚本,自动跑程序,下面快速入门Shell脚本编程,本文解决一下问题:

  • 什么是Shell脚本?(和shell有什么区别)
  • Shell脚本环境(主要有别于Windows)
  • 如何编写并运行Shell脚本
  • Shell常用语法

什么是Shell脚本?

  1. 什么是Shell?
    其实Shell就是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
  2. shell脚本
    Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
    业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
    由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。
  3. 脚本解释器
    sh
    即Bourne shell,POSIX(Portable Operating System Interface)标准的shell解释器,它的二进制文件路径通常是/bin/sh,由Bell Labs开发。
    本文讲的是sh,如果你使用其它语言用作shell编程,请自行参考相应语言的文档。
    bash
    Bash是Bourne shell的替代品,属GNU Project,二进制文件路径通常是/bin/bash。业界通常混用bash、sh、和shell,比如你会经常在招聘运维工程师的文案中见到:熟悉Linux Bash编程,精通Shell编程。

Shell脚本的环境

Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可                以了。

Linux 的 Shell 种类众多,常见的有:
  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • ……
    本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
    在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
    '#!' 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
    注意:解释器和编译器的区别

如何编写并运行Shell脚本

继续使用著名和Hello World,举个栗子:

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 helloWorld.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

#!/bin/bash
echo "Hello World !"

# #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

# echo 命令用于向窗口输出文本。

如何运行呢?

运行 Shell 脚本有两种方法:

1、作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./helloWorld.sh  #使脚本具有执行权限
./helloWorld.sh  #执行脚本

注意,一定要写成 ./helloWorld.sh,而不是 helloWorld.sh,运行其它二进制的程序也一样,直接写 helloWorld.sh,linux 系统会去 PATH 里寻找有没有叫 helloWorld.sh的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 helloWorld.sh是会找不到命令的,要用 ./helloWorld.sh 告诉系统说,就在当前目录找。

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh helloWorld.sh
/bin/php helloWorld.sh

常用的语法

变量

定义变量

定义变量时,变量名不加美元符号($),如:

your_name="qinjx"

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。

除了显式地直接赋值,还可以用语句给变量赋值,如:

for file in ls /etc

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"

echo $your_name

echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

for skill in Ada Coffe Action Java; do

    echo "I am good at ${skill}Script"

done

如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

推荐给所有变量加上花括号,这是个好的编程习惯。IntelliJ IDEA编写shell script时,IDE就会提示加花括号。

重定义变量

已定义的变量,可以被重新定义,如:

your_name="qinjx"

echo $your_name



your_name="alibaba"

echo $your_name

这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符。

注释

以“#”开头的行就是注释,会被解释器忽略。

多行注释

sh里没有多行注释,只能每一行加一个#号。就像这样:

#--------------------------------------------

# 功能:自动为打包,产出物为14个渠道的ipa包

# 特色:全自动打包,不需要输入任何参数

#--------------------------------------------



##### 用户配置区 开始 #####

#

#

# 项目根目录,推荐将此脚本放在项目的根目录,这里就不用改了

# 应用名,确保和Xcode里Product下的target_name.app名字一致

#

##### 用户配置区 结束  #####

如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。

字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了,哈哈),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。

单引号

str='this is a string'

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的

  • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)

双引号

your_name='qinjx'

str="Hello, I know your are \"$your_name\"! \n"
  • 双引号里可以有变量

  • 双引号里可以出现转义字符

字符串操作

拼接字符串

your_name="qinjx"

greeting="hello, "$your_name" !"

greeting_1="hello, ${your_name} !"



echo $greeting $greeting_1

获取字符串长度:

string="abcd"

echo ${#string} #输出:4

提取子字符串

string="alibaba is a great company"

echo ${string:1:4} #输出:liba

查找子字符串

string="alibaba is a great company"

echo expr index "$string" is#输出:3,这个语句的意思是:找出字母i在这名话中的位置,要在linux下运行,mac下会报错

常用的命令

sh脚本结合系统命令便有了强大的威力,在字符处理领域,有grep、awk、sed三剑客,grep负责找出特定的行,awk能将行拆分成多个字段,sed则可以实现更新插入删除等写操作。

ps

查看进程列表

grep

排除grep自身

查找与target相邻的结果

awk

sed

插入

替换

删除

xargs

curl

相关文章

  • Shell入门笔记

    Shell脚本:Linux Shell脚本学习指南菜鸟教程 - Shell教程Linux入门 - Shell脚本是...

  • 大数据学习-Linux Shell脚本快速入门

    批量处理数据,难免会有在集群中使用Shell脚本,自动跑程序,下面快速入门Shell脚本编程,本文解决一下问题: ...

  • 自动化脚本实践(Shell + Expect)

    Linux Shell脚本入门: Linux awk 命令 | 菜鸟教程 Shell 教程 | 菜鸟教程 lin...

  • 2017读书清单

    技术 Linux类 Linux系统命令及Shell脚本实践指南ps:适合快速入门的一本书,看完只能对linux有个...

  • linux shell脚本学习笔记(1)

    Linux的shell脚本是linux的入门基础课程,难度系数也不大,这里做一个学习笔记 ◆1.1 语法基本介绍 ...

  • Shell 概述

    学习 Shell 主要包括的内容: Shell 脚本入门 Shell 变量 Shell 内置命令 Shell 运算...

  • 第一个Shell程序

    第一个shell程序 shell脚本在Linux中使用非常广泛,因此想快速地学习一下shell,到达基本使用的水平...

  • 技术书单推荐

    Linux系列 《Linux命令行与shell脚本编程大全》评分:★★★★★适用范围:Linux入门评价:我看过最...

  • Shell脚本快速入门学习

    个人学习整理,由于不能完全发布,更多内容查看 我的博客 简介 Shell是脚本语言,解释型,无需提前编译。 She...

  • linux shell脚本攻略笔记

    LINUX SHELL脚本攻略笔记[速查] linux shell脚本攻略笔记

网友评论

    本文标题:大数据学习-Linux Shell脚本快速入门

    本文链接:https://www.haomeiwen.com/subject/fcwgzxtx.html