下雨的星期天 - 有多少空閒時間 - 長的答案;)
許多國際空間站你的腳本,一些推薦的解決方案。因爲您使用的是建築m=$((m+1))
- 將使用bash
作爲「外殼」。 (考慮加入bash
標籤)
對於週期 - 幾種可能性
count=10
m=2 #start with 2
while (($m <= $count)) #while m is less or equal to 10
do #do
echo $m #this action
let m++ #increment m (add one to m)
done #end of while
或者,如果算上是一個常數(不變量),你可以寫
for m in {2..10} #REMEMBER, will not works with a variables, like {2..$count}
do
echo "$m"
done
另一種變體 - 使用seq
(man seq)指令進行計數
for m in $(seq 2 ${count:=10}) # ${count:=10} - defaults the $count to 10 if it is undefined
do
echo $m
done
或類C爲環路
let count=10
for ((m=2; m<=count; m++))
do
echo $m
done
所有4個循環產生:
2
3
4
5
6
7
8
9
10
所以,現在具有正確的週期。現在添加您的具體操作。
的:
rm -f $op
touch $op
可以由一個命令
echo -n > $op #echo nothing and write the "nothing" into the file
它更快被替換,因爲echo
是bash builtin(不啓動兩個外部命令)
所以你的行爲可能看起來像
cat $op ${arr[$m]} > $op1
echo -n > $op
cat $op1 ${arr[$m+1]} > $op
在這種情況下,echo
是無用的,這是因爲第二cat
將反正寫入其輸出 到$ OP(和之前寫入縮短了文件大小爲零),所以該結果是 與上述
相同
cat $op ${arr[$m]} > $op1
cat $op1 ${arr[$m+1]} > $op
這兩個cat
命令可以短到一個,使用bash的>>
追加到文件重定向
cat ${arr[$m]} ${arr[m+1]} >> $op
整個腳本可以看樣下
#making a testing environment
for f in $(seq 12) #create 12 files opdata-N
do
arr[$f]="opdata-$f" #store the filenames in the array "arr"
echo "data-$f" > ${arr[$f]} #each file contains one line "data-N"
done
#echo ${arr[@]}
#setting the $op and $op1 filenames
#consider choosing more descriptive variable names
op="file_op"
#op1="file_op1" #not needed
#add some initial (old) value to $op
echo "initial value" > $op
#end of creating the testing environment
#the script
count=10
for m in $(seq 2 $count)
do
cat ${arr[$m]} ${arr[m+1]} >> $op
done
末,文件$op
將包含:
initial value
data-2
data-3
data-3
data-4
data-4
data-5
data-5
data-6
data-6
data-7
data-7
data-8
data-8
data-9
data-9
data-10
data-10
data-11
順便說一句,你確定的結果呢?因爲如果只是想添加file-2
... file-10
到$op
結束(不重複的條目),你可以簡單的寫:
cat file-{2..10} >> $op #the '>>' adds to the end of file...
或使用你的數組:
startpos=2
count=10
cat ${arr[@]:$startpos:$count} >> $op
UFFF ..;)
ps:通常情況下,將變量用雙引號括起來是一種很好的做法,如"$filename"
- 在上述示例中,爲了提高可讀性,我省略了它們。
你的腳本中是否真的有很多反引號,或者試圖讓代碼看起來像代碼?要獲取代碼,請按照您希望看到的方式編寫代碼,然後選擇它,然後使用編輯框上方的**按鈕 - 但您已經足夠長時間了,應該知道這一點。所寫的代碼將會'工作',但僅僅是因爲Unix命令對成功保持沉默並且所有命令都不會產生標準輸出,所以反引號執行一個空命令,但這是寫shell的一種簡單的反常方式。 –