1. 程式人生 > >【shell】shell遍歷檔案,拼接內容(while迴圈)

【shell】shell遍歷檔案,拼接內容(while迴圈)

相信程式設計師對於linux應該是挺熟悉的,對於基本命令也ok,但是可能有一部分人,其實對於shell的語法,總是不太熟悉(運維除外),比如我這個菜雞,每次寫shell(因為不經常寫),都要先百度一波,才能寫出來(寫完又容易忘)。

所以該篇文章稍微記錄下,這次寫的內容。

背景:

就是我要往我的spark任務裡面傳入引數,這個引數是使用者在執行的時候,指定的一個文字,裡面是一些url(管他是什麼呢,反正就是要我傳進去),大概像這樣!

當然,假設所有的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]

好了,簡單的文章就不加太多廢話了,菜雞一個,如果有說錯的,大家可以給我留言~!多謝