免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3590 | 回复: 11
打印 上一主题 下一主题

echo $?为何不显示为非0? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-29 17:28 |只看该作者 |倒序浏览
一般的,敲命令正确,然后echo  $?显示为0,敲命令不正确,然后echo  $?显示为非0,我现在:
$test="sys/sys  as  sysdba"
$sqlplus  -s   $test  <<EOF
archive  log  list
<<EOF
上面这样执行是不对的,为啥echo $?还显示为0呢?
$echo  $?
0

论坛徽章:
0
2 [报告]
发表于 2003-05-29 17:37 |只看该作者

echo $?为何不显示为非0?

上面那个正确的执行应该是这样:
$test="sys/sys as sysdba"
$sqlplus -s "$test" <<EOF
archive log list
<<EOF

论坛徽章:
0
3 [报告]
发表于 2003-05-29 18:11 |只看该作者

echo $?为何不显示为非0?

不加引号的时候出什么错误提示了?

论坛徽章:
0
4 [报告]
发表于 2003-05-29 18:36 |只看该作者

echo $?为何不显示为非0?

Usage: SQLPLUS [ [<option>] [<logon>] [<start>] ]
where <option> ::= - | -? | [ [-M <o>] [-R <n>] [-S] ]
      <logon>  ::= <username>[/<password>][@<connect_string>] | / | /NOLOG
      <start>  ::= @<filename>[.<ext>] [<parameter> ...]
"-" displays the usage syntax
"-?" displays the SQL*Plus version banner
"-M <o>" uses HTML markup options <o>
"-R <n>" uses restricted mode <n>
"-S" uses silent mode

加引号是对的,不加不对

论坛徽章:
0
5 [报告]
发表于 2003-05-29 19:06 |只看该作者

echo $?为何不显示为非0?

那是因为sqlplus show help时 return 0了。

论坛徽章:
0
6 [报告]
发表于 2003-05-30 08:57 |只看该作者

echo $?为何不显示为非0?

那怎样能让它不为0,以达到:敲命令正确,echo $?显示为0,敲命令不正确,echo $?显示为非0

论坛徽章:
0
7 [报告]
发表于 2003-05-30 09:29 |只看该作者

echo $?为何不显示为非0?

一个命令、程序或脚本的返回值不是系统决定的,而是命令、程序或脚本本身决定,因此就上面的情况而言,sqlplus得到不正确的参数后,会给出相关的信息,而其本身程序运行中没有错误产生,所以返回0。
如下面这个脚本:
echo "test"
exit 1
始终会返回非0,但它有错吗?
总而言之,返回值,是人为规定的,一般以返回0为正确值。而非0值可以执行各种意义。而有的情况下,程序运行的结果很难说正确与否(如上例),因此返回什么值,也就是人为规定的。

论坛徽章:
0
8 [报告]
发表于 2003-05-30 11:24 |只看该作者

echo $?为何不显示为非0?

对呀,是由程序决定的,如果你的程序这样写
int main()
{
......
return 1
}
那么他成功不就返回1了么。

论坛徽章:
0
9 [报告]
发表于 2003-05-30 11:43 |只看该作者

echo $?为何不显示为非0?

这个我都是明白的,因为我对C语言也很精通,但算不上绝对的高手,我这个脚本是用来数据库备份用的,有关上面的引用是这样的:
USER_PASSWD="sys/sys@wyj  as  sysdba"
echo "shutdown  immediate" > $TMP_SQL
    sqlplus -s "$USER_PASSWD" <<EOF
start $TMP_SQL
EOF
    if [ $? != 0 ]
    then
        echo "fail to  shutdown  oracle " > $TRC_FILE
        echo "fail  to  shutdown  oracle"
        exit
    fi  
两位能不能给个点睛之笔,让我的这个判断:
if [ $? != 0 ]
    then
        echo "fail to  shutdown  oracle " > $TRC_FILE
        echo "fail  to  shutdown  oracle"
        exit
    fi  
排上用场,我自己也研究研究

论坛徽章:
0
10 [报告]
发表于 2003-05-30 12:15 |只看该作者

echo $?为何不显示为非0?

...


1、sqlplus 程序本身的 exit code 是怎样的,应该可以在命令行中测试,

2、if [ $? != 0 ]  一般我们是用  if [ $? -ne 0 ]  , != 用来比较字符串
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP