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

猜你喜欢

转载自blog.csdn.net/yuki5233/article/details/83786315