首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux上编写脚本

在Linux上编写脚本
EN

Stack Overflow用户
提问于 2011-07-13 03:39:00
回答 3查看 7.9K关注 0票数 1

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

代码语言:javascript
复制
echo "hello world"

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-13 03:42:05

您需要将其标记为可执行文件;Unix不会基于扩展随意执行。

代码语言:javascript
复制
chmod +x testscript.csh

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

票数 4
EN

Stack Overflow用户

发布于 2011-07-13 03:43:18

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

代码语言:javascript
复制
chmod u+x testscript.csh

这意味着将testscript设置为具有用户的执行权限(无论文件的所有者是谁-在本例中应该是您自己!)

另外,为了告诉操作系统这是一个csh脚本,您需要将

代码语言:javascript
复制
 #! /path/to/csh

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

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

编辑shell正如一些注释中所讨论的,您可能希望选择C (csh)的替代Shell。对于脚本来说,它不是最友好的。

票数 2
EN

Stack Overflow用户

发布于 2011-07-30 00:18:39

您有几个选项。

您可以从当前的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中为:%s/.*/rm -f &/。我在顶部添加了一个#!/bin/sh,保存它,chmod +x foo.sh,然后是./foo.sh。(如果某些文件名可能包含特殊字符,我可以使用:%s/.*/rm -f '&'/。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6670047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档