2009年2月5日 星期四

大小寫互換

很多人換大小寫會用程式語言來作,不過我覺得殺雞焉用牛刀,恰好也該開始練習shell script了!
#!/bin/bash

read -p "請輸入: 1.大轉小 2.小轉大 3.指定轉換副檔名: " choice

case "$choice" in
1) for file in *
do
  lower=`echo "$file" | tr [:upper:] [:lower:]`
  [ "$file" != "$lower" ] &&
  mv "$file" "$lower"
done
echo "轉換完成!"
ls
exit 0
;;

2) for file in *
do
  upper=`echo "$file" | tr [:lower:] [:upper:]`
  [ "$file" != "$upper" ] &&
  mv "$file" "$upper"
done
echo "轉換完成!"
ls
exit 1
;;

3) echo  "輸入欲轉換副檔名:"
read subname
echo  "輸入轉換後的副檔名:"
read newsubname

for file in *.$subname
   do
       mv "$file" "$(basename $file .$subname).$newsubname"
   done
# basename的語法:
# basename /usr/bin/sort       Output "sort".
# basename include/stdio.h .h  Output "stdio".
echo "轉換完成!"
ls
exit 2
;;
*) echo "請輸入1或2。程式終止!"
;;
esac

exit 3
大家試試看吧@! 事實上,我比較喜歡用rename這個指令。利用rename的話,紅色的那行指令可以改寫成:
rename  's/$subname/$newsubname/'  *.$subanme
不過,我手邊現有的機器只有debian跟opensuse 11.1,雖然兩者都有rename指令,不過rename對於opensuse卻沒有效果,也沒有錯誤訊息。查了一下rename是在util-linux套件裡,我也檢查了opensuse確實有安裝util-linux,但就是無效;因此我才選用紅色的code作為各版本通用的script。 OpenSuSE裡的rename用法,以此情況應該改成如下:
rename ".$subname"  ".$newrename"  *.subname
這實在是很不太妙,我竟然要去考慮不同linux間的相同指令的問題!目前只好用basename的的方法來做了!

沒有留言: