sh/bash/dash/ksh/zsh等Shell脚本
-
chinayem
- 帖子: 70
- 注册时间: 2007-06-11 21:08
- 来自: 江南水乡
#1
帖子
由 chinayem » 2008-04-19 18:52
代码: 全选
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’
是代码的问题还是我终端设置的问题呢?
谢谢
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#2
帖子
由 eexpress » 2008-04-19 19:07
一般我们是加第一行
#!/bin/bash
脚本,都应该习惯指到解释器的。
● 鸣学
-
chinayem
- 帖子: 70
- 注册时间: 2007-06-11 21:08
- 来自: 江南水乡
#3
帖子
由 chinayem » 2008-04-19 19:18
代码: 全选
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,该怎么修改代码呢?
谢谢
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#4
帖子
由 eexpress » 2008-04-19 19:31
你干嘛还强制用sh啊。那是dash啊。2个不同的。
● 鸣学
-
bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
-
联系:
#5
帖子
由 bones7456 » 2008-04-19 19:33
sh -x ./ctype A
换成
bash -x ./ctype A
看看 ll /bin/sh
-
chinayem
- 帖子: 70
- 注册时间: 2007-06-11 21:08
- 来自: 江南水乡
#6
帖子
由 chinayem » 2008-04-19 19:51
呵呵,是sh和bash的区别了,已经解决了!
在sh中,那个代码是可以用的
可在bash里
代码: 全选
[a-z])echo little;;
[A-Z])echo big;;
不能用,必须改成
代码: 全选
[[:lower:]])echo little;;
[[:upper:]])echo big;;