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,$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/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

获取明天日期时间

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
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

shell拼接字符串

#!/bin/bash

name="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 $str5

nowdate=$(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” 原因和解决

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 什么是shell脚本? Shell脚本是一种编程语言,它是在Unix和Linux操作系统中使用的一种脚本语言。它可以帮助用户自动化任务,并且可以运行一系列命令。 Shell脚本通常以.sh扩展名结尾。 2. 为什么要学习shell脚本? 学习shell脚本可以帮助你自动化任务,提高工作效率。Shell脚本也可以帮助你编写小工具,方便你自己或其他人使用。Shell脚本还可以帮助你更好地理解Linux和Unix操作系统。 3. 如何编写一个简单的shell脚本? 首先,在命令行中输入命令nano test.sh,创建一个名为test.sh的文件。然后,在文件中输入以下内容: #!/bin/bash echo "Hello World" 接着,按下Ctrl + X,然后按下Y,最后按下Enter,保存并退出文件。接下来,您需要在命令行中输入以下命令: chmod +x test.sh ./test.sh 这将使test.sh文件可执行,并运行脚本。在命令行中,您应该看到输出“Hello World”。 4. shell脚本中的注释是什么? 注释是用于向脚本中添加说明和文档的文本。在Shell脚本中,注释以“#”开头。注释不会被脚本解释器执行,但可以帮助其他人更好地理解脚本。 5. 如何在shell脚本中使用变量? 变量是一个用于存储值的占位符。在Shell脚本中,您可以使用以下语法来定义变量: my_variable="Hello World" 您可以使用echo命令来输出变量的值: echo $my_variable 6. 如何在shell脚本中使用条件语句? 在Shell脚本中,您可以使用条件语句执行基于条件的操作。以下是一个示例条件语句: if [ $my_variable = "Hello World" ] then echo "The variable contains Hello World" else echo "The variable does not contain Hello World" fi 7. 如何在shell脚本中使用循环? 在Shell脚本中,您可以使用for循环或while循环来执行重复的操作。以下是一个示例for循环: for i in 1 2 3 4 5 do echo $i done 以上代码将输出数字1到5。 8. 如何在shell脚本中使用函数? 在Shell脚本中,您可以使用函数来组织和重复使用代码。以下是一个示例函数: function say_hello { echo "Hello World" } 您可以通过以下方式调用函数: say_hello 9. 如何从shell脚本中读取用户输入? 在Shell脚本中,您可以使用read命令来从用户那里读取输入。以下是一个示例: echo "What is your name?" read name echo "Hello $name" 以上代码将提示用户输入他们的名字,并输出“Hello”后跟用户的名字。 10. 如何在shell脚本中使用命令行参数? 在Shell脚本中,您可以使用$1、$2、$3等变量来访问命令行参数。例如,以下是一个示例脚本,它接受两个命令行参数并将它们相加: #!/bin/bash sum=$(($1 + $2)) echo "The sum of $1 and $2 is $sum" 您可以使用以下命令来运行脚本并传递两个参数: ./test.sh 2 3 以上代码将输出“The sum of 2 and 3 is 5”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值