Shell程式設計---批量建立檔案
阿新 • • 發佈:2018-11-08
1) 請使用for迴圈在指定的/yuki目錄下建立10個檔案,檔名分別為:
yuki-1.html,
yuki-2.html,
yuki-3.html,
.....
yuki-10.html
分析:
- 所有檔名首尾相同,只是中間部分以數字的規律變化了,所以檔名可以用數字迴圈與首尾固定的內容進行拼接;
- 注意一個隱形問題:就是指定的/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字串。
分析:
- 因為要求修改檔名首尾部分,而中間的數字不變化,如果題目不做特殊要求的話,這道題我們大可以直接迴圈數字將每個檔案遍歷出來之後用mv命令修改檔名的首尾部分;
- 但是,不是每道題都向這樣有規律(檔名中間的數字不發變化),在無規律的情況下顯然這種方法是行不通的;
解答:
方法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