分页: 1 / 1
shell编程 代码问题
发表于 : 2008-04-19 18:52
由 chinayem
代码: 全选
if [ $# -ne 1 ]
then
echo error
exit 1
fi
char=$1
#numchar=$(echo "$char" |wc -c)
if [ "$numchar" -ne 2 ]
then
echo error
exit1
fi
case "$char"
in
[0-9])echo number;;
[a-z])echo little;;
[A-Z])echo big;;
* )echo special;;
esac
我输入
sh -x ./ctype A
的时候,输出是正确的big
可输入
./ctype A
的时候,却显示‘little’
是代码的问题还是我终端设置的问题呢?
谢谢
发表于 : 2008-04-19 19:07
由 eexpress
一般我们是加第一行
#!/bin/bash
脚本,都应该习惯指到解释器的。
发表于 : 2008-04-19 19:18
由 chinayem
代码: 全选
bash -x ./ctype A
+ '[' 1 -ne 1 ']'
+ char=A
+ case "$char" in
+ echo little
little
代码: 全选
sh -x ./ctype A
+ [ 1 -ne 1 ]
+ char=A
+ echo big
big
在前面加了#!bin/bash之后,运行上面两个不同的命令,结果还是不同,这是不是解释器的不同而引起输出结果的不同呢?如果是,那对于bash,该怎么修改代码呢?
谢谢
发表于 : 2008-04-19 19:31
由 eexpress
你干嘛还强制用sh啊。那是dash啊。2个不同的。
发表于 : 2008-04-19 19:33
由 bones7456
sh -x ./ctype A
换成
bash -x ./ctype A
看看 ll /bin/sh
发表于 : 2008-04-19 19:51
由 chinayem
呵呵,是sh和bash的区别了,已经解决了!
在sh中,那个代码是可以用的
可在bash里
代码: 全选
[a-z])echo little;;
[A-Z])echo big;;
不能用,必须改成
代码: 全选
[[:lower:]])echo little;;
[[:upper:]])echo big;;