亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
樓主: send_linux
打印 上一主題 下一主題

ChinaUnix技術(shù)實(shí)踐之四----Shell編程大賽! [復(fù)制鏈接]

論壇徽章:
0
41 [報(bào)告]
發(fā)表于 2011-05-17 09:26 |只看該作者
本帖最后由 surpass_li 于 2011-05-17 10:57 編輯

問(wèn)題1:
用最簡(jiǎn)潔的命令列出當(dāng)前目錄下的一級(jí)子目錄,可以不包含隱藏目錄(目錄名以.開頭的目錄)
  1. ll -d */


  2. ls -d */
復(fù)制代碼
問(wèn)題2:
GNU sed 提供了-i選項(xiàng),為什么有人說(shuō)sed -i 并不象 ed 一樣真正的編輯文件?(提示:觀察文件改變前后的inode)
  1. ed 是一個(gè)交互式的通用的文本編輯器, sed 則主要用在 scripts 中進(jìn)行非交互式的文件修改.
  2. ed 一個(gè)文件時(shí), 我們可以自由的在文件的各行間跳來(lái)跳去, 而 sed 則是對(duì)文件順序地掃描一遍且僅一遍.
  3. sed 打開文件僅一次. 非交互的 ed 打開文件也僅一次, 但在交互式的 ed 中, 每次 w 應(yīng)該會(huì)導(dǎo)致一次 close()+open()
  4. 當(dāng)然, ed 也可以像 sed 那樣進(jìn)行非交互式的文件修改. 既然 ed 可以在文件里來(lái)回跳轉(zhuǎn), 一定程度上要比 sed 更靈活一些. 說(shuō)到使用變量, ed 跟 sed 是一樣的, 都得通過(guò) $var 的方式.
復(fù)制代碼
問(wèn)題3:
用shell寫一個(gè)cgi腳本,提供一個(gè)簡(jiǎn)單的webmail介面,將本地的一個(gè)文件通過(guò)web服務(wù)器發(fā)送到指定的郵箱

問(wèn)題4:
awk -F'' 與 awk -F '' 一樣嗎?
  1. 不一樣,前面的語(yǔ)法有誤。
復(fù)制代碼
問(wèn)題5:
這條語(yǔ)句有什么作用?
sed -if /script/scr.sedcc test.txt
  1. 先對(duì)test.txt文件做備份為test.txtf,同時(shí)執(zhí)行命令“/script/scr.sedcc ” 將文件test.txt中的內(nèi)容刪除匹配“script“字符串的行里的r.sed字符串,一行只刪一次
復(fù)制代碼
問(wèn)題6:
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

是如何執(zhí)行的?與"#!/usr/local/bin/tclsh"相比,它有什么優(yōu)點(diǎn)?
  1. 表示用tclsh來(lái)執(zhí)行當(dāng)前的腳本及其參數(shù),并替換當(dāng)前的shell
復(fù)制代碼
問(wèn)題7:
#!/bin/sed -f"  shebang 后可有其它字符嗎?為什么?
  1. 不可以。因?yàn)?f后要指定sed要讀取的命令文件。如果跟著其它的參數(shù),會(huì)被當(dāng)成文件名
復(fù)制代碼
問(wèn)題8:
GNU awk的$1=$1到底有什么作用?$0=$0呢?
  1. $1=$1為了讓OFS生效。$0=$0不能。
復(fù)制代碼
問(wèn)題9:
寫一個(gè)shell腳本,輸出CU現(xiàn)有的版面和相應(yīng)版主,并統(tǒng)計(jì)有多少個(gè)版面及多少個(gè)版主。


問(wèn)題10:
人機(jī)五子棋。原始規(guī)則(無(wú)禁手),最好加上標(biāo)準(zhǔn)規(guī)則,三手交換(即黑下第二手之后白可以提出交換),五手兩打,黑三三禁手,黑四四禁手,黑長(zhǎng)連禁手(超過(guò)5個(gè)子相連),逢五無(wú)禁手。白無(wú)禁手,長(zhǎng)連也算勝。關(guān)鍵在于人機(jī)對(duì)下。

論壇徽章:
0
42 [報(bào)告]
發(fā)表于 2011-05-17 09:35 |只看該作者
老大,加一道題吧,: 以最簡(jiǎn)單的方式提取IP地址 ,...我特想知道,每次匹配都要寫半天...

論壇徽章:
27
CU大;照
日期:2013-03-13 15:15:08CU大;照
日期:2013-05-20 10:46:38CU大;照
日期:2013-05-20 10:46:44CU大;照
日期:2013-09-18 15:24:09CU大牛徽章
日期:2013-09-18 15:24:20CU大;照
日期:2013-09-18 15:24:25CU大;照
日期:2013-09-18 15:24:31CU大;照
日期:2013-09-18 15:24:36CU大;照
日期:2013-09-18 15:24:41CU大;照
日期:2013-09-18 15:24:48CU大;照
日期:2013-09-18 15:24:52處女座
日期:2013-09-27 17:45:43
43 [報(bào)告]
發(fā)表于 2011-05-17 09:46 |只看該作者
本帖最后由 yifangyou 于 2011-05-24 00:00 編輯

問(wèn)題1:
用最簡(jiǎn)潔的命令列出當(dāng)前目錄下的一級(jí)子目錄,可以不包含隱藏目錄(目錄名以.開頭的目錄)

答:
  1. ls -F|grep "/"
復(fù)制代碼
問(wèn)題2:
GNU sed 提供了-i選項(xiàng),為什么有人說(shuō)sed -i 并不象 ed 一樣真正的編輯文件?(提示:觀察文件改變前后的inode)

答:sed -i會(huì)先把編輯好的內(nèi)容生成到臨時(shí)文件,然后把原文件刪除,再把臨時(shí)文件改為原文件名,這個(gè)文件和原文件已經(jīng)不是同一個(gè)文件
而ed只是在原文件上修改,并不移動(dòng)或者刪除原文件
sed -i 對(duì)于經(jīng)常被讀的文件或者已經(jīng)被打開的文件非常不安全


問(wèn)題3:
用shell寫一個(gè)cgi腳本,提供一個(gè)簡(jiǎn)單的webmail介面,將本地的一個(gè)文件通過(guò)web服務(wù)器發(fā)送到指定的郵箱

答:我寫了兩個(gè)頁(yè)面,支持多個(gè)收件人,支持發(fā)送人定義,支持中文和發(fā)送圖片或者文本,或者二進(jìn)制文件
webmail.sh:
  1. #!/bin/bash

  2. echo "Content-type: text/html"
  3. echo ""

  4. echo '<html>'
  5. echo '<head>'
  6. echo '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">'
  7. echo '<title>send mail</title>'
  8. echo '</head>'
  9. echo '<body>'
  10. echo '<form action="sendmail.sh" method="post"  ENCTYPE="multipart/form-data">';
  11. echo '<table>';
  12. echo '<tr><td width="200px">send from:</td><td><input type="text" name="mail_from" value="" style="width:300px"></td></tr>';
  13. echo '<tr><td>send to:</td><td><input type="text" name="mail_to" value="" style="width:300px">(separate by ;)</td></tr>';
  14. echo '<tr><td>title</td><td><input type="text" name="mail_title" value="" style="width:300px"></td></tr>';
  15. echo '<tr><td>mail body</td><td><textarea name="mail_body" style="width:400px;height:300px"></textarea></td></tr>';
  16. echo '<tr><td>Attach file</td><td><input type="file" name="mail_attachment" value=""></td></tr>';
  17. echo '<tr><td>&nbsp;</td><td><input type="submit" value="send"></td></tr>';
  18. echo '</table>'
  19. echo '</form>';
  20. echo '</body>'
  21. echo '</html>'
  22. exit 0
復(fù)制代碼
sendmail.sh的代碼:
  1. #!/bin/bash
  2. tmp_path=/tmp
  3. uuid=`cat /proc/sys/kernel/random/uuid`
  4. uuid_file=$tmp_path/$uuid;
  5. Muttrc_file=$tmp_path/Muttrc

  6. echo "Content-type: text/html"
  7. echo ""

  8. echo '<html>'
  9. echo '<head>'
  10. echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
  11. echo '<title>Environment Variables</title>'
  12. echo '</head>'
  13. echo '<body>'
  14. #把post的數(shù)據(jù)寫入文件
  15. cat - > $uuid_file
  16. #讀取文件分隔行
  17. break_line=`head -1 $uuid_file`""
  18. line_no=0;
  19. #按照分隔行分隔
  20. while read  field
  21. do
  22.         let line_no=$line_no+1;
  23.         if [ "$field" == "$break_line" ]
  24.         then
  25.                 break_line_no="$break_line_no $line_no"
  26.         fi
  27. done < $uuid_file
  28. break_line_no="$break_line_no $line_no"
  29. break_line_nos=($(echo "$break_line_no"))
  30. #獲取發(fā)送者的郵箱
  31. let data_line_end=${break_line_nos[1]}-1
  32. let data_line_total=$data_line_end-${break_line_nos[0]}-2;
  33. mail_from=`head -$data_line_end $uuid_file|tail -$data_line_total|tr "\r\n" " "`


  34. #獲取收件人的郵箱
  35. let data_line_end=${break_line_nos[2]}-1
  36. let data_line_total=$data_line_end-${break_line_nos[1]}-2;
  37. mail_to=`head -$data_line_end $uuid_file|tail -$data_line_total|tr ";" " "`


  38. #獲取標(biāo)題
  39. let data_line_end=${break_line_nos[3]}-1
  40. let data_line_total=$data_line_end-${break_line_nos[2]}-2;
  41. title=`head -$data_line_end $uuid_file|tail -$data_line_total`

  42. #獲取郵件正文
  43. body_file=$uuid_file".body"
  44. let data_line_end=${break_line_nos[4]}-1
  45. let data_line_total=$data_line_end-${break_line_nos[3]}-2;
  46. head -$data_line_end $uuid_file|tail -$data_line_total > $body_file

  47. #獲取附件
  48. attach_file=""
  49. let head_line_start=${break_line_nos[4]}+1
  50. attach_name=`head -$head_line_start $uuid_file|tail -1|sed 's/.*filename="\(.*\)"\s*$/\1/'`;
  51. if [[ $attach_name != "" ]]
  52. then
  53.         let data_line_end=${break_line_nos[5]}-1
  54.         let data_line_total=$data_line_end-${break_line_nos[4]}-3;
  55.         attach_file=$tmp_path/$attach_name
  56.         head -$data_line_end $uuid_file|tail -$data_line_total > $attach_file
  57.         echo $attach_file
  58. fi

  59. #設(shè)置發(fā)送者郵箱
  60. echo "set from=\"$mail_from\"" > $Muttrc_file
  61. echo "set use_from=yes" >> $Muttrc_file
  62. echo 'set envelope_from="yes"' >> $Muttrc_file
  63. #設(shè)置發(fā)送者名稱
  64. echo "set realname=\"$mail_from\"" >> $Muttrc_file
  65. #設(shè)置編碼
  66. echo "set charset=\"UTF-8\"" >> $Muttrc_file

  67. if [ "$attach_file" = "" ]
  68. then
  69.         #發(fā)送無(wú)附件郵件
  70.         mutt -s "$title" -F $Muttrc_file $mail_to < $body_file
  71. else
  72.   #發(fā)送有附件郵件
  73.         mutt -s "$title" -F $Muttrc_file $mail_to -a $attach_file < $body_file
  74. fi
  75. if [ $? ]
  76. then
  77.         echo '<script>alert("send mail success");location="webmail.sh"</script>'
  78. else
  79.         echo '<script>alert("send mail fail");location="webmail.sh"</script>'
  80. fi
  81. #rm -f $body_file $attach_file $uuid_file
  82. echo '</body>'
  83. echo '</html>'

  84. exit 0;
復(fù)制代碼




問(wèn)題4:
awk -F'' 與 awk -F '' 一樣嗎?

答:awk -F''是錯(cuò)的,awk -F ''聲明分隔符為空格


問(wèn)題5:
這條語(yǔ)句有什么作用?
sed -if /script/scr.sedcc test.txt

答:沒(méi)有用處,這句話等同于sed -i "" /script/scr.sedcc
如下面的測(cè)試結(jié)果:
  1. [root@localhost scp]# cat /script/scr.sedcc
  2. 1d
  3. s/echo/ppp/g
  4. s/password/333333/g
  5. [root@localhost scp]# sed -if /script/scr.sedcc  test.txt
  6. [root@localhost scp]# cat /script/scr.sedcc
  7. 1d
  8. s/echo/ppp/g
  9. s/password/333333/g
  10. [root@localhost scp]# sed -if "" /script/scr.sedcc  test.txt
  11. [root@localhost scp]# cat /script/scr.sedcc
  12. 1d
  13. s/echo/ppp/g
  14. s/password/333333/g
復(fù)制代碼
而sed -i -f /script/scr.sedcc  test.txt才有用處
sed -i -f /script/scr.sedcc  test.txt實(shí)現(xiàn)對(duì)test.txt執(zhí)行/script/scr.sedcc里的語(yǔ)句后把輸出的內(nèi)容寫到臨時(shí)文件,用臨時(shí)文件把test.txt覆蓋,
  1. [root@localhost scp]# cat /script/scr.sedcc
  2. 1d
  3. s/echo/ppp/g
  4. s/password/333333/g
  5. [root@localhost scp]# sed -i -f /script/scr.sedcc  test.txt
  6. [root@localhost scp]# cat test.txt
  7. ppp 11111
  8. sd 333333
  9. sscript

  10. [root@localhost scp]# cat /script/scr.sedcc
  11. 1d
  12. s/echo/ppp/g
  13. s/password/333333/g
復(fù)制代碼
問(wèn)題6:
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

是如何執(zhí)行的?與"#!/usr/local/bin/tclsh"相比,它有什么優(yōu)點(diǎn)?

答:執(zhí)行過(guò)程是:
1.這個(gè)腳本被sh執(zhí)行
2.在sh里1,2行是注釋,因此不執(zhí)行
3.sh 執(zhí)行到第三行后,exec語(yǔ)句導(dǎo)致shell停止處理而啟動(dòng) tclsh來(lái)重新處理整個(gè)腳本
啟動(dòng)tclsh,把這個(gè)腳本本身給傳進(jìn)去($0),再把別的參數(shù)($@)一起傳進(jìn)去
4.當(dāng) tclsh啟動(dòng)時(shí),因?yàn)榈诙械姆葱本導(dǎo)致第三行被作為第二行注釋的一部分,它把所有三行都作為注釋對(duì)待。

用#!/usr/local/bin/tclsh的缺點(diǎn)
1.當(dāng)tclsh的安裝路徑不是/usr/local/bin/的話,需要修改這個(gè)腳本的"#!/usr/local/bin/tclsh"
2.許多UNIX系統(tǒng)不允許 #!行超出30個(gè)字符的長(zhǎng)度,所以要確定tclsh可執(zhí)行文件能被用短文件名訪問(wèn)。

#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
的好處:
1.tclsh的執(zhí)行路徑不需要寫死是某個(gè)路徑下的tclsh,這樣tclsh就可以隨心安裝到那里都可以
2.解決了許多UNIX系統(tǒng)不允許 #!行超出30個(gè)字符的長(zhǎng)度的文件。
3.這種方法在tclsh自身也是shell腳本時(shí)仍可運(yùn)行

問(wèn)題7:#!/bin/sed -f"  shebang 后可有其它字符嗎?為什么?
答:可以有空格或者不可見(jiàn)字符,但是不能有其他可見(jiàn)字符
因?yàn)閟ed的對(duì)于-f的定義如下:
sed [選項(xiàng)] -f sed腳本文件 輸入文件

其中sed腳本文件就是shebang所在的文件
若是輸入了一個(gè)可見(jiàn)字符a :
#!/bin/sed -f a
那就變成了
#!/bin/sed -f a shebang所在的文件 被操作的文件
這時(shí)a變?yōu)閟cript文件
而shebang所在的文件變?yōu)楸徊僮魑募?br />
而我們實(shí)際要這樣用
#!/bin/sed -f shebang所在的文件 被操作的文件


問(wèn)題8:
GNU awk的$1=$1到底有什么作用?$0=$0呢?

答:$1=$1是用于去除第一列為0的行或者是空行
  1. cat a.txt
  2. a b c

  3. 0 1 2
  4. 3 4 5

  5. awk '{if($1=$1)print $0}' a.txt
  6. a b c
  7. 3 4 5
復(fù)制代碼
$0=$0是用于去除空行
  1. cat a.txt
  2. a b c

  3. 0 1 2
  4. 3 4 5

  5. awk '{if($1=$1)print $0}' a.txt
  6. a b c
  7. 0 1 2
  8. 3 4 5
復(fù)制代碼
問(wèn)題9:
寫一個(gè)shell腳本,輸出CU現(xiàn)有的版面和相應(yīng)版主,并統(tǒng)計(jì)有多少個(gè)版面及多少個(gè)版主。

答:
  1. #!/bin/bash
  2. #清空臨時(shí)文件
  3. > webmaster.txt
  4. > forum.txt
  5. #下載首頁(yè)
  6. wget http://72891.cn -O index.html -o g.log
  7. if [ "$?" -ne "0" ]
  8. then
  9.         echo "get index.html fail"
  10.         exit 1;
  11. fi

  12. #解析首頁(yè)里各個(gè)版的url
  13. cat index.html|tr "\r\n" " "|sed 's/<\//\n/g'| sed 's/.*<a\s*href\s*=\s*"\(forum\-[0-9]*\-[0-9]*.html\)".*>/\n1b5fd1544f2e9dff4956b84ba4ff60f5 \1 /g' |tr "<" "\n"|grep 1b5fd1544f2e9dff4956b84ba4ff60f5|awk '{if($3=$3)print $2,$3}'|uniq > forum.txt

  14. printf "+%30s+%80s+\n" "" "" |tr " " "-"
  15. cat forum.txt|while read line
  16. do
  17.         forum_url=`echo "$line"|awk '{print $1}'`
  18.         forum=`echo "$line"|awk '{print $2}'`;
  19.         #獲取各個(gè)版的html
  20.         wget http://72891.cn/$forum_url -O index.html -o g.log
  21.         if [ "$?" -eq "0" ]
  22.         then
  23.                 #解析出各個(gè)版的版主
  24.                 cat index.html|tr "\r\n" " "|sed 's/<\/p>/\n/g'|sed 's/<p id="modedby">/\n1b5fd1544f2e9dff4956b84ba4ff60f5 /g'|grep 1b5fd1544f2e9dff4956b84ba4ff60f5|sed 's/<\//"\n/g'| sed 's/<a .*>/\nbb512805cc402f58c2188678b59148eb "/g' |grep bb512805cc402f58c2188678b59148eb|awk -v fu="$forum_url" '{if($2=$2)print fu,$2}'|uniq >>  webmaster.txt
  25.         fi
  26.         webmasters=`grep "$forum_url" webmaster.txt |awk '{print $2}'|tr "\n" ","`
  27.         #輸出版和版主
  28.         printf "|%30s|%80s|\n" "$forum" "$webmasters"
  29. done
  30. printf "+%30s+%80s+\n" "" "" |tr " " "-"
  31. forum_total=`wc -l forum.txt`
  32. webmaster_total=`uniq -f 1 webmaster.txt |wc -l`
  33. #輸出統(tǒng)計(jì)結(jié)果
  34. echo "forum total:$forum_total,webmaster total:$webmaster_total"
復(fù)制代碼

論壇徽章:
0
44 [報(bào)告]
發(fā)表于 2011-05-17 17:45 |只看該作者
Shell版塊是ChinaUnix社區(qū)內(nèi)討論比較熱烈的技術(shù)版塊之一。之前我們已經(jīng)成功舉辦了PHP、C/C++和Perl的編程大 ...
send_linux 發(fā)表于 2011-05-15 23:51

二等獎(jiǎng):5名,,獲獎(jiǎng)?wù)邽樽钕日_完成8道試題的七名用戶,贈(zèng)送特別定制版ChinaUnix商務(wù)襯衫。

    恕我愚鈍,這個(gè)到底是五還是七?

論壇徽章:
49
15-16賽季CBA聯(lián)賽之福建
日期:2016-06-22 16:22:002015年亞洲杯之中國(guó)
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36雙魚座
日期:2015-01-02 22:04:33午馬
日期:2014-11-25 09:58:35辰龍
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龍
日期:2014-08-21 10:47:58
45 [報(bào)告]
發(fā)表于 2011-05-17 18:47 |只看該作者
二等獎(jiǎng):5名,,獲獎(jiǎng)?wù)邽樽钕日_完成8道試題的七名用戶,贈(zèng)送特別定制版ChinaUnix商務(wù)襯衫。

    恕我 ...
jhinux 發(fā)表于 2011-05-17 17:45



    五名,sorry,我去修改一下。

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運(yùn)維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
46 [報(bào)告]
發(fā)表于 2011-05-17 21:36 |只看該作者
回復(fù) 45# nuclearxin


    誤導(dǎo)也是一種測(cè)試啊

論壇徽章:
3
CU大;照
日期:2013-05-20 10:43:41CU大;照
日期:2013-05-20 10:44:06CU大;照
日期:2013-05-20 10:44:16
47 [報(bào)告]
發(fā)表于 2011-05-18 18:39 |只看該作者


有機(jī)會(huì),我也試一下,先占個(gè)位置,呵呵

論壇徽章:
0
48 [報(bào)告]
發(fā)表于 2011-05-18 18:52 |只看該作者
...第十題稍微變態(tài)了些。。。

論壇徽章:
49
15-16賽季CBA聯(lián)賽之福建
日期:2016-06-22 16:22:002015年亞洲杯之中國(guó)
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36雙魚座
日期:2015-01-02 22:04:33午馬
日期:2014-11-25 09:58:35辰龍
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龍
日期:2014-08-21 10:47:58
49 [報(bào)告]
發(fā)表于 2011-05-18 22:55 |只看該作者


居然有人反映,置頂了看不到了,真是奇怪。

論壇徽章:
0
50 [報(bào)告]
發(fā)表于 2011-05-18 22:56 |只看該作者
哇, 已經(jīng)開始好幾天了, 今天才在sina微薄看到
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP