【问题标题】:Scripting on Linux在 Linux 上编写脚本
【发布时间】:2011-07-12 19:38:59
【问题描述】:

我正在尝试创建一个脚本,它将在列表中的每个文件上运行一个程序。我一直在尝试使用 .csh 文件来做到这一点(我不知道这是否是最好的方法),我从 hello world 这样简单的东西开始

echo "hello world"

问题是我无法执行此脚本,或验证它是否正常工作。 (我试图做 ./testscript.csh 这显然是错误的)。我还没有找到任何真正解释如何运行 C 脚本的东西,我猜也有更好的方法来做到这一点。我需要进行哪些更改才能使其正常工作?

【问题讨论】:

标签: linux shell csh


【解决方案1】:

您需要将其标记为可执行; Unix 不会根据扩展名任意执行。

chmod +x testscript.csh

另外,我强烈推荐using sh or bash instead of csh,否则您很快就会了解csh 的循环和控制流构造的特性(有些东西只有在以特定方式完成时才能在其中工作,尤其是单行版本的情况非常有限)。

【讨论】:

  • chmod 有效,但这只是因为该文件也是一个有效的 Bourne shell 脚本。
【解决方案2】:

可以使用 ./testscript.csh。但是,您需要先使其可执行:

chmod u+x testscript.csh

这意味着将 testscript 设置为对用户具有执行权限(文件的所有者——在这种情况下应该是你自己!)

同时告诉操作系统这是一个你需要放置的 csh 脚本

 #! /path/to/csh

在第一行(/path/to/csh 是系统上 csh 的完整路径。您可以通过发出命令 which csh 找到它)。

这应该会给你你想要的行为。

编辑 正如在某些 cmets 中所讨论的,您可能希望选择 C ​​Shell (csh) 的替代 shell。它不是对脚本最友好的一种。

【讨论】:

【解决方案3】:

您有多种选择。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多