免费注册 查看新帖 |

Chinaunix

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

求助 ~~~ shell脚本 函数调用的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-18 10:15 |只看该作者 |倒序浏览
10可用积分
各位大大~~~~大家辛苦了 小弟发一个脚本

………………………………………………………………
function PING_STATUS ()
{  local _ipadd
      _ipadd=$1
    PING_COUNT=`ping -c 4 $1`
    if [ $? -eq 0 ];then
#       return 0
         echo "ping is ok"          #ping success
        elif [ $? -ne 0 ];then
#        return 1
          echo "ping is error"  #ping error
    fi
}

PING_STATUS $IP
…………………………………………………………………………
IP变量是一样的,这个程序执行后的结果是 ping is error


这样的话 得到的结果是对的

但是 我要是这样的话~~~~


function PING_STATUS ()
{  local _ipadd
      _ipadd=$1
    PING_COUNT=`ping -c 4 $1`
    if [ $? -eq 0 ];then
       return 0
#         echo "ping is ok"          #ping success
        elif [ $? -ne 0 ];then
        return 1
#          echo "ping is error"  #ping error
    fi
}

#PING_STATUS $IP

if [ `PING_STATUS $IP`==0 ];then
   echo "ping is ok"
  else
    echo "ping is error"
fi

………………………………………………………………………………

得到的结果却是不一样的
第一问 已经解决




第二问如下:
#!/bin/sh
function abc()
{
  if [ $1 -eq 1 ];then
   return 222
  else
     return 333
  fi
  }
if [[ `abc 2` = "333" ]];then
   echo "test is success"
fi

那这样的应该怎样实现呢?????

也就是说我能不能指定我定义的函数返回一个特定值,然后根据返回值来判断操作


[ 本帖最后由 ppiqq 于 2008-12-18 11:46 编辑 ]

最佳答案

查看完整内容

abc 2if [[ $? -eq 333 ]];then echo "test is success"fi为什么一定要放在[] 里面呢?我在之前说的那样不好吗?[ 本帖最后由 haimming 于 2008-12-18 11:53 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-12-18 10:15 |只看该作者
abc 2
if [[ $? -eq 333 ]];then
   echo "test is success"
fi

为什么一定要放在[] 里面呢?
我在之前说的那样不好吗?
调用完立马用的话,$?就是返回值;
如果要用不止一次,或不是马上用,用个东东记住它吧
PING_STATUS $IP
return_v=$?

[ 本帖最后由 haimming 于 2008-12-18 11:53 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
3 [报告]
发表于 2008-12-18 10:20 |只看该作者

回复 #1 ppiqq 的帖子

if [ `PING_STATUS $IP`==0 ];

1、=号两边要有空格,而且只用=就可以了,不用==
2、`` 捕获的标准输出,而不是命令的返回值,要得到命令的返回值可以用$?

function PING_STATUS ()
{  local _ipadd
      _ipadd=$1
    PING_COUNT=`ping -c 4 $1`
    if [ $? -eq 0 ];then
       return 0
#         echo "ping is ok"          #ping success
        elif [ $? -ne 0 ];then
        return 1
#          echo "ping is error"  #ping error
    fi
}

#PING_STATUS $IP

if PING_STATUS $IP ;then
   echo "ping is ok"
  else
    echo "ping is error"
fi

论坛徽章:
0
4 [报告]
发表于 2008-12-18 10:31 |只看该作者
绕个大圈子,还不如直接这样,

if ping -c 4 $IP ;
then
   echo "ping is ok"
  else
    echo "ping is error"
fi

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
5 [报告]
发表于 2008-12-18 10:34 |只看该作者
原帖由 ppiqq 于 2008-12-18 10:15 发表
#PING_STATUS $IP

if [ `PING_STATUS $IP`==0 ];then
   echo "ping is ok"
  else
    echo "ping is error"
fi


echo `PING_STATUS $IP`看看结果


  1. PING_STATUS $IP
  2. if [  $? -eq 0 ];then
  3.    echo "ping is ok"
  4.   else
  5.     echo "ping is error"
  6. fi
复制代码

论坛徽章:
0
6 [报告]
发表于 2008-12-18 11:00 |只看该作者
if [ `PING_STATUS $IP` = 0 ];
用这种方法判断不行

  1. abc(){
  2. if [[ $1 = 1 ]]
  3. then
  4.    return 22
  5. else
  6.     return 33
  7. fi
  8. }

  9. abc 1
  10. echo $?
  11. abc 2
  12. echo $?

  13. if [[ `abc 1` = "22" ]]
  14. then
  15. echo 22
  16. else
  17. echo 33
  18. fi

  19. echo `abc 1`


  20. abc 1
  21. a=$?
  22. if [[ $a = 22 ]]
  23. then
  24. echo 22
  25. else
  26. echo 33
  27. fi
复制代码

[rockfall@localhost mytest]$ ./kkkkkkkk
22
33
33

22
[rockfall@localhost mytest]$

[ 本帖最后由 haimming 于 2008-12-18 11:34 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-12-18 11:12 |只看该作者
if [ `PING_STATUS $IP` = 0 ]

整数比较使用-eq

论坛徽章:
0
8 [报告]
发表于 2008-12-18 11:19 |只看该作者
同意楼上的观点

论坛徽章:
0
9 [报告]
发表于 2008-12-18 11:21 |只看该作者
if [ `PING_STATUS $IP` = 0 ]
这用用,直接给你报错
line 18: [: -eq: unary operator expected
因为是空的,echo `PING_STATUS $IP` 就知道,`PING_STATUS $IP`并不是返回值

论坛徽章:
0
10 [报告]
发表于 2008-12-18 11:30 |只看该作者
原帖由 ly5066113 于 2008-12-18 10:20 发表
if [ `PING_STATUS $IP`==0 ];

1、=号两边要有空格,而且只用=就可以了,不用==
2、`` 捕获的标准输出,而不是命令的返回值,要得到命令的返回值可以用$?

function PING_STATUS ()
{  local _ipadd
   ...



谢谢您了 大哥

1.== 还是有点儿C语言情缘
2. 谢谢大哥
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP