求救!徵linux高手幫忙解答這問題,感激不盡

1.至 Intel 網站下載 driver e1000-8.0.35.tar.gz,並解壓縮。(https://downloadcenter.intel.com/download/9180/Network-Adapter-Driver-for-Gigabit-PCI-Based-Network-Connections-for-Linux-)
2.完成 find.sh。
3.程式碼行數限定 20 行內。
4.程式碼使用 ls 指令完成 (程式碼內不能有 find 指令)。
5.除 e1000-8.0.35 的內容,find.sh 代入任何路徑為參數,皆可正常執行出與 find 相同的輸出。
6.輸出的內容項必須一模一樣,但是順序允許不同。
E.g.
e1000-8.0.35
e1000-8.0.35/e1000.7
以及
e1000-8.0.35/e1000.7
e1000-8.0.35
可視為相同輸出結果。


$ find e1000-8.0.35
e1000-8.0.35
e1000-8.0.35/e1000.7
e1000-8.0.35/src
e1000-8.0.35/src/Module.supported
e1000-8.0.35/src/e1000_nvm.c
e1000-8.0.35/src/kcompat.h
e1000-8.0.35/src/kcompat.c
e1000-8.0.35/src/e1000_mac.c
e1000-8.0.35/src/e1000_82540.c
e1000-8.0.35/src/e1000_param.c
e1000-8.0.35/src/e1000_api.h
e1000-8.0.35/src/e1000_api.c
e1000-8.0.35/src/e1000_ethtool.c
e1000-8.0.35/src/e1000_phy.c
e1000-8.0.35/src/Makefile
e1000-8.0.35/src/e1000_82542.c
e1000-8.0.35/src/e1000_regs.h
e1000-8.0.35/src/e1000_osdep.h
e1000-8.0.35/src/e1000_defines.h
e1000-8.0.35/src/e1000_nvm.h
e1000-8.0.35/src/e1000_manage.h
e1000-8.0.35/src/kcompat_ethtool.c
e1000-8.0.35/src/e1000_main.c
e1000-8.0.35/src/e1000_phy.h
e1000-8.0.35/src/e1000_mac.h
e1000-8.0.35/src/e1000.h
e1000-8.0.35/src/e1000_manage.c
e1000-8.0.35/src/e1000_82543.h
e1000-8.0.35/src/e1000_82541.c
e1000-8.0.35/src/e1000_82541.h
e1000-8.0.35/src/e1000_82543.c
e1000-8.0.35/src/e1000_hw.h
e1000-8.0.35/README
e1000-8.0.35/COPYING
e1000-8.0.35/pci.updates
e1000-8.0.35/SUMS
e1000-8.0.35/e1000.spec

=============================================================================

$ sh find.sh e1000-8.0.35
e1000-8.0.35
e1000-8.0.35/e1000.7
e1000-8.0.35/src
e1000-8.0.35/src/Module.supported
e1000-8.0.35/src/e1000_nvm.c
e1000-8.0.35/src/kcompat.h
e1000-8.0.35/src/kcompat.c
e1000-8.0.35/src/e1000_mac.c
e1000-8.0.35/src/e1000_82540.c
e1000-8.0.35/src/e1000_param.c
e1000-8.0.35/src/e1000_api.h
e1000-8.0.35/src/e1000_api.c
e1000-8.0.35/src/e1000_ethtool.c
e1000-8.0.35/src/e1000_phy.c
e1000-8.0.35/src/Makefile
e1000-8.0.35/src/e1000_82542.c
e1000-8.0.35/src/e1000_regs.h
e1000-8.0.35/src/e1000_osdep.h
e1000-8.0.35/src/e1000_defines.h
e1000-8.0.35/src/e1000_nvm.h
e1000-8.0.35/src/e1000_manage.h
e1000-8.0.35/src/kcompat_ethtool.c
e1000-8.0.35/src/e1000_main.c
e1000-8.0.35/src/e1000_phy.h
e1000-8.0.35/src/e1000_mac.h
e1000-8.0.35/src/e1000.h
e1000-8.0.35/src/e1000_manage.c
e1000-8.0.35/src/e1000_82543.h
e1000-8.0.35/src/e1000_82541.c
e1000-8.0.35/src/e1000_82541.h
e1000-8.0.35/src/e1000_82543.c
e1000-8.0.35/src/e1000_hw.h
e1000-8.0.35/README
e1000-8.0.35/COPYING
e1000-8.0.35/pci.updates
e1000-8.0.35/SUMS
e1000-8.0.35/e1000.spec
哪個學校哪個科系?

綠意盎藍 wrote:
1.至 Intel...(恕刪)
slash410 wrote:
哪個學校哪個科系?




堂弟的作業,大大有解嗎?
報上他學校系別年級學號,
可解.
綠意盎藍 wrote:
1.至 Intel...(恕刪)

slash410 wrote:
報上他學校系別年級學...(恕刪)


某私立大學資管系,好像是大二


綠意盎藍 wrote:
某私立大學資管系,...(恕刪)


不清不楚, 我也不清不楚的解一下..
google "linux shell for loop directories"
#! /usr/bin/perl

use strict;

my $dir;
foreach(@ARGV)
{
foreach(`ls -R $_`)
{


if(/:$/)
{
s/:$//g;
$dir=$_;

}
print "$dir/$_\n" foreach(split /\s+/);
}
}


以上為我用perl寫出的解答,加上空白行跟引號only行的script總行數為20(註1),並可一次丟數個目錄來列出。
ex: run.pl dirA dirB ....
當然為了不直接被當成作業送交,我砍掉了兩行內容,所以直接copy past去run絕對會出錯,得不到樓主要的結果
但基本核心概念不難,我有保留下來寫出,講白了就是ls結果的字串處理而已。

就行數來說,上面perl script只是急就章用簡單方式快速寫成,行數應該還可以縮減。
要翻成shell script並控制在20行內,應該也不難處理就是。

另外這隻script有個bug,直接餵檔案而不是目錄的話,會變成顯示檔案在"/"也就是root下,有需要的話請自行修改修復(註2)。(LGPL)
補充:混合餵目錄跟檔案給script(ex: run.pl dirA fileB)也會出錯,但要修也不難。

註:
1.含砍掉的行數
2.只需在某處增加3個字即可

綠意盎藍 wrote:
1.至 Intel...(恕刪)

01姿勢佳話
1. 我覺得老師是要叫同學學會LINUX 的指令基本用法
2. 請接水管
3. 正規表達式很重要 在DATA MINING 領域 跟資料檢索領域很常用到 (研究所的課)

find.sh

tar -xvzf e1000-8.0.35.tar.gz . //解壓縮至當前目錄 當前目錄 = ./
ls -l | grep -ir 'e1000-8.0.35|e1000.7' . 不解釋 請看鳥哥


以上 應該就是這樣
find.sh
==
#!/bin/sh

ls -R1 $1 | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done
==

這程序很接近但一樣有錯要改...哈 ~ 希望有幫到您..
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!