今天碰到一个问题特别奇怪!

sh/bash/dash/ksh/zsh等Shell脚本
回复
Jacky_602
帖子: 1
注册时间: 2007-11-02 10:40

今天碰到一个问题特别奇怪!

#1

帖子 Jacky_602 » 2007-11-02 10:47

今天编了一个shell:
#
#把参数带入的字符划分类型
#
if [ "$#" -ne 1 ]
then
echo "用法: ctype 字符"
exit 1
fi

#
#请确保只键入一个字符
#

char="$1"
numchars=$(echo "$char" | wc -c)

if [ "$numchars" -ne 2 ]
then
echo "请键入一个字符"
exit 1
fi

#
#现在给它分类
#

case "$char" in
[0-9]) echo 数字;;
[a-z]) echo 小写字母;;
[A-Z]) echo 大写字母;;
*) echo 特殊字符;;
esac
root@tanrui-desktop:/bin# sh -x ctype A
#检测结果:
+ [ 1 -ne 1 ]
+ char=A
+ echo A
+ wc -c
+ numchars=2
+ [ 2 -ne 2 ]
+ echo 大写字母
大写字母
root@tanrui-desktop:/bin# ctype A
小写字母
真的很奇怪!
我检测脚本明明输入A显示结果是大写字母,但是当我对A运行脚本时,结果却是小写字母!!
而且同样参数为B时结果也一样。
但是当参数为C-Z时,结果就是大写字母了。难道系统对A和B不识别?
希望高手们多多指教,小弟多谢!!
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#2

帖子 bones7456 » 2007-11-02 10:58

ABS Guide 写了: 1 #!/bin/bash
2 # 测试字符串范围.
3
4 echo; echo "Hit a key, then hit return."
5 read Keypress
6
7 case "$Keypress" in
8 [[:lower:]] ) echo "Lowercase letter";;
9 [[:upper:]] ) echo "Uppercase letter";;
10 [0-9] ) echo "Digit";;
11 * ) echo "Punctuation, whitespace, or other";;
12 esac # 允许字符串的范围出现在[中括号]中,
13 #+ 或者出现在POSIX风格的[[双中括号中.
14
15 # 在这个例子的第一个版本中,
16 #+ 测试大写和小写字符串的工作使用的是
17 #+ [a-z] 和 [A-Z].
18 # 这种用法在某些特定场合的或某些Linux发行版中不能够正常工作.
19 # POSIX 的风格更具可移植性.
关注我的blog: ε==3
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15

#3

帖子 iblicf » 2007-11-02 11:06

前边+上 LANG=C try1try ...
回复