【shell】shell遍歷檔案,拼接內容(while迴圈)
阿新 • • 發佈:2018-11-16
相信程式設計師對於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]