免费注册 查看新帖 |

Chinaunix

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

cshell的初级问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-16 09:20 |只看该作者 |倒序浏览
没有接触过unix,帮朋友看一个csh文件,有几个地方看不明白,请教知道的xdjm:)
1、set save_args = ''
     set save_args = ($save_args $argv[1])
上面的第二条语句是将字符串save_args和第一个arg连接吗?不知道我的理解对不对!

2、$?DISCOVER_EXE是什么用法?
DISCOVER_EXE是一个用户的应用程序

Thx

论坛徽章:
0
2 [报告]
发表于 2003-07-16 09:50 |只看该作者

cshell的初级问题!

更加困惑了?
是我的问题问的有问题吗?
个人感觉好象不是很难吧?
怎么没有人回答呢?

论坛徽章:
0
3 [报告]
发表于 2003-07-16 11:01 |只看该作者

cshell的初级问题!

原帖由 "pipen" 发表:
娴牡诙?跤锞涫墙?址?畇ave_args和第一个arg连接吗?不知道我的理解对不对!

2、$?DISCOVER_EXE是什么用法?
DISCOVER_EXE是一个用户的应用程序

Thx
   
1. 这种用法是可以企起到保存命令行参数的作用,应该是在循环里结合shift使用.
    但并是连接的概念,只不过是赋值罢了.()可以是csh忽略空格的分隔作用.
2. $?使用了判断一个变量是否定了.如$?save_args结果为1
    $?undefinedvarible 结果为0

BTW:我们(包括我)一般不使用csh,这是这类问题大家不回答的原因吧.

论坛徽章:
0
4 [报告]
发表于 2003-07-16 14:45 |只看该作者

cshell的初级问题!

谢谢 valentine   !
第二个问题说的很明白了。
第一个问题还是没有很明白,不过可以肯定你说的是对的,确实是在循环中结合shift使用的,我困惑的就是为什么不写成
set save_args =  $argv[1]

他和
set save_args = ($save_args $argv[1])
有什么区别!

论坛徽章:
0
5 [报告]
发表于 2003-07-16 20:38 |只看该作者

cshell的初级问题!

可能你帮你朋友分析的csh写错了.不过也要看具体情况

可能原意是是
set save_args=""
set save_args=($save_args $argv)而不是$argv[1].
这样就可以用
save_args[1]引用原argv[1]
save_args[2]引用原argv[2]
...

set save_args=($save_args $argv[1])只保存了argv[1]的值,没必要这样写.

论坛徽章:
0
6 [报告]
发表于 2003-07-16 20:53 |只看该作者

cshell的初级问题!

第一个问题还是没有很明白,不过可以肯定你说的是对的,确实是在循环中结合shift使用的,我困惑的就是为什么不写成
set save_args = $argv[1]

他和
set save_args = ($save_args $argv[1])
有什么区别!

假設
set  save_args = a
set argv = ('99' '98' '97' '96')
echo $argv[1] # 得到99
set save_args = ($save_args $argv[1])
echo $save_args #得到a99
所以不一樣!!

论坛徽章:
0
7 [报告]
发表于 2003-07-17 10:28 |只看该作者

cshell的初级问题!

to 夜未眠: 程序没有错,是这样的,可能是因为我没有贴全,引起你的错解,他是通过一个while循环,在循环中用shift,然后每次都取arg[1],我想是一样可以实现的。thank you for your kind

to inmolee:你这样讲的话,我觉得程序的逻辑就可以解释的通了,老外的原程序中就是这样写的:
set save_args = “”
while($#argv > 0)

set save_args = ($save_args $argv[1])
shift
end     

谢谢!

论坛徽章:
0
8 [报告]
发表于 2003-07-17 10:39 |只看该作者

cshell的初级问题!

很高兴能得到大家的帮助,我还有一个问题要麻烦大家

我现在的要求是这样的:我要重复多次执行应用程序A.sh, 那么我现在就想写一个shell程序do.sh,在do.sh中用循环控制调用A.sh来完成我的任务。现在的问题是,在执行A.sh的时候,A程序要求用户有一次交互选择,比如系统给出提示,用户选择,系统根据用户的选择继续下面的运行。我在我的do.sh中怎么来完成键盘的人机交互输入(否则批处理的作用等于没有啊!)

我想问的第一个问题:
1、我的想法对吗?人机交互输入是否可以在shell 脚本程序中用命令来完成。
2、如果能完成,请您指点一二,谢谢!

说明:
1、A程序运行时的人机交互输入不能通过参数完成,我看过A程序的文档了,
2、人机交互的选择在我程序中是固定的,比如每次都选 1。
3、修改A.sh可以很容易的完成人机交互输入问题,但是现在我的情况是最好不要修改A.sh。最好能在我自己的脚本调度程序中完成。

论坛徽章:
0
9 [报告]
发表于 2003-07-17 12:34 |只看该作者

cshell的初级问题!


  1. $ cat a.sh
  2. #!/bin/sh
  3. echo "This is script A"
  4. echo "-----------------"
  5. echo "question 1. please enter 1 or 2 or 3:"
  6. read ans
  7. case "$ans"
  8. in
  9. 1)      echo one;;
  10. 2)      echo two;;
  11. 3)      echo three;;
  12. *)      echo other;;
  13. esac
  14. echo "question 2. please enter yes or no:"
  15. read ans
  16. case "$ans"
  17. in
  18. [Yy][Ee][Ss])   echo you answer yes.;;
  19. [Nn][Oo])       echo you answer no.;;
  20. *)      echo please answer yes/no.;;
  21. esac

  22. $ printf "3\nno" |./a.sh
  23. This is script A
  24. -----------------
  25. question 1. please enter 1 or 2 or 3:
  26. three
  27. question 2. please enter yes or no:
  28. you answer no.
  29. $
复制代码

论坛徽章:
0
10 [报告]
发表于 2003-07-17 13:53 |只看该作者

cshell的初级问题!

to 夜未眠:老大,佩服+谢谢!

我做的时候按照你的写就没有问题了,就是我这里用不了‘read’命令(系统提示read:command not found),我现在是在linux下调试的,最后要发布到irix下面,不知道会不会有问题,我用的是set ans =  $< 来读输入就ok了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP