需要解析乙個文字,裡面描述了客戶分割槽引數,形式如下
imageconfig.cfg
====
====
====
====
====
====
====
====
====
====
====
env 1024 2048 env.fex
kernel 2049 33791 boot.img
recovery 33792 164863 recovery.img
玩法就是把每一行拆成單獨的資料,送入對應陣列中,最後形成
partname=
(env kernel recovery)
partstart=
(1024 2049 33792)
partend=
(2048 33791 164863)
partfs=
(env.fex boot.img recovery.img)
這樣就可以對應上我之前寫的指令碼,自行將資料寫入fakemmc.img
我個人非常不喜歡修改ifs來自定義拆分陣列的方式,修改$ifs一定要成對出現,指令碼結束時要還原,不然系統就被你改了,那如果在指令碼執行中途出現意外,那就還原不了。就很煩,用了兩次直接pass了
這一段用的時候發現兩個很詭異的問題。
陣列我傳不出去。當這個迴圈結束後,所有賦值都消失了。
i變回了0,陣列沒有任何值
猜想是否 cat 管道,賦值是在另乙個空間完成,變數沒有留到主空間來
如果cfg結尾不加乙個空白行,那麼最後一行資料會丟失
cat imageconfig.cfg |
while
read partname_ partstart_ partend_ partfs_
do partname[i]
=$partname_
partstart[i]
=$partstart_
partend[i]
=$partend_
partfs[i]
=$partfs_
echo$i$
$partname_
let"i++"
done
所以我又換了一種方法,直接重定向,結果是可行的。
上面兩個問題都解決了
while
read partname_ partstart_ partend_ partfs_
do partname[i]
=$partname_
partstart[i]
=$partstart_
partend[i]
=$partend_
partfs[i]
=$partfs_
echo$i$
$partname_
let"i++"
done
partnum=
$for
((i=
0;i<$partnum;i++
))do
echo$$
$$done
因為賦值不是問題,那麼$partname_這種中間變數就變得沒有意義了,直接刪掉
while
read partname[i] partstart[i] partend[i] partfs[i]
dolet
"i++"
done
partnum=
$for
((i=
0;i<$partnum;i++
))do
echo$$
$$done
使用形如
i=0
while
read array1[i] array2[i] array2[i]
dolet
"i++"
done
簡單又快樂
使用shell按行讀取檔案
在shell裡面,按行讀取檔案得注意設定環境變數ifs,否則無法正確讀入。具體例子如下 oldifs ifs ifs n file home xx txt in file home in for pattern in cat do grep v e pattern done ifs oldifs要按...
shell讀取文字
for迴圈和while迴圈按行讀取 示例 bin bash 適用於工作日誌文字中某特殊列值處理 awk data.txt mydata.txt 取第三列的值儲存 len cat data.txt wc l 文字行數計算 i 1 while i len 1 dosed n p mydata.txt i...
C 讀取PDF PDFBox使用
這個絕對是個好 將以上4個檔案引用到專案中,在檔案中需要引入以下2個命名空間 using org.pdfbox.pdmodel using org.pdfbox.util 三 api的使用方法 using system.io using system.text using org.pdfbox.pd...