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天后的日期

转载于:https://www.cnblogs.com/ahu-lichang/p/6692546.html

shell编程快速入门及实战相关推荐

  1. Shell 编程快速入门

    什么是Shell脚本? Shell脚本(英语:Shell script)是一种电脑程序与文本文件,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作.被当成是一种脚本语言来设计 ...

  2. shell编程快速入门(一)

    shell脚本书写规范 shell脚本编程规范与书写习惯 1.开头加脚本解释器 2.附带作者及版权信息 3.脚本扩展名为 *.sh 4.脚本存放在固定的目录下 5.脚本尽量不使用中文 6.成对的符号 ...

  3. Linux Bash Shell编程快速入门

    BASH 的基本语法 最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  4. Shell 脚本 快速入门到实战 -02

    7 流程控制 (重点) ​ 7.1 case 语句 ​ 7.2 case语句 ​ 7.3 for 循环 ​ 7.4 while循环 8 read 读取控制台输入 9 函数 ​ 9.1 系统函数 ​ 9 ...

  5. Shell编程从入门到入土

    1. Shell 编程的作用 将一些复杂的命令简单化(平时我们提交一次github代码可能需要很多步骤,但是可以用Shell简化成一步) 可以写一些脚本自动实现一个工程中自动更换最新的sdk(库) 自 ...

  6. 【Socket网络编程进阶与实战】------ Socket网络编程快速入门

    前言 本篇博客主要是分享,socket网络编程进阶与实践☞socket网络编程快速入门 一.聊一聊Socket 学习目标与收获

  7. pdf python 3.7编程快速入门 潘中强_无python基础,这些书籍可以帮您快速入门。

    利用Python进行数据分析> 定 价:119 元 作者:韦斯·麦金尼(Wes McKinney)著;徐敬一译 ISBN:9787111603702 出 版 社:机械工业出版社 学习Python ...

  8. appinventor2 MySQL,写给大家看的安卓应用开发书 App Inventor 2快速入门与实战pdf

    没错,你有能力创建自己的安卓应用,而且一点都不难.AppInventor2,让你分分钟成为应用开发者! 本书由浅入深地介绍了强大的可视化编程工具AppInventor2,任何人都可以用它来开发自己的应 ...

  9. C++网络编程快速入门(四):EPOLL模型使用

    目录 基本使用方法 step1:创建epollfd step2:将fd绑定到epollfd step3:调用epoll_wait检测事件 epoll_wait与poll.select区别所在 水平触发 ...

最新文章

  1. 内存有限的情况下 Spark 如何处理 T 级别的数据?
  2. centos 6.8 + postgresql 9.6 + file_fdw
  3. 【转】我该 不该学习VULKAN
  4. Java—Collection、Map、树
  5. Statement与PreparedStatement的区别
  6. 上dj是什么意思_火花塞上的每个编码是什么意思
  7. wince 内存释放_【转载】让我生不如死的WINCE内存泄漏
  8. 算法笔记_面试_0.刷leetcode攻略
  9. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第2节 TCP协议_3_TCP通信的客户端代码实现...
  10. C# 滑块长度确认 Scrollbar滑块长度问题 水平垂直滚动条滑块高度宽度问题
  11. Navicat15注册时报错 rsa public key not find
  12. BP神经网络及其学习算法
  13. c#通过126邮箱自动发送 微信端实现QQ邮箱邮件提醒
  14. iPhone手机屏幕尺寸详细表格、A10和A11处理器介绍
  15. 趣图:道高一尺,魔高一丈
  16. 苹果cmsV10添加全屏幻灯图、全屏轮播图教程
  17. 微信公众平台-测试号-测试接口的问题
  18. for(auto a :b)
  19. mean shift:从图像分割到特征空间分析
  20. 团队开发背景及团队分工

热门文章

  1. python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上
  2. python接口自动化(十九)--Json 数据处理---实战(详解)
  3. java的printf语法_Java中printf的用法总结
  4. pyintaller exe 后 print的内容 怎么体现_使用Github Actions自动化构建exe
  5. php如何让B链接在当前页面打,javascript - 如何实现点击链接 A 弹出窗口 X,点击链接 B 继续在弹出窗口 X (刷新)打开?...
  6. 最新log4j2 远程代码执行漏洞(紧急扩散)
  7. Sharepoint-拾贝
  8. java 线程map_map集合分割以及多线程处理数据
  9. 滚动图片广告_女排赢球可喜看台马桶广告扎眼 网友:去男足赛场!别在这儿蹭热点...
  10. java tinyradius使用_TinyRadius客户端java登录认证