2013-02-24 125 views
-1

這是一個shell腳本,我如何在Perl中完成同樣的事情?如何將shell腳本移植到Perl?

prfile=~/sqllib/db2profile 

profile() 
{ 
if [ -f $prfile ] && [ "$prfile" != "" ]; 
then 
     . $prfile 
else 
     read -p "Enter a valid Profile : " prfile 
     profile 
fi 
} 
profile 

這檢查的配置文件,如果發現它與其他. $prfile執行它,它再次要求用戶爲正確的配置文件

更新

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

my $profile = "$ENV{'HOME'}/sqllib/db2proile"; 
# default profile 

while (not -e $profile) { # until we find an existing file 
    print "Enter a valid profile: "; 
    chomp($profile = <>); # read a new profile 
} 

qx(. $profile); 

這個工作。我希望主目錄是動態的而不是硬編碼的,因爲它們在不同的機器上有所不同。我只是試圖用Perl來完成我用shell獲得的成果。

+0

哪個腳本的具體部分給你帶來問題?這個腳本的第一個功能是爲一個變量賦值。如果你不知道如何去做,那麼在你尋求幫助之前,你真的需要從一個基本的Perl教程開始。 – Quentin 2013-02-24 16:39:12

+0

**〜/ sqllib/db2 **在shell中是**/home-direc/sqllib/db2 **,當我這樣做時** @prfile ='〜/ sqllib/db2'**; ,它不工作,當我做**'〜/ sqllib/db2 **;即使這不起作用,它怎麼做 – mviswa 2013-02-24 16:58:58

+0

定義「不工作」。你期望發生什麼?究竟發生了什麼? '@prfile ='〜/ sqllib/db2''應該不會顯示可見的輸出(除非你使用'strict' **你應該**,在這種情況下它會錯誤,因爲你忘記了'my')。 '〜/ sqllib/db2'應該是錯誤的,因爲它在Perl中並不意味着什麼。 (任何爲什麼你在地球上使用數組?) – Quentin 2013-02-24 17:10:34

回答

0

如果我理解你的目標,我不認爲你可以使用perl來實現這個目標,因爲perl將作爲子進程運行,並且它不能改變shell的環境(它是父進程)。也許這對你有用(未經測試,在袖口以外)?

prfile=~/sqllib/db2profile 
if [ -s "$prfile" ] ; then 
    . "$prfile" 
else 
    while true ; do 
    read -p "Enter a valid Profile : " prfile 
    if [ -s "$prfile" ] ; then 
     . "$prfile" 
     break; 
    fi 
    done 
fi 
+0

我已經粘貼的代碼在我的腳本中正常工作,thimg是即時嘗試重寫perl – mviswa 2013-02-24 17:59:44

+0

我明白,但是,您不能在perl中修改shell的環境。 – pahoughton 2013-02-24 18:04:13