這是Shell腳本的一部分。 這是爲了檢查磁盤的使用情況。 我想知道這可以轉換爲Perl腳本? 請幫我這個。如何將shell轉換爲perl
DFCMD="df -P"
for fs in `eval $DFCMD`; do
FS=`echo $fs | awk ' { print $1 } '`
done
由於
這是Shell腳本的一部分。 這是爲了檢查磁盤的使用情況。 我想知道這可以轉換爲Perl腳本? 請幫我這個。如何將shell轉換爲perl
DFCMD="df -P"
for fs in `eval $DFCMD`; do
FS=`echo $fs | awk ' { print $1 } '`
done
由於
井,在Perl,它經常使用系統()函數來執行shell命令,但該系統()函數可以不返回command.You的輸出可以使用反引號(``)來獲得輸出。使用了放,我們也可以將shell腳本perl腳本
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 my @output = split('\r\n', `df -P | awk '{print \$1}'`);
6 print @output;
謝謝大家。我測試了您的所有建議,但仍然無法按預期工作。 我問這個的原因是爲了某些操作使用每個變量。 假設,如果我得到每個掛載點的FS變量, 我可以檢查掛載的目錄是否大於90%。 所以我需要使用perl腳本來讀取每一行。 是的,我很抱歉,我不是Perl的專家。 lol –
有可能是一個1liner做到這一點,但我會做到這一點(未測試)
my @command = qw/df -P/;
open(my $in, "-|", @command) or die "Can't run `@command`: $!";
while(<$in>) {
my ($first_col) = split;
print "$first_col\n";
}
(1)在標量上下文中,'split'返回字段計數,列表上下文中的字段。我們可以分配一個'@ array'('my @cols = split; print「$ cols [0] \ n」')。或者,我們可以從列表中解壓出第一個元素,如我的編輯所示。 (2)'split/\ s + \,$ _'不太可能工作。作爲默認變量,不需要指定'$ _'。正則表達式'/ \ s + /'與默認行爲類似,所以我們將使用它。 (3)'open'應該產生詞法文件句柄。通過它的參數列表更安全,因爲這繞過了殼。另外,錯誤處理很好。 – amon
perl -le 'print /(\S+)/ for `df -P`'
'df -P | perl -anE'say $ F [0]'#even short' ;-) – amon
@amon是的,但它有點更多的shell解決方案和OP想要更多的perl :)順便說一句,沒有chomping和'say'產生一個更多的換行符。 –
它期待堆棧溢出的免費解決方案是錯誤的。如果你根本不瞭解Perl,那麼這是開始學習的錯誤地方。你應該花幾個星期看書並嘗試練習,直到你確信你理解Perl以及如何使用它。之後,如果您已經編寫了自己的解決方案,但仍然無法正常工作,那麼您應該回到此處並顯示您的程序並描述您擁有的問題。那麼我們會幫助你。 – Borodin
不可能將此shell腳本轉換爲perl,因爲它的目的是設置shell變量; perl可以設置一個環境變量併產生一個新的shell,但不能在調用它的shell中設置一個變量。 (有辦法解決這個問題,但這將是一個perl程序,做了一些不同的事情。) – ysth