Linux Unix shell 編程指南學習筆記(第五部分)

來源:互聯網
上載者:User

標籤:cgi   shell   getopts   expr   awk   

第二十五章 深入討論 <<

當shell 看到 << 的時候,它知道下一個詞是一個分界符,該分界符後面的內容都被當做輸入,直到shell又看到該分界符(位於單獨的一行)。比如:

cat >> tmpfile <<DOC> this is the first line> this is the second line> third> forth>.....>DOC
其中DOC就是分界符,再次在新的行中輸入DOC時,表示輸入已經完成。

快速建立一個檔案

自動進入菜單

ftp傳輸(執行個體操作)

串連到其他應用系統 (執行個體操作)


快速建立檔案

cat  >> tmpfile  <<delimiter(加入tab鍵後有的系統不能識別)  或者  cat >> tmpfile <<-delimiter

快速建立列印文檔 (輸入文檔後,按enter鍵自動送往印表機): lpr << qc   


第二十六章   shell工具

建立以日期命名的檔案及臨時檔案

訊號

trap命令以及如何捕獲訊號

eval命令

logger命令


使用date命令建立檔案:

date格式: date  [option] +%format  (詳情請自己查閱 date --help)

工作中經常會定義一些屬於自己的檔案格式下面就以 XXX_XXX_日期資訊.log建立檔案:

其中日期資訊的命令  date +%Y_%m_%d:%H:%M:%S.%N 

建立檔案的命令: >XXX_XXX_`date +%Y_%m_%d:%H:%M:%S.%N`.log ,ls將看到如下檔案:

XXX_XXX_2014_10_17:08:30:21.128727204.log


建立唯一的臨時檔案: 使用 $$(進程號) 建立指令碼運行中 唯一的臨時檔案(系統中進程號是唯一的),退出程式時刪除臨時檔案 。


訊號

訊號就是系統向指令碼或命令發出的訊息。常用訊號及其含義表(kill -l 顯示所有的訊號):

訊號<span style="white-space:pre"></span>訊號名含義 1SIGHUP掛起或父進程被殺死 2SIGINT來自鍵盤的中斷訊號,通常是< CTRL-C> 3SIGQUIT從鍵盤退出 9SIGKILL無條件終止 11SIGSEGV段(記憶體)衝突 15SIGTERM軟體終止(預設殺進程訊號)
發送訊號的格式:kill  [ -signal  |  -s  signal ]    PID[s]

殺死一個進程

關閉當前shell:kill     -9    $$  (另外可以用 ps 查詢進程資訊)


活動訊號

有些訊號可以被程式或指令碼捕獲,但是有些訊號不能被捕獲(接收到訊號9後就不能再接收其他訊號)。

指令碼中需要關注的訊號是  1 SIGHUP  、2 SIGINT 、3 SIGQUIT 、15 SIGTERM

捕獲到這些訊號後交給系統處理,或者  由指令碼或應用自行處理這些訊號(需要用到trap命令)。


trap

trap 命令 可以在指令碼中捕捉訊號, trap  name(捕捉到訊號後的處理函數) signal(s)

trap常用方法舉例:

trap "" 2 3忽略訊號2和訊號3,使用者不能終止該指令碼trap"commands" 2 3如果捕捉到訊號2或3,就執行相應的c o m m a n d s命令trap 2 3複位訊號2和3,使用者可以終止該指令碼也可以使用單引號(‘’)來代替雙引號(“”);其結果是一樣的。
下面給出一個監聽鍵盤中斷<CTRL_C>樣本:

#!/bin/bash trap "keyboardIntHandler" 2function keyboardIntHandler(){    echo "CTRL_C pressed !"}while [ 1 ] do    sleep 2done


eval
eval 使用域一次掃描無法實現其功能的變數——它首先會掃描命令列進行所有的置換 , 然後再執行命令。

執行含有命令的字串:

#!/bin/bash NAME='cat Ctrl_c_Listener'echo -e  $NAME '\n\n'eval $NAME
從上述執行結果比較,發現eval 回顯的是檔案的內容,而不是name的字串值。

對於一個僅僅存有名-值對的檔案,使用eval可以將第一列作為變數,而第二列作為值,範例程式碼如下:

key_value_pair 的內容:key_one     timekey_two     lovekey_three   mum指令碼kv_eval的內容:#!/bin/bash while read NAME TYPEdo    eval `echo "${NAME}"="${TYPE}"`done < key_value_pairecho "key_one's value is  ${key_one}"echo "key_two's value is  ${key_two}"

logger命令:

使用該命令之前最好先查閱線上手冊(不同供應商提供的作業系統中該命令的文法不一樣)。

logger命令格式:  logger  [ options ] message

ubuntu 12.04中的選項:

 -d, --udp             use UDP (TCP is default) -i, --id              log the process ID too -f, --file <file>     log the contents of this file -h, --help            display this help text and exit -n, --server <name>   write to this remote syslog server -P, --port <number>   use this UDP port -p, --priority <prio> mark given message with this priority -s, --stderr          output message to standard error as well -t, --tag <tag>       mark every line with this tag -u, --socket <socket> write to this Unix socket -V, --version         output version information and exit

第27章 幾個指令碼例子

pingall:一個按照/etc/hosts檔案中的條目逐一ping所有主機的指令碼。
backup_gen:一個通用的備份指令碼,能夠載入預設設定。
del.lines:一個引用sed命令的指令碼,能從檔案中刪除若干行。
access_deny:一個能夠阻止某些特定使用者登入的工具。
logroll:一個能夠清除超過某一長度的日誌的工具。
nfsdown:一個快速unmount所有nfs檔案系統的工具

實踐。


第28章  運行層級指令碼

如果希望在系統啟動時自動運行某些應用程式、服務或指令碼,或者在系統重啟動時能夠正確地關閉這些程式,那麼需要建立運行層級指令碼。


運行層級

確定當前的運行層級: who -r  (linux 系統: runlevel  第一隻個值是系統的前一個運行層級,第二隻值是當前運行層級。)


inittab

系統啟動過程中會啟動init進程,該進程通過inittab的設定檔來查看需要啟動哪些服務、應當進入哪一個運行層級。

inittab格式: id:rstart:action:process

id:   進程的唯一標識

rstart:運行該進程的層級

action:告訴init進程如何對待process所對應的進程。

process:實際要啟動並執行命令。


第二十九章  cgi 指令碼

cgi : common  gateway interface (通用閘道介面)。

串連web的協議:協議包括http、ftp、mailto、file、telnet和news。這裡我們只關心http協議(超文字傳輸通訊協定 (HTTP))。

該章主要講解 web操作,實踐。


Linux Unix shell 編程指南學習筆記(第五部分)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.