2013-05-29 229 views
0

如何使用Perl創建另一個名爲hello.sh的文件?生成bash腳本

我想:

#*perl codes* 
#Before this has perl's section of codes 
#Now want to create shell script 
open FILE , ">hello.sh" or die $!; 
chmod 0755, "hello.sh"; 
print FILE 
"#!/bin/sh 
echo "Hello World! 
"; 
close FILE; 

但是,這是非常多餘。如果我想使用IF-ELSE,那麼這樣做很難。

有什麼想法?

編輯

我想這

print FILE 
"#!/bin/sh 
if [-d $1]; then 
echo "It's a directory at $(pwd)" 
else 
echo $1 is not a directory 
fi 
"; 

正如你所看到的,Its檢測爲不是字符串, 難道我錯過這裏的任何語法?

+0

Perl可以將任何內容打印到您可以鍵入到af的文件中ile,是的。 –

+3

是的,你可以,沒有什麼困難,你的評論根本沒有意義。 – hobbs

+0

你不打印你的文件內容。這只是一個字符串,不會去任何地方。 – Arkadiy

回答

3

您應該打印內容的文件句柄FILE

open FILE , ">", "hello.sh" or die $!; 
chmod 0755, "hello.sh"; 

print FILE <<'END'; 
#!/bin/sh 
echo "Hello World!" 
END 

close FILE; 

<<'END' ..是定界符不嘗試插值其中的perl會識別爲變量字符串(前綴$@

它還確保'"引號不需要用\

+0

謝謝,這是我正在尋找,將谷歌,並儘快研究。但是'q'可能是什麼? –

+0

是的,只要它不在內容中。我已經將它重命名爲'END' –

+0

@mpapec值得注意的是''未加引號(<< END)'或'雙引號(<<「END」'將會插入。 – chrsblck

0

這工作:

open FILE , ">hello.sh" or die $!; 
chmod 0755, "hello.sh"; 
print FILE "#!/bin/sh 
echo Hello World! 
"; 
close FILE; 
1

進行轉義需要轉義引號:

print FILE '#!/bin/sh 
if [-d $1]; then 
echo "It\'s a directory at $(pwd)" 
else 
echo $1 is not a directory 
fi 
'; 

或者使用q

print FILE q{#!/bin/sh 
if [-d $1]; then 
echo "It's a directory at $(pwd)" 
else 
echo $1 is not a directory 
fi 
}; 

還是一個定界符:

print FILE <<'OUT'; 
#!/bin/sh 
if [-d $1]; then 
echo "It's a directory at $(pwd)" 
else 
echo $1 is not a directory 
fi 
OUT 
+1

'使用未初始化的值字符串中的$ 1 ...此外,'$('是進程的實際組ID。使用非插值引號分隔符(''...','q {}','<< OUT') 。注意:'$ 1'是shell腳本中的第一個參數。 – amon

+0

@amon,謝謝,我修正了它。 – gpojd