【问题标题】:Unix Shell Script to take multiple files from standard input (csh)Unix Shell 脚本从标准输入 (csh) 获取多个文件
【发布时间】:2014-04-25 16:16:17
【问题描述】:

使用 for 循环或管道(都使用一个文件名),我需要弄清楚如何从标准输入中接受无限的指定文件。我尝试过正则表达式和各种通配符形式。我遇到的两个主要问题:只有第一个文件通过脚本或目录中的每个文件都通过。这是一个基本 Unix 课程的作业,到目前为止我的问题是过于复杂。根据本学期剩下的时间,我想要做的事情有一个简单的解决方法,在这里我花了两个小时阅读数百个网站和帖子,让我头晕目眩。

编辑:命令行提示符类似于 ~/dir/script currentWord newWord fileName1 fileName2 fileName3

    #!/bin/csh                                                                     
set currentWord=$1
set newWord=$2
set fileName=$3

  if  { grep -q $1 *$3 } then
     sed -i.bak -e "s/$1/$2/g" $3
   else
     echo "The string is not found."
   endif

#grep -q $1 $3 | sed -i.bak -e "s/$1/$2/g" $3

【问题讨论】:

  • 为什么选择 csh?为什么不使用 bash 或其他一些 POSIX shell 衍生产品?
  • 这段代码应该完成什么?标准输入在哪里出现?提供您拥有$3的值?
  • 正如我在帖子中提到的......家庭作业。 (不是想找别人来做我的工作,只是非常诚实!)从我读过的所有内容以及我对这位教授的了解来看,他的目标是尽可能地让通过这门课变得绝对困难。还编辑了帖子以包含 cmd 提示符。从标准输入中,您可以获得所有变量信息。
  • perl.com/doc/FMTEYEWTK/versus/csh.whynot 不要在 csh 中编写脚本。
  • 让你在csh写脚本​​肯定是一种让你难以通过的方式...

标签: shell unix csh


【解决方案1】:

您可以使用$argv[] 访问命令行参数。要遍历它们但跳过前两个,您可以使用以下构造:

foreach file ($argv[3-])
    # do stuff here, eg
    echo $file
end

但你不应该使用csh,如果你的教授指示你这样做,我会质疑这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多