shell脚本编写笔记

简介

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

编写一个简单的shell脚本

新建一个脚本文件:

gedit hello.sh 

输入以下内容:

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

给脚本添加可执行权限:

chmod +x hello.sh

运行脚本:

./hello.sh

参考资料:菜鸟教程

shell脚本传参

新建一个 copy.sh脚本:

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

运行脚本:

./copy.sh  192.168.0.X  lxxinn

然后按照提示输入命令。

获取当前时间

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

time1=$(date)
echo $time1

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

time3=$(date -d "3 day ago" +%Y%m%d)
echo $time3

可在菜鸟教程的在线编辑器运行上述脚本查看效果。
参考: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
do
	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
	fi
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

你可能感兴趣的:(Linux)