shell脚本编写笔记
简介
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脚本编写笔记相关推荐
- Shell脚本语言笔记
Shell脚本语言笔记 一.shell是什么? 二.Shell 是一种脚本语言 1.定义变量 2.单引号和双引号的区别: 3.将命令的结果赋值给变量,常见的有以下两种方式: 4.只读变量 5.删除变量 ...
- shell 脚本编写 if else then
shell 脚本编写 if else then if ....; then .... elif ....; then .... else .... fi 大多数情况下,可以使用测试命令来对条件进行测试 ...
- Shell awk文本处理,shell脚本编写
Shell awk文本处理,shell脚本编写 一:内容包含awk.变量.运算符.if多分支 <a>语法糖: awk [options] 'commands' files option - ...
- 7. Shell 脚本编写
7. Shell 脚本编写 1.提示用户输入一个字符串,如果是 hello,打出 yes,并每秒输出 "hello,world",否则就输出 no,实现如下: #!/bin/bas ...
- shell脚本编写遇到的问题--循环
shell脚本编写遇到的问题 0 背景 工作中需要修补数据,大概半年的数据;跑数据是scala脚本+python脚本,如果手动补充数据,需要运行180次- 于是,shell脚本搞起来- 1 规划思路 ...
- linux脚本对磁盘分区,shell 脚本实战笔记(4)--linux磁盘分区重新挂载
背景: Hadoop的HDFS文件系统的挂载, 默认指定的文件目录是/mnt/disk{N}. 当运维人员, 不小心把磁盘挂载于其他目录, 比如/mnt/data, /mnt/disk01, /mnt ...
- datetime报错 sql脚本_Linux中Mysql数据库备份shell脚本编写实例
学了段时间的Linux,也学习了shell脚本编写的基本命令与语法,现做一个综合案例来详细讲解. 要求:1).每天凌晨备份数据库shaoxiao到/data/backup/db中 2).备份开始和备份 ...
- Linux系统一键安全加固shell脚本编写思路
本次分享一下个人在对Linux系统一键安全加固shell脚本编写时的一些思路: Linux系统一键安全加固shell脚本编写思路 1.编写须知 1.1 脚本使用说明 1.2 主要功能说明: 1.3隐藏 ...
- linux脚本设计菜单,菜单式shell脚本编写
用shell脚本编写有以下的功能: Syste Manage 1.show the user //显示登陆系统用户以及动作. 2.test the network //网络测试 3.show the ...
- Linux编写脚本nsum求和,详解Linux Shell脚本编写技巧,附实例说明
原标题:详解Linux Shell脚本编写技巧,附实例说明 Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法很都掌握,但有需求时,很难直接上手编程,要么写了很久,要么写不好!对 ...
最新文章
- echarts X轴 或者 Y轴 添加标识线
- asp.net控件本质
- HDU 1757 A Simple Math Problem (矩阵快速幂)
- js 获取java_js中获取当前时间
- shell预先定义的特殊变量
- Node.js 应用故障排查手册 —— 利用 CPU 分析调优吞吐量
- Codeforces Round #182 (Div. 1)题解【ABCD】
- TensorFlow使用--MNIST分类学习(BP神经网络)
- Date类的getYear(),getMonth过时,现在的获取方法
- linux 串口是否可写,串口编程可写入不能读取 怎么解决
- python学习之继承
- 中图分类法----T-0
- 订阅消息 data.thing1.value is emtpy
- android 支付宝登录无法返回
- Target DLL has been cancelled
- composer require fxp/composer-asset-plugin 失败
- 大前端CPU优化技术--NEON技术
- 神舟精盾 t97 键盘背光灯如何设置亮的时间
- ASK调制的matlab代码
- 灰关联分析与语音/音乐信号识别