shell编程 代码问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
chinayem
帖子: 70
注册时间: 2007-06-11 21:08
来自: 江南水乡

shell编程 代码问题

#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
关注我的blog: ε==3
头像
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;;
回复