2012-06-11 76 views
0

我目前使用下面的函數如何定義在shell腳本變種

!/bin/bash 

#Colour change functions 

fnHotlinkG2R() 
{ 
     sed -i 's/#hotlink {height: 200px;width: 200px;background: green;/#hotlink {height: 200px;width: 200px;background: red;/' /var/www/html/style.css 
} 

而不是創建多個差分功能我想進入我調用函數從腳本中#hotlink不同的每一次功能。

我對sh腳本相當陌生,希望得到一些幫助。

回答

2

首先,第一行應該是hash bang #!然後是程序的路徑,而不僅僅是!

在bash中,你沒有聲明該函數的參數。你只需要參數(並檢查它是否有效/不空)並使用它。在這種情況下,您可能想從$1獲取該函數的第一個參數,並用它替換#hotlink。

sed -i 's/'"$1"' {height: 200px; ... 

在函數被調用的部分,你可以調用它,彷彿它是另一個命令,將提供#hotlink參數的命令。

fnHotlinkG2R '#hotlink' 
+1

我認爲,除此之外,他還需要雙引號,以在他的搜索/替換模式中擴展'$ 1',對吧? – eckes

+0

@eckes:實際上它會在沒有引用的情況下展開(我在發佈版本之前進行了測試,但沒有引用,儘管如此)。但是,如果輸入有空格,它可能無法正確擴展。 http://unix.stackexchange.com/questions/4899/var-vs-var-and-to-quote-or-not-to-quote – nhahtdh

+0

這很好。乾杯。 – Rhys

0

您可以使用它像這樣:

#!/bin/bash 

#Colour change functions 

fnHotlinkG2R() 
{ 
    $hotlinkOld = "$1"; 
    $hotlinkNew = "$2"; 
    sed -i "s/$hotlinkOld/$hotlinkNew/i" /var/www/html/style.css 
} 

And call it like this: 

fnHotlinkG2R "#hotlink {height: 200px;width: 200px;background: green;"\ 
    "#hotlink {height: 200px;width: 200px;background: red;" 
+1

您在'!'前面缺少'#'一個有效的哈希爆炸。 – Bernhard

+0

是的,謝謝剛剛修好。 – anubhava

0

首先,你shebang是錯誤的。正確的是

#!/bin/bash 

其次,在bash中,你使用了「不同」類型的參數傳遞。

$0 expands to the name of the shell or shell-script 
$1 is the first argument 
$2 is the second argument and so on 
[email protected] are all arguments 

閱讀在bash manual

更多你可能有興趣在bash的手動以及在quoting-part ...