Chinaunix

标题: cshell的初级问题! [打印本页]

作者: pipen    时间: 2003-07-16 09:20
标题: cshell的初级问题!
没有接触过unix,帮朋友看一个csh文件,有几个地方看不明白,请教知道的xdjm:)
1、set save_args = ''
     set save_args = ($save_args $argv[1])
上面的第二条语句是将字符串save_args和第一个arg连接吗?不知道我的理解对不对!

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

Thx
作者: pipen    时间: 2003-07-16 09:50
标题: cshell的初级问题!
更加困惑了?
是我的问题问的有问题吗?
个人感觉好象不是很难吧?
怎么没有人回答呢?
作者: valentine    时间: 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,这是这类问题大家不回答的原因吧.
作者: pipen    时间: 2003-07-16 14:45
标题: cshell的初级问题!
谢谢 valentine   !
第二个问题说的很明白了。
第一个问题还是没有很明白,不过可以肯定你说的是对的,确实是在循环中结合shift使用的,我困惑的就是为什么不写成
set save_args =  $argv[1]

他和
set save_args = ($save_args $argv[1])
有什么区别!
作者: 夜未眠    时间: 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]的值,没必要这样写.
作者: inmolee    时间: 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
所以不一樣!!
作者: pipen    时间: 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     

谢谢!
作者: pipen    时间: 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。最好能在我自己的脚本调度程序中完成。
作者: 夜未眠    时间: 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. $
复制代码

作者: pipen    时间: 2003-07-17 13:53
标题: cshell的初级问题!
to 夜未眠:老大,佩服+谢谢!

我做的时候按照你的写就没有问题了,就是我这里用不了‘read’命令(系统提示read:command not found),我现在是在linux下调试的,最后要发布到irix下面,不知道会不会有问题,我用的是set ans =  $< 来读输入就ok了!
作者: 夜未眠    时间: 2003-07-17 19:26
标题: cshell的初级问题!
应该不会有什么问题,只要不是调用getpass之类的函式.
作者: pipen    时间: 2003-07-18 08:56
标题: cshell的初级问题!
好的,谢谢!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2