2011-07-12 60 views
0

我想创建一个脚本,它将在列表中的每个文件上运行一个程序。我一直在努力做到这一点使用.csh文件(我不知道这是否是最好的方式),我开始为世界你好简单的东西在Linux上的脚本

echo "hello world" 

的问题是,我不能执行此脚本,或验证它是否正常工作。 (我试图做./testscript.csh这显然是错误的)。我一直无法找到真正解释如何运行C脚本的任何内容,而且我猜测还有更好的方法来做到这一点。为了实现这个目标,我需要改变什么?

+0

http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ –

回答

3

您需要将其标记为可执行文件; Unix不会基于扩展来任意执行任何操作。

chmod +x testscript.csh 

另外,我强烈建议using sh or bash instead of csh,否则你很快就会了解csh的循环和控制流结构的特质(有些东西只有在他们里面工作,如果做了一个特别的方式,尤其是与单行版本的东西都是非常有限)。

+1

chmod' works,但仅仅是因为该文件是*也是一个有效的Bourne shell脚本。 –

2

可以使用./testscript.csh。但是,您将需要让第一个可执行文件:(!谁曾文件所拥有 - 在这种情况下应该是你自己)

chmod u+x testscript.csh 

这意味着设置testscript有用户执行权限

另外要告诉操作系统,这是一个csh的脚本,你需要把

#! /path/to/csh 

在第一行(其中/path/to/csh是CSH系统上的完整路径,你可以发现,从发出命令which csh) 。

这应该给你你想要的behvaiour。

编辑正如在一些评论中所讨论的,您可能想要为C Shell(csh)选择一个替代shell。这不是脚本编写中最友好的一个。

+0

够公平的,给你+1。 –

+0

+1。顺便说一下'#!'被称为shebang - http://en.wikipedia.org/wiki/Shebang_%28Unix%29 – 2011-07-12 20:00:35

0

你有几种选择。

您可以从当前shell中运行脚本。如果您正在运行csh或tcsh,则语法为source testscript.csh。如果你正在运行sh,bash,ksh等,语法是. ./testscript.sh。请注意,我更改了文件名后缀; source.在当前shell中的命名文件中运行命令。如果您有任何特定于shell的语法,除非您的交互式shell与脚本使用的交互式shell相匹配,否则这将不起作用。如果脚本是简单(只是一系列简单的命令),那可能并不重要。

您可以使脚本成为可执行程序。 (我将重复别人已经写过的一些内容。)添加“shebang”作为第一行。对于csh脚本,请使用#!/bin/csh -f-f可避免在自己的个人启动脚本(.cshrc等)中运行命令,这样可以节省时间并使其他人能够使用它。或者,对于sh脚本(推荐),使用#!/bin/sh(否-f,它具有完全不同的含义)。无论哪种情况,请运行chmod +x the_script,然后运行./the_script

当我想要执行一些适度复杂的操作时,我经常使用这个技巧。假设我想删除当前目录中的一些但不是全部的文件,但是标准无法在单个命令中方便地表达。我可能运行ls > tmp.sh,然后用我最喜欢的编辑器编辑tmp.h(我恰好是vim)。然后我浏览文件列表并删除所有我想单独留下的文件。一旦我完成了,我可以用一个命令替换每个文件名来删除它;在vim中,01​​。我在顶部保存一个#!/bin/shchmod +x foo.sh,然后./foo.sh。 (如果某些文件名可能有特殊字符,我可以使用:%s/.*/rm -f '&'/。)