1. 程式人生 > >shell 整理(27)===大小寫字母替換修改文件名

shell 整理(27)===大小寫字母替換修改文件名

shell  心得   思考

(一)題目:

(1)創建一個文件夾

(2)文件夾裏面有10 個以任意字母或數字開頭的文件

(3)如果開頭第一位數字就不做改變

(4)如果開頭第一位字母就改成大寫

例如:修改後的結果

[[email protected] hushuai]# ls

06e28fe4 5b1775ab 74d1badf Cccb27b2 F3619201

3bfaa07c 6bd6b971 C4a1f7d8 Db3308c4 F6403885

[[email protected] hushuai]#



shell 代碼如下:

#!/bin/bash


a=`ls hushuai/ |xargs -n1`

echo "$a" |while read line         #這個地方必須加雙引號,細節,不加不解析空格

do

b=`echo $line | cut -c1`

c=`echo $line |cut -c2-`

d=`echo $b |grep -c ‘[a-z]‘` #必須加[],和tr 不一樣

if [ $d -eq 1 ];then

e=`echo $b | tr ‘a-z‘ ‘A-Z‘`

mv hushuai/$b$c hushuai/$e$c 2>/dev/null

fi # mv 舊名字 新名字

done

這樣寫顯得沒有條理,紛繁復雜,我們可以把判斷改成函數,修改結果如下:

#!/bin/bash



swap(){ b=`echo $line | cut -c1`

c=`echo $line |cut -c2-`

d=`echo $b |grep -c ‘[a-z]‘`

}

a=`ls hushuai/ |xargs -n1`

echo "$a" |while read line

do

swap

if [ $d -eq 1 ];then

e=`echo $b | tr ‘a-z‘ ‘A-Z‘`

mv hushuai/$b$c hushuai/$e$c 2>/dev/null

fi #如果說你執行多次腳本,名字第一次已經改過來了

done 就會報錯,我們讓錯誤輸出到空



然後我們給這個題目做一下升級

(1)創建一個文件夾

(2)文件夾裏面有10以dingxue為開頭的任意6-10位隨機數組成

(3)把dingxue 的首字母ding 換成任意一個大寫字母

(4)把後面的6-10位隨機數換成等長度的小寫字母

例如:


[[email protected] hushuai]# ls ding/

dingxue87495987 dingxue885527619 dingxue894674790 dingxue908168

dingxue87819699 dingxue8884654 dingxue8974959

dingxue8810688 dingxue89173327 dingxue903851012


shell 代碼如下:

#!/bin/bash


#for i in `seq 10`

#do

# b=$((RANDOM%4+6))     #隨機數的應用

# a=`date +%N`

# c=`echo $a | cut -c1-$b`

# touch dingxue$c

#done


a=`ls ding/ |xargs -n1`

echo {A..Z} |xargs -n1>file

d=`cat file | wc -l`

echo "$a" |while read line

do

e=$((RANDOM%$d+1))

 w=`echo $line |awk -F ‘[0-9]‘ ‘{print $1}‘`

  b=`echo $line | cut -c 1`

  f=`cat file | sed -n ‘‘$e‘p‘`

  g=`echo $w |sed ‘s/‘$b‘/‘$f‘/‘` #sed 、awk 引用變量都加個單引號

#echo $g 具體情況具體定

  h=`echo $line| awk -F‘[a-z]‘ ‘{print $8}‘`

i=`echo $h |tr ‘‘$h‘‘ ‘a-z‘` #這裏也是,一定要註意我的引號

echo $g$i

done

這是我剛開始寫的,是不是看上去很亂呢,我們可以把判斷部分改成函數,修改結果如下:

shell 代碼:


#!/bin/bash


prepare() {

a=`ls ding/ |xargs -n1`

echo {A..Z} |xargs -n1>file

d=`cat file | wc -l`

}

random () {

e=$((RANDOM%$d+1))

}

virable () {

w=`echo $line |awk -F ‘[0-9]‘ ‘{print $1}‘`

b=`echo $line | cut -c 1`

f=`cat file | sed -n ‘‘$e‘p‘`

g=`echo $w |sed ‘s/‘$b‘/‘$f‘/‘`

h=`echo $line| awk -F‘[a-z]‘ ‘{print $8}‘`

i=`echo $h |tr ‘‘$h‘‘ ‘a-z‘`

}

prepare

echo "$a" |while read line

do

random

virable

echo $g$i

done

這樣是不是清晰了很多了呢?



本文出自 “IT生活” 博客,謝絕轉載!

shell 整理(27)===大小寫字母替換修改文件名