shell编程:对于hadoop程序员,通常需要熟悉shell编程,因为shell可以非常方便的运行程序代码。

1、shell文件格式:xxx.sh

#!/bin/sh ---shell文件第一行必须这么写
#井号后面的内容是注释
echo 'abcd' ----echo是输出,回显

在hadoop0:
mkdir shellfile
cd shellfile
ls
vi test.sh
#!/bin/sh
echo 'abcd'
ls
ll
tset.sh ---现在执行发现没有权限,需修改权限才能执行
chmod u+x test.sh
ll    ---列出文件的详细信息
test.sh ---现在就能执行了,输出了abcd

vi test.sh
#!/bin/sh
i=0 ---变量不需要声明,初始化不需要指定类型。变量名称只能是字母、数字、下划线组成,不能使用数字开头。
echo $i ---显示变量值使用:echo $变量名

2、变量分类:临时变量和环境变量(/etc/profile:export XXX)

3、单引号、双引号、飘号的使用:
vi test.sh
#!/bin/sh
i=0
echo ${i}1234 ---输出01234,要想变量独立使用的时候,用大括号独立开

vi test.sh
#!/bin/sh
i=0
echo '$i' ---输出$i,单引号不解析变量
echo "$i" ---输出0,双引号解析变量

vi test.sh
#!/bin/sh
i=0
echo '$i'
echo "$i"
echo $(date) ---输出时间
echo `date` ---飘号是执行内容,类似于上面的$(XXX)。这里`data`==$(date)

4、位置变量:执行脚本时,传入的参数按照先后顺序使用$1、$2等顺序引用变量值

vi test.sh
#!/bin/sh
i=0
echo "first param:$1"
echo "second param:$2"
执行:test.sh abc 123
输出:first param:abc
        second param:123

5、使用date:(更详细的查看《date命令使用文档》)
1、可以直接执行date,输出的是系统的当前时间。

2、格式化输出,date +%Y-%m-%d ---%Y 年 %m 月 %d 日 中间的是分隔符-,也可以换成别人分隔符 2017-4-10

3、date +%s      ---格式%s表示自1970-01-01 00:00:00以来的秒数

4、date --date=‘2017-4-10’ ---指定时间输出 --date='2009-01-01 11:11:11'

5、指定时间输出 --date='3 days ago'

6、标准输入、输出、错误:
1、标准输入、输出、错误都是命令行,使用文件描述符0、1、2引用
2、使用重定向可以把信息转换到其他位置
---------
ls > a.txt ---将test.sh转换到a.txt中输出了
ls 1>b.txt ---将a.txt和test.sh转换到b.txt中输出了

7、使用crontab(类似于Java中的timer):
  1、Linux下的定时任务
  2、编辑使用crontab -e
        * * * * * date>>/root/a.txt
        一共六列,分别是:分 时 日 月 周 命令
        (默认是按照每个小时的第一分钟输出)
        要想按照每个小时的第5分钟输出,则需修改为:5 * * * * date>>/root/a.txt
        要想每隔5分钟输出,则修改为:5,10,15,20,25,30 * * * * date>>/root/a.txt
  3、查看使用crontab -l

8、if判断、for循环:(注意符号之间空格!每一行的结束都有一个空格!!!)
if [ ... ] ---if和[之间、[和条件之间、条件和]之间都有一个空格。

then

...

fi

for ((i=0;i<10;i++)) ---for和(之间有个空格
do

...

done

----------
vi if.sh
#!/bin/sh
if [ 'a'='a' ]
then
echo 'equal'
fi
chmod u+x if.sh
if.sh ---输出equal

vi for.sh
#!/bin/sh
for ((i=0;i<10;i++))
do
echo $i
done
chmod u+x for.sh
for.sh

9、自定义函数:
function 函数名(){

....
}

//最后一行语句是默认返回值

引用自定义函数文件时,使用source func.sh
------------------
vi func.sh
  #!/bin/sh
  function dat(){
    date +%Y-%m-%d
  }
  dat

chmod u+x func.sh
func.sh

vi func.sh
#!/bin/sh
function dat(){
date --date="$1 days ago" +%Y-%m-%d
}
dat 2
func.sh ---输出当前时间的2天前的日期

-----------------

在test.sh中引用func.sh:
vi test.sh
#!/bin/sh
source func.sh ---最好指定路径
dat -2
test.sh ---输出2天后的日期

shell编程快速入门及实战的更多相关文章

  1. Shell 编程快速上手

    Shell 编程快速上手 test.sh #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch ...

  2. .Net Core WebAPI 基于Task的同步&异步编程快速入门

    .Net Core WebAPI 基于Task的同步&异步编程快速入门 Task.Result async & await 总结 并行任务(Task)以及基于Task的异步编程(asy ...

  3. CMake快速入门教程-实战

    http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/detai ...

  4. COM编程快速入门

    COM编程快速入门 COM编程快速入门 http://www.vckbase.com/index.php/wv/1642   COM是一种跨应用和语言共享二进制代码的方法.与C++不同,它提倡源代码重 ...

  5. ElasticSearch实战系列六: Logstash快速入门和实战

    前言 本文主要介绍的是ELK日志系统中的Logstash快速入门和实战 ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...

  6. 基于renren-fast的快速入门项目实战(实现报表增删改查)

    基于renren-fast的快速入门项目实战(实现报表增删改查) 说明:renren-fast是一个开源的基于springboot的前后端分离手脚架,当前版本是3.0 官方开发文档需付费,对于新手而言 ...

  7. Haskell 函数式编程快速入门【草】

    什么是函数式编程 用常规编程语言中的函数指针.委托和Lambda表达式等概念来帮助理解(其实函数式编程就是Lambda演算延伸而来的编程范式). 函数式编程中函数可以被非常容易的定义和传递. Hask ...

  8. 转:CMake快速入门教程-实战

    CMake快速入门教程:实战 收藏人:londonKu     2012-05-07 | 阅:10128  转:34    |   来源   |  分享               0. 前言一个多月 ...

  9. SpringBoot快速入门(实战篇一)

    SpringBoot快速入门(一) 一SpringBoot简介 1.spring开发经历的阶段 Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 ...

随机推荐

  1. 【bzoj4516】 Sdoi2016—生成魔咒

    http://www.lydsy.com/JudgeOnline/problem.php?id=4516 (题目链接) 题意 依次向字符串末尾加上一个字符,每次求不同子串个数. Solution 如果 ...

  2. 01-go语言开始-HelloWorld

    以输出HelloWorld为目标 Go的发展史 Go语言诞生(2007年的谷歌)的背景是由于软件开发的新挑战: 多核硬件架构 超大规模分布式计算集群 Web模式导致的前所未有的开发规模和更新速度 Go ...

  3. 前端学习 -- Css -- 文本样式

    text-transform可以用来设置文本的大小写 可选值: none 默认值,该怎么显示就怎么显示,不做任何处理 capitalize 单词的首字母大写,通过空格来识别单词 uppercase 所 ...

  4. 滚动条事件,当页面滚动到距顶部一定高度时某DIV自动隐藏和显示

    $(function () {                        //绑定滚动条事件              //绑定滚动条事件            $(window).bind(&q ...

  5. for in,Object.keys和Object.getOwnPropertyNames的区别

    var parent = Object.create(Object.prototype, { a: { value: 1, writable: true, enumerable: true, conf ...

  6. Windows的DOS命令基础

    Windows的DOS命令基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.dir: 查看当前路径下的目录(directory)详细信息 . 详细信息: a>.dir ...

  7. saltstack主机管理项目【day39】:主机管理项目开发

    项目目标 salt state.apply -h "ubuntu,centos" -g "ubuntu,centos" -f "ubuntu,cent ...

  8. DataGridView刷新数据

    在DataGridView上操作数据之后,无论是增删改都是对数据库进行了操作,而DataGridView这个控件在操作之后是不会变化的,需要重新的去数据库里读取一下数据才行,可以理解为之刷新 Data ...

  9. Linux之chkconfig命令

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...

  10. bzoj千题计划238:bzoj3668: [Noi2014]起床困难综合症

    http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这..一位一位的来就好了呀 #include<cstdio> #include&l ...