ajingdd 发表于 2005-5-17 16:16:53

大家请帮忙看下这段SHELL代码有什么问题?


#!/bin/sh
#测试''(引号)的运用

SYS='uname -s'
eval $SYS


#此处输出结果为 Linux,没错


case $SYS in
'uname -s')
echo "erro!"
;;
"Linux")
echo "My system is Linux"
;;
"Windows")
echo "My system is Windows"
;;
Unix)
echo "My system is Unix"
;;
*)
echo "Unknown: "
;;
esac


#上面这段代码竟然输出的是:
#erro!
#为什么?相当于将uname -s作为一个字符串输出来了
#但我的本意是输出"My system is Linux",
#试着改SYS="uname -s"也是一样的结果


if uname="Linux";then
echo "My system is Linux"
fi


#此处直接执行命令,输出为My system is Linux
#没错
#但如果改成


if $SYS="Linux";then
echo "My system is Linux"
fi


#后,就提示如下的出错信息:
#uname:无效选项 -- =
#请尝试执行‘uname --help’来获取更多信息
#############
#请高手指点一下,不甚感激。

zhy2111314 发表于 2005-5-17 19:19:14

想想eval在第一个中的作用,如果没有eval会是什么样呢?

BOoRFGOnZ 发表于 2005-5-17 21:14:26

签名好大
打开好慢
:neutral:

ajingdd 发表于 2005-5-18 09:51:04

想想eval在第一个中的作用,如果没有eval会是什么样呢?

没有eval的话,就不会输出第一句:Linux
其他的完全是一样的。我刚刚试过。
谢谢解答。
ps:我把签名关掉。。。。。。

ajingdd 发表于 2005-5-23 10:07:01

路过的高手,请帮个忙,谢谢了

bao_paul 发表于 2005-5-24 00:34:56

if $SYS="Linux";then

改为 ...

if $SYS = "Linux";then

等号两边的玩意儿不要挨着那么紧, 空一格!
(不要问我为什么要空一格, 我不记得了, 自己翻书去吧)

ajingdd 发表于 2005-5-24 10:42:54

if $SYS="Linux";then

改为 ...

if $SYS = "Linux";then

等号两边的玩意儿不要挨着那么紧, 空一格!
(不要问我为什么要空一格, 我不记得了, 自己翻书去吧)

谢谢楼上。我试了还是不行,跟空格完全没有关系,还是一样的错误。我百思不得其解啊,为什么呢?

bao_paul 发表于 2005-5-24 11:30:55

谢谢楼上。我试了还是不行,跟空格完全没有关系,还是一样的错误。我百思不得其解啊,为什么呢?

怎么不行啊?? 我都试过了, 我这儿没问题啊!

把你的完整例子贴出来, 把你的错误信息贴出来, 完整的啊!

kornlee 发表于 2005-5-24 12:50:40

子西看一看case和eval的用法

zhy2111314 发表于 2005-5-24 13:05:58

这个应该与eval有关,你看下置顶的bash命令行处理详解,里面有eval的详细说明,我现在外面,回去后再给你试验一下!
页: [1]
查看完整版本: 大家请帮忙看下这段SHELL代码有什么问题?