【shell】shell遍历文件,拼接内容(while循环)

相信程序员对于linux应该是挺熟悉的,对于基本命令也ok,但是可能有一部分人,其实对于shell的语法,总是不太熟悉(运维除外),比如我这个菜鸡,每次写shell(因为不经常写),都要先百度一波,才能写出来(写完又容易忘)。

所以该篇文章稍微记录下,这次写的内容。

背景:

就是我要往我的spark任务里面传入参数,这个参数是用户在运行的时候,指定的一个文本,里面是一些url(管他是什么呢,反正就是要我传进去),大概像这样!

【shell】shell遍历文件,拼接内容(while循环)_第1张图片

当然,假设所有的url都是可用的(如果会传入有误的url,那就还要在shell里面加判断,也是不难的),不过要考虑到用户传入的文本可能会有些空行,不想把空行传进代码中。

正文:

shell如下:

#!/bin/sh
# 使用while循环读取$1文本
while read -r line
do
 #判断是否是第一次读,是否读取到的数据是空行
 if [ -z $x ] && [ -n $line ] ; then
  x=$x"'"$line"'"
 #判断是否读取到该行不为空,不为空就拼接到x中
 elif [ ! -z $line ] ; then
  x=$x,"'"$line"'"
 fi
done < $1
echo $x

调用方式如下:

#通过sh来执行readtext.sh脚本,然后第一个位置传入要解析的文本位置

sh readtext.sh url.txt

#返回结果,类似如下:
'www.baidu.com','www.xxx.xxx.com','www.asds.com','www.dfasfsaa.com','www.asdsddgf.com'

这样,就实现了把文本中的数据按照一定格式拼接成一整个字符串。

然后我们就可以把这个字符串传入spark的代码中了。

大概是这样:
 

#!/bin/sh
# 使用while循环读取$1文本
while read -r line
do
 #判断是否是第一次读,是否读取到的数据是空行
 if [ -z $x ] && [ -n $line ] ; then
  x=$x"'"$line"'"
 #判断是否读取到该行不为空,不为空就拼接到x中
 elif [ ! -z $line ] ; then
  x=$x,"'"$line"'"
 fi
done < $1
echo $x

/opt/CDH/spark-2.2.0-bin-2.6.0-cdh5.12.1/bin/spark-submit \
--一大堆设置参数 \
--class XXXXX
/opt/CDH/某个sparkjar包.jar $x
#这样就可以把x这个变量传入你运行的那个类的main方法的args的第一个位置,就是args[0]

好了,简单的文章就不加太多废话了,菜鸡一个,如果有说错的,大家可以给我留言~!多谢

你可能感兴趣的:(linux,shell)