2011-07-12 31 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 '&'/。)