简介

shelll脚本就是将在控制台运行的内容,放在shell脚本里集中运行。可以将平常需要经常重复输入的操作放在shell脚本里批量自动运行。
本文主要介绍如何编写简单的shell脚本,给shell脚本传参,shell脚本获取当前运行时间,通过shell执行hql语句。

编写一个简单的shell脚本

新建一个脚本文件:

gedit hello.sh

输入以下内容:

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

给脚本添加可执行权限:

chmod +x hello.sh

运行脚本:

./hello.sh

若不给脚本添加可执行权限,也可通过如下命令直接运行:

sh hello.sh

参考资料:菜鸟教程

shell脚本传参

新建一个 copy.sh脚本,将本地主机上/home/hadoop/hello.sh文件拷贝到某个远程主机,此远程主机的ip和用户名通过传参输入。

    #!/bin/bash#定义2个变量:$1,$2echo "主机ip:$1"echo "用户名:$2“#远程拷贝:scp 源文件 用户名@目的地ip:目的地文件夹,例如:scp  /home/hadoop/hello.sh  $2@$1:/home/lxxinn

运行脚本时,第一个参数会传给变量$1,第二个参数会传给变量$2。参数序号从1开始。运行命令:

sh copy.sh  192.168.0.X  user

即可运行copy.sh脚本。

获取当前日期时间

#!/bin/bash
echo "Hello World 2!"time1=$(date)
echo $time1time2=$(date "+%Y%m%d")
echo $time2time3=$(date -d "3 day ago" +%Y%m%d)
echo $time3

获取明天日期时间

time2=$(date -d 'tomorrow' "+%Y%m%d")
echo $time2

或:

time2=$(date -d '+1 days' "+%Y%m%d")
echo $time2

获取昨天日期

time2=$(date -d '-1 days' "+%Y%m%d")
echo $time2

可在菜鸟教程的在线编辑器运行上述脚本查看效果。
参考:shell脚本实现取当前时间

shell执行hql语句

通过beeline工具在控制台登录hive时,是做如下操作:

cd ..
cd e3base/hive-1.1.0-cdh5.14.0-e3base3.0.0/bin
./beeline -u jdbc:hive2://host-1**-**-***-**:1***/aiuser -n user -p 123456

通过shell脚本打开hive,并给hql脚本传参,然后执行。
hql语句如下:

use 数据库名;    #删除分区表某个分区的数据,参数由shell脚本传入
alter table cpu_partition_limin_copy drop partition (partition_date ='${hiveconf:far_date}');#从一个分区表往另一个分区表添加某个分区的数据
insert into table cpu_partition_limin_copy partition (partition_date = '${hiveconf:near_date}')select ip,value from cpu_partition_limin where (partition_date = '${hiveconf:near_date}');

shell脚本如下:

#!/bin/bash      #用bash语言解释本文件内容
echo "hello"
while true
dotime1=$(date "+%H%M%S")     #获取当前时间时分秒,%H%M%S格式if [ $time1 -eq 015010 ]      # -eq:等于,当时分秒等于1点50分10秒时,执行如下操作thentime2=$(date  -d "9 day ago" +"%Y%m%d")    #获取当前日期的9天前日期echo $time2time3=$(date -d "11 day ago" +%Y%m%d)echo $time3cd ..cd e3base/hive-1.1.0-cdh5.14.0-e3base3.0.0/bin./beeline -u jdbc:hive2://host-1**-**-***-**:1***/aiuser -n user -p 123456 -hiveconf far_date=$time3 -hiveconf near_date=$time2 -f /aiuser/limin_ai/update.hqlfi
done

此脚本的主要作用是,定时执行如下操作:进入hive后,通过-hiveconf给hql脚本传参,执行hql脚本,删除11天前的数据,添加9天前的数据。
可以看到,cd…这句开始往下3句,和控制台执行的过程一样。

场景实例
在linux中运行spark时,需要重复输入如下spark命令,比较繁琐,还容易出错。

nohup spark-submit --master spark://master-0.master-svc:17001,master-1.master-svc:17001 --executor-memory 6G --total-executor-cores 10 net.py  > ./log/log.txt 2>&1 &

解决方法:
1、新建一个test.sh文件,将上述命令放到文件中,保存。
2、运行脚本:sh test.sh

shell拼接字符串

#!/bin/bashname="Shell"
url="http://c.biancheng.net/shell/"str1=$name$url  #中间不能有空格
str2="$name $url"  #如果被双引号包围,那么中间可以有空格
str3=$name": "$url  #中间可以出现别的字符串
str4="$name: $url"  #这样写也可以
str5="${name}Script: ${url}index.html"  #这个时候需要给变量名加上大括号echo $str1
echo $str2
echo $str3
echo $str4
echo $str5nowdate=$(date "+%Y%m%d")
echo $nowdate
source="/data_source_"$nowdate".txt"
echo $source

参考:Shell字符串拼接(连接、合并)

常见错误:

写了一段shell脚本后,运行时总是报错:“syntax error: unexpected end of file”

报错原因:
我的这个脚本是在windows系统中写的,文件格式是dos,需要改成unix的:
:set ff 查看文件格式

:set ff=unix 设置文件格式为unix:

shell脚本报错:“syntax error: unexpected end of file” 原因和解决

shell脚本编写笔记相关推荐

  1. Shell脚本语言笔记

    Shell脚本语言笔记 一.shell是什么? 二.Shell 是一种脚本语言 1.定义变量 2.单引号和双引号的区别: 3.将命令的结果赋值给变量,常见的有以下两种方式: 4.只读变量 5.删除变量 ...

  2. shell 脚本编写 if else then

    shell 脚本编写 if else then if ....; then .... elif ....; then .... else .... fi 大多数情况下,可以使用测试命令来对条件进行测试 ...

  3. Shell awk文本处理,shell脚本编写

    Shell awk文本处理,shell脚本编写 一:内容包含awk.变量.运算符.if多分支 <a>语法糖: awk [options] 'commands' files option - ...

  4. 7. Shell 脚本编写

    7. Shell 脚本编写 1.提示用户输入一个字符串,如果是 hello,打出 yes,并每秒输出 "hello,world",否则就输出 no,实现如下: #!/bin/bas ...

  5. shell脚本编写遇到的问题--循环

    shell脚本编写遇到的问题 0 背景 工作中需要修补数据,大概半年的数据;跑数据是scala脚本+python脚本,如果手动补充数据,需要运行180次- 于是,shell脚本搞起来- 1 规划思路 ...

  6. linux脚本对磁盘分区,shell 脚本实战笔记(4)--linux磁盘分区重新挂载

    背景: Hadoop的HDFS文件系统的挂载, 默认指定的文件目录是/mnt/disk{N}. 当运维人员, 不小心把磁盘挂载于其他目录, 比如/mnt/data, /mnt/disk01, /mnt ...

  7. datetime报错 sql脚本_Linux中Mysql数据库备份shell脚本编写实例

    学了段时间的Linux,也学习了shell脚本编写的基本命令与语法,现做一个综合案例来详细讲解. 要求:1).每天凌晨备份数据库shaoxiao到/data/backup/db中 2).备份开始和备份 ...

  8. Linux系统一键安全加固shell脚本编写思路

    本次分享一下个人在对Linux系统一键安全加固shell脚本编写时的一些思路: Linux系统一键安全加固shell脚本编写思路 1.编写须知 1.1 脚本使用说明 1.2 主要功能说明: 1.3隐藏 ...

  9. linux脚本设计菜单,菜单式shell脚本编写

    用shell脚本编写有以下的功能: Syste Manage 1.show the user //显示登陆系统用户以及动作. 2.test the network //网络测试 3.show the ...

  10. Linux编写脚本nsum求和,详解Linux Shell脚本编写技巧,附实例说明

    原标题:详解Linux Shell脚本编写技巧,附实例说明 Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法很都掌握,但有需求时,很难直接上手编程,要么写了很久,要么写不好!对 ...

最新文章

  1. echarts X轴 或者 Y轴 添加标识线
  2. asp.net控件本质
  3. HDU 1757 A Simple Math Problem (矩阵快速幂)
  4. js 获取java_js中获取当前时间
  5. shell预先定义的特殊变量
  6. Node.js 应用故障排查手册 —— 利用 CPU 分析调优吞吐量
  7. Codeforces Round #182 (Div. 1)题解【ABCD】
  8. TensorFlow使用--MNIST分类学习(BP神经网络)
  9. Date类的getYear(),getMonth过时,现在的获取方法
  10. linux 串口是否可写,串口编程可写入不能读取 怎么解决
  11. python学习之继承
  12. 中图分类法----T-0
  13. 订阅消息 data.thing1.value is emtpy
  14. android 支付宝登录无法返回
  15. Target DLL has been cancelled
  16. composer require fxp/composer-asset-plugin 失败
  17. 大前端CPU优化技术--NEON技术
  18. 神舟精盾 t97 键盘背光灯如何设置亮的时间
  19. ASK调制的matlab代码
  20. 灰关联分析与语音/音乐信号识别

热门文章

  1. 纯CSS Lightbox效果
  2. 王传福:电动汽车开始由政策与市场双轮驱动|电动车百人会2019
  3. 7种方式实现3栏布局
  4. 使用RMAN恢复目录(catalog)解析
  5. 2016-2017-2 《Java 程序设计》课堂实践项目
  6. JVM调优总结-调优方法
  7. Windows自动压缩rar以及根据日期删除脚本
  8. 【转】虚拟机检测技术
  9. JS正则表达式详解[转]
  10. 网吧的云计算机,云电脑和网吧开启线上网咖是新趋势?