1. 程式人生 > >Shell程式設計---批量建立檔案

Shell程式設計---批量建立檔案

1) 請使用for迴圈在指定的/yuki目錄下建立10個檔案,檔名分別為:

yuki-1.html,
yuki-2.html,
yuki-3.html,
.....
yuki-10.html

分析:

  1. 所有檔名首尾相同,只是中間部分以數字的規律變化了,所以檔名可以用數字迴圈與首尾固定的內容進行拼接;
  2. 注意一個隱形問題:就是指定的/yuki目錄是否已經建立,這個需要進行判斷;

解答:

方法1:
#!/bin/sh
source /etc/profile
if [ ! -d /yuki ];
	then
		mkdir -p /yuki
fi

for  num in {1..10}
do
	touch /yuki/yuki-${num}.html    #因為建立檔案到指定目錄,所以建立時最好用全路徑;
done

方法2:
#!/bin/sh
source /etc/profile
[ ! -d /yuki ] && mkdir  -p /yuki
for  i in `seq 1 10`
do
	touch /yuki/yuki-${i}.html
done
方法3:
#!/bin/sh
source /etc/profile
if test !  -d /yuki ;
	then 
		mkdir  -p /yuki
fi

for  n in `seq 10`
do
	touch /yuki/yuki-${n}.html
done

2) 用for迴圈實現將以上檔名中的yuki全部改成linux,並且將副檔名改成大寫。

linux-1.HTML
linux-2.HTML
linux-3.HTML
......
linux-10.HTML
特殊要求:for迴圈的迴圈體不能出現檔名中的yuki字串。

分析:

  1. 因為要求修改檔名首尾部分,而中間的數字不變化,如果題目不做特殊要求的話,這道題我們大可以直接迴圈數字將每個檔案遍歷出來之後用mv命令修改檔名的首尾部分;
  2. 但是,不是每道題都向這樣有規律(檔名中間的數字不發變化),在無規律的情況下顯然這種方法是行不通的;

解答:

方法1:
#!/bin/sh
source /etc/profile
    
for n in `seq 1 10`
do
 	mv  /yuki/yuki-${n}.html  /yuki/linux-${n}.HTML
done
#注意:這種方法屬於投機取巧,適用範圍較小。
方法2:
#!/bin/sh
source /etc/profile

cd /yuki
for file in `ls ./*.html`
do
		#sed命令進行檔名替換
		
	mv ${file}  ` echo $file | sed 's#yuki#linux#g' | sed 's#html#HTML#g' `
done
方法3:
#!/bin/sh
source /etc/profile

cd /yuki

for file in `ls ./*.html`
do
	#sed命令進行匹配然後再進行替換(正則表示式)
	
	mv ${file}  `echo ${file} | sed 's#yuki\(.*\).html#linux\1.HTML#g' `
done