博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本编写笔记
阅读量:4290 次
发布时间:2019-05-27

本文共 2969 字,大约阅读时间需要 9 分钟。

简介

shelll脚本就是将在控制台运行的内容,放在shell脚本里集中运行。可以将平常需要经常重复输入的操作放在shell脚本里批量自动运行。

本文主要介绍如何编写简单的shell脚本,给shell脚本传参,shell脚本获取当前运行时间,通过shell执行hql语句。

编写一个简单的shell脚本

新建一个脚本文件:

gedit hello.sh

输入以下内容:

#!/bin/bashecho "Hello world!"

给脚本添加可执行权限:

chmod +x hello.sh

运行脚本:

./hello.sh

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

sh hello.sh

参考资料:

shell脚本传参

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

#!/bin/bash        #定义2个变量:$1,$2    echo "主机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/bashecho "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执行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 truedo	time1=$(date "+%H%M%S")     #获取当前时间时分秒,%H%M%S格式	if [ $time1 -eq 015010 ]      # -eq:等于,当时分秒等于1点50分10秒时,执行如下操作	then		time2=$(date  -d "9 day ago" +"%Y%m%d")    #获取当前日期的9天前日期		echo $time2		time3=$(date -d "11 day ago" +%Y%m%d)		echo $time3		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 -hiveconf far_date=$time3 -hiveconf near_date=$time2 -f /aiuser/limin_ai/update.hql	fidone

此脚本的主要作用是,定时执行如下操作:进入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 $str1echo $str2echo $str3echo $str4echo $str5nowdate=$(date "+%Y%m%d")echo $nowdatesource="/data_source_"$nowdate".txt"echo $source

参考:

常见错误:

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

在这里插入图片描述
报错原因:
我的这个脚本是在windows系统中写的,文件格式是dos,需要改成unix的:
:set ff 查看文件格式
在这里插入图片描述
:set ff=unix 设置文件格式为unix:
在这里插入图片描述

转载地址:http://azegi.baihongyu.com/

你可能感兴趣的文章
elasticsearch7.3版本已经不需要额外安装中文分词插件了
查看>>
【重大好消息】elasticsearch 7.3版本已经可以免费使用x-pack就可以设置账号和密码了,让你的数据不再裸奔
查看>>
解决使用logstash中jdbc导入mysql中的数据到elasticsearch中tinyint类型被转成布尔型的问题的方法
查看>>
elasticsearch7.3版本环境搭建(一)elasticsearch安装和配置
查看>>
SEO基本功:站内优化的一些基本手段
查看>>
centos6系列和7系列如何对外开放80,3306端口号或者其他端口号
查看>>
为什么您宁愿吃生活的苦,也不愿吃学习的苦?为什么你不愿意去学习呢
查看>>
解决elasticsearch7.3版本安装过程中遇到的包括内存不够、线程不够等问题
查看>>
日常项目测试用例检查点(来自一线测试人员的吐血总结)
查看>>
网站建设之域名注册和域名备案
查看>>
解决bootstrap时间输入框总被浏览器记住的记录遮挡住的问题
查看>>
git将一个分支完全覆盖另外一个分支如:dev分支代码完全覆盖某一个开发分支
查看>>
elasticsearch7.3版本环境搭建(二)可视化管理后台kibana的安装和配置
查看>>
elasticsearch7.3版本环境搭建(三)可视化管理后台kibana的汉化(设置中文界面)
查看>>
记录一次DDos攻击实战
查看>>
分享一首小诗--《致程序员》
查看>>
为什么百度只抓取了首页而不抓取我的网站的内页的原因分析
查看>>
年薪170万的阿里P8级员工征婚有感--话说阿里真有钱,这员工要求的条件真多
查看>>
又是一年桂花飘香时,祝我们伟大的祖国70年华诞更加繁荣昌盛,祝大家国庆节快乐
查看>>
谷歌浏览器chrome即将在2020年底停止支持flash,我们程序员该怎么办
查看>>