日期:2014-05-16  浏览次数:20479 次

shell编程
#!/bin/bash
str=`cat $1`
echo $str
leng=`echo $str | awk '{print length($0)}'`
for((i=1;i<=$leng;i++))
do
  temp=`echo $str | awk '{print substr($str,$i,1)}'`
  if [ "$temp" \> "A" ] && [ "$temp" \< "Z" ] || [ "$temp" == "A" ] || [ "$temp" == "Z" ]
  then
  temp=`expr $temp + 32`
  fi
  echo $temp | awk '{printf("%c",$0)}'
done
echo

目的:将文件中的大写字母转换成小写字母
为什么: temp=`echo $str | awk '{print substr($str,$i,1)}' 不能取出字符串中的每一个字符
  temp=`expr $temp + 32` 为什么不能转换成小写
还有其他方没有
谢谢各位


------解决方案--------------------
取某一位,这样看看
temp=`echo $str | cut -c$i`


转换为小写,可以参考
echo A|tr '[A-Z]' '[a-z]'
------解决方案--------------------
temp=`echo $str | awk -v ndx=$i '{print substr($0,ndx,1)}'

 外边的变量不能直接在awk里用,awk是一个独立的程序, 它负责解析命令行, shell这里无法对''内解析, 所以$i和$str不会被换成实际内容。

转小写用justkk的,这又不是C语言,没那么灵活。