2016-04-22 91 views
-6

我有一個shell腳本:如何將我的shell腳本轉換爲Perl?

#!usr/bin/bash 
branch_name=$1 
task_name=$2 
createviewset ccm -b $branch_name -t $task_name 
source setenv $task_name 
rest of the code 

現在我想這個腳本轉換爲Perl腳本。我怎樣才能做到這一點?到目前爲止,我已經在代碼中編寫了代碼,但是這段代碼似乎不起作用。

!/usr/bin/perl 
use warnings; 
use strict; 
my branch_name; 
my task_name; 
createviewset ccm -b $branch_name -t $task_name 
source setenv $task_name 

這裏createviewset是一個現有的腳本,我在這裏打電話。

+4

那麼,shell腳本和Perl是完全不同的。你不能期望一個代碼能夠與另一個代碼一起工作。你將不得不*實際學習*一些Perl。這對於Stack Overflow問題來說太廣泛了。 – Biffen

+2

我看到的第一個問題是,你永遠不會訪問comman行參數,其次是你不知道調用外部代碼。有可能更多,但緊迫的問題是:你顯然不知道很多Perl,所以你爲什麼要轉換腳本? - 正如@Biffen所說,學習perl對於這裏來說太廣泛了。 – Henrik

+0

@Henrik:*「你永遠不會訪問comman行參數」*前兩個參數被複制到臨時變量'branch_name'和'task_name'中,代碼使用這些參數。我知道使bash腳本變得簡單而神祕,但這是一種很好的方式來記錄代碼在做什麼 – Borodin

回答

3

您應該訪問http://perlmaven.com/(提供多種語言)或http://learn.perl.org/以先學習一些Perl。

您的shell腳本不需要複製命令行值。而且還使用#USR /斌/慶典,這將無法工作,因爲路徑或者是在/ usr /斌/ bash或(更常見)/斌/慶典:

#!/bin/bash 
createviewset ccm -b $1 -t $2 
source setenv $2 
rest of the code 

Perl的分配所有的命令行參數the array @ARGV。此示例將打印兩個參數:

#!/usr/bin/perl 
print $ARGV[0]; 
print $ARGV[1]; 

注意,編號爲0而不是1開始,如在你的bash腳本$ 1。

下一部分在Perl中運行外部(shell)命令:使用the system command

#!/usr/bin/perl 
use strict; 
use warnings; 

system 'createviewset','ccm','-b',$ARGV[0],'-t',$ARGV[1]; 
system 'source','setenv',$ARGV[1]; 

注意,命令不會起作用,因爲Perl腳本是不是一個shell腳本,不能「包括」 bash腳本。我很欣賞你試圖用Perl來解決你的問題,但它看起來像Bash是更好的工具。

+1

我不認爲OP是應得的,但這是一個很好的答案。我唯一要做的就是使用my($ branch_name,$ task_name)= @ ARGV'。這樣的代碼是更有意義的,並與OP的原始bash代碼更好地對應,並且索引的問題是無關緊要的 – Borodin

+0

你是對的。我通常會盡量避免複製所有內容,因爲如果使用頻繁,它會非常昂貴,但對教育來說會更好。 – Sebastian

+0

我認爲*「非常昂貴」*是不現實的。非常少的應用程序由一箇中央bash腳本組成,其副本將被製作數百萬次。在bash腳本中使用'$ 1','$ 2'等的主要原因是爲了簡潔起見,並且*沒有理由*直接在Perl代碼中訪問'@ ARGV'元素 – Borodin