摘要: 經過2個多月的努力,該系列博文到這里已經即將結束,希望該系列的文章能夠給諸位今后的工作帶來些許幫助,也希望能有機會與大家在技術上多多交流,互相取長補短,同時也敬請大家能夠繼續(xù)關注我在后面給出的關于其他技術主題的系列博文。最后在這里感謝諸位網(wǎng)友的支持。 言歸正傳,該篇博客將承接上一篇博客,進入oracle啟動腳本的主體邏輯部分。#1. /etc/oratab腳本的格式如下:# MyOrcl1:/opt/oracle/product/OraHome:Y# MyOrcl2:/opt/oracle/product/OraHome:N#該文件的開頭處有很多的注釋說明,都是以#開頭,這些注釋需要在后面的.
閱讀全文 posted @ 2012-01-08 07:19 Stephen_Liu 閱讀(3003) | 評論 (0) 編輯 |
摘要: 該篇博客作為對之前Linux Shell常用技巧和高級技巧系列博客的總結,將以Oracle數(shù)據(jù)庫服務器啟動腳本為例,逐行進行解釋和說明,以幫助我們能夠更好的學習和理解Shell腳本的慣用技巧和強大之處。 Oracle的啟動腳本從功能上講主要分為兩個部分,第一部分是初始化各種環(huán)境變量,以確認當前Oracle服務器的版本,從而進一步確定啟動當前服務器的步驟和具體需要使用的各種Oracle工具,第二部分是基于之前判斷的結果,讀取當前服務器的各種配置信息,之后再通過Oracle提供的Shell命令完成數(shù)據(jù)庫的啟動工作。LOGMSG="logger -puser.alert -s "
閱讀全文 posted @ 2012-01-06 07:21 Stephen_Liu 閱讀(3983) | 評論 (2) 編輯 |
摘要: 為了方便我們每個人的學習,這里將給出Linux Shell高級技巧五篇系列博客的目錄以供大家在需要時參閱和查找。Linux Shell高級技巧(一) http://www.cnblogs.com/stephen-liu74/archive/2011/12/22/2271167.html一、將輸入信息轉換為大寫字符后再進行條件判斷二、為調試信息設置輸出級別三、判斷參數(shù)是否為數(shù)字四、判斷整數(shù)變量的奇偶性五、將Shell命令賦值給指定變量,以保證腳本的移植性六、獲取當前時間距紀元時間(1970年1月1日)所經過的天數(shù)Linux Shell高級技巧(二) http://www.cnblogs.com.
閱讀全文 posted @ 2012-01-04 07:20 Stephen_Liu 閱讀(9582) | 評論 (2) 編輯 |
摘要: 二十五、通過FTP下載指定的文件: 相比于手工調用FTP命令下載文件,該腳本提供了更為方便的操作方式。 /> cat > test25.sh #!/bin/sh #1. 測試腳本參數(shù)數(shù)量的有效性。 if [ $# -ne 2 ]; then echo "Usage: $0 ftp://... username" >&2 exit 1 fi #2. 獲取第一個參數(shù)的前六個字符,如果不是"ftp://",則視為非法FTP URL格式。這里cut的-c選項表示按照字符的方式截取第一到第六個字符。 header=`echo $1 | c
閱讀全文 posted @ 2012-01-01 00:03 Stephen_Liu 閱讀(6602) | 評論 (1) 編輯 |
摘要: 十九、將文件的輸出格式化為指定的寬度: 在這個技巧中,不僅包含了如何獲取和文件相關的詳細信息,如行數(shù),字符等,而且還可以讓文件按照指定的寬度輸出。這種應用在輸出幫助信息、License相關信息時還是比較有用的。 /> cat > test19.sh #!/bin/sh #1. 這里我們將缺省寬度設置為75,如果超過該寬度,將考慮折行顯示,否則直接在一行中全部打印輸出。這里只是為了演示方便,事實上,你完全可以將該值作為腳本或函數(shù)的參數(shù)傳入,那樣你將會得到更高的靈活性。 my_width=75 #2. for循環(huán)的讀取列表來自于腳本的參數(shù)。 #3. 在獲取lines和char...
閱讀全文 posted @ 2011-12-30 00:03 Stephen_Liu 閱讀(7392) | 評論 (0) 編輯 |
摘要: 十三、格式化輸出指定用戶的當前運行進程: 在這個例子中,我們通過腳本參數(shù)的形式,將用戶列表傳遞給該腳本,腳本在讀取參數(shù)后,以樹的形式將用戶列表中用戶的所屬進程打印出來。 /> cat > test13.sh #!/bin/sh #1. 循環(huán)讀取腳本參數(shù),構造egrep可以識別的用戶列表變量(基于grep的擴展正則表達式)。 #2. userlist變量尚未賦值,則直接使用第一個參數(shù)為它賦值。 #3. 如果已經賦值,且腳本參數(shù)中存在多個用戶,這里需要在每個用戶名之間加一個豎線,在egrep中,豎線是分割的元素之間是或的關系。 #4. shift命令向左移動一個腳本的位置參數(shù),...
閱讀全文 posted @ 2011-12-28 00:02 Stephen_Liu 閱讀(4887) | 評論 (0) 編輯 |
摘要: 七、非直接引用變量: 在Shell中提供了三種為標準(直接)變量賦值的方式: 1. 直接賦值。 2. 存儲一個命令的輸出。 3. 存儲某類型計算的結果。 然而這三種方式都是給已知變量名的變量賦值,如name=Stephen。但是在有些情況下,變量名本身就是動態(tài)的,需要依照運行的結果來構造變量名,之后才是為該變量賦值。這種變量被成為動態(tài)變量,或非直接變量。 /> cat > test7.sh #!/bin/sh work_dir=`pwd` #1. 由于變量名中不能存在反斜杠,因此這里需要將其替換為下劃線。 #2. work_dir和file_count兩個變量的變量值用于構...
閱讀全文 posted @ 2011-12-26 00:03 Stephen_Liu 閱讀(18994) | 評論 (2) 編輯 |
摘要: 該系列將重點介紹Linux Shell中的高級使用技巧,其主要面向有一定經驗的Shell開發(fā)者、Linux系統(tǒng)管理員,以及Linux的愛好者。博客中的示例主要來源于網(wǎng)絡和一些經典書籍,在經過本人的收集和整理之后,以系列博客的形式呈現(xiàn)給諸位。如果大家有更多更好的Shell腳本經典示例,且愿意在這里與我們一同分享的話,可以以郵件、博客回復等形式與我聯(lián)系,我將會盡量保證該系列的持續(xù)更新。一、將輸入信息轉換為大寫字符后再進行條件判斷: 我們在讀取用戶的正常輸入后,很有可能會將這些輸入信息用于條件判斷,那么在進行比較時,我們將不得不考慮這些信息的大小寫匹配問題。 /> cat > test1
閱讀全文 posted @ 2011-12-22 00:01 Stephen_Liu 閱讀(14285) | 評論 (4) 編輯 |
摘要: 在最近的日常工作中由于經常會和Linux服務器打交道,如Oracle性能優(yōu)化、我們數(shù)據(jù)采集服務器的資源利用率監(jiān)控,以及Debug服務器代碼并解決其效率和穩(wěn)定性等問題。因此這段時間總結的有關Linux Shell的系列博客就給予了我極大的幫助,然而在實際的使用中卻發(fā)現(xiàn),有的時候確實忘記了某個技術點或某個Shell命令的使用方式曾經在哪一篇博客中予以了說明,所以不得不多次點擊多篇博客,直到找到想要那篇的為止,鑒于此,為了方便我們每個人的查閱,這里特別給出了前十二篇系列博客的目錄以供大家參閱和查找。Linux Shell常用技巧(一) http://www.cnblogs.com/stephen-.
閱讀全文 posted @ 2011-12-20 09:36 Stephen_Liu 閱讀(23381) | 評論 (19) 編輯 |
摘要: 二十三. Bash Shell編程: 1. 讀取用戶變量: read命令是用于從終端或者文件中讀取輸入的內建命令,read命令讀取整行輸入,每行末尾的換行符不被讀入。在read命令后面,如果沒有指定變量名,讀取的數(shù)據(jù)將被自動賦值給特定的變量REPLY。下面的列表給出了read命令的常用方式:命令格式描述read answer從標準輸入讀取輸入并賦值給變量answer。read first last從標準輸入讀取輸入到第一個空格或者回車,將輸入的第一個單詞放到變量first中,并將該行其他的輸入放在變量last中。read從標準輸入讀取一行并賦值給特定變量REPLY。read -a arrayn
閱讀全文 posted @ 2011-12-19 00:05 Stephen_Liu 閱讀(10834) | 評論 (1) 編輯 |
摘要: 二十二. 交互式使用Bash Shell: 1. 用set命令設置bash的選項: 下面為set主要選項的列表及其表述:選項名開關縮寫描述allexport-a打開此開關,所有變量都自動輸出給子Shell。noclobber-C防止重定向時文件被覆蓋。noglob-d在路徑和文件名中,關閉通配符。 #打開該選項 /> set -o allexport #等同于set -a #關閉該選項 /> set +o allexport #等同于set +a #列出當前所有選項的當前值。 /> set -o allexport off braceexpand on emacs on er
閱讀全文 posted @ 2011-12-15 00:05 Stephen_Liu 閱讀(13336) | 評論 (0) 編輯 |
摘要: 二十. 通過管道組合Shell命令獲取系統(tǒng)運行數(shù)據(jù): 1. 輸出當前系統(tǒng)中占用內存最多的5條命令: #1) 通過ps命令列出當前主機正在運行的所有進程。 #2) 按照第五個字段基于數(shù)值的形式進行正常排序(由小到大)。 #3) 僅顯示最后5條輸出。 /> ps aux | sort -k 5n | tail -5 stephen 1861 0.2 2.0 96972 21596 ? S Nov11 2:24 nautilus stephen 1892 0.0 0.4 102108 4508 ? S<sl Nov11 0:00 /usr/bin/pulseaudio stephen 1
閱讀全文 posted @ 2011-12-12 00:02 Stephen_Liu 閱讀(5246) | 評論 (0) 編輯 |
摘要: 十九. 和系統(tǒng)運行進程相關的Shell命令: 1. 進程監(jiān)控命令(ps): 要對進程進行監(jiān)測和控制,首先必須要了解當前進程的情況,也就是需要查看當前進程,而ps命令就是最基本同時也是非常強大的進程查看命令。使用該命令可以確定有哪些進程正在運行和運行的狀態(tài)、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等??傊蟛糠中畔⒍际强梢酝ㄟ^執(zhí)行該命令得到的。 ps命令存在很多的命令行選項和參數(shù),然而我們最為常用只有兩種形式,這里先給出與它們相關的選項和參數(shù)的含義:選項說明a顯示終端上的所有進程,包括其他用戶的進程。u以用戶為主的格式來顯示程序狀況。x顯示所有程序,不以終端來區(qū)分。-e顯示所有進
閱讀全文 posted @ 2011-12-08 00:07 Stephen_Liu 閱讀(5088) | 評論 (0) 編輯 |
摘要: 十八. 和系統(tǒng)運行狀況相關的Shell命令: 1. Linux的實時監(jiān)測命令(watch): watch 是一個非常實用的命令,可以幫你實時監(jiān)測一個命令的運行結果,省得一遍又一遍的手動運行。該命令最為常用的兩個選項是-d和-n,其中-n表示間隔多少秒執(zhí)行一次"command",-d表示高亮發(fā)生變化的位置。下面列舉幾個在watch中常用的實時監(jiān)視命令: /> watch -d -n 1 'who' #每隔一秒執(zhí)行一次who命令,以監(jiān)視服務器當前用戶登錄的狀況 Every 1.0s: who Sat Nov 12 12:37:18 2011 stephen
閱讀全文 posted @ 2011-12-05 00:07 Stephen_Liu 閱讀(8660) | 評論 (0) 編輯 |
摘要: 十六. 文件查找命令find: 下面給出find命令的主要應用示例: /> ls -l #列出當前目錄下所包含的測試文件 -rw-r--r--. 1 root root 48217 Nov 12 00:57 install.log -rw-r--r--. 1 root root 37 Nov 12 00:56 testfile.dat -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2 -rw-r--r--. 1 root root 183 Nov 11 08:02 users -rw-r--r--. 1 root root 2
閱讀全文 posted @ 2011-12-01 00:06 Stephen_Liu 閱讀(5541) | 評論 (4) 編輯 |
摘要: 十二. 行的排序命令sort: 1. sort命令行選項:選項描述-t字段之間的分隔符-f基于字符排序時忽略大小寫-k定義排序的域字段,或者是基于域字段的部分數(shù)據(jù)進行排序-m將已排序的輸入文件,合并為一個排序后的輸出數(shù)據(jù)流-n以整數(shù)類型比較字段-o outfile將輸出寫到指定的文件-r倒置排序的順序為由大到小,正常排序為由小到大-u只有唯一的記錄,丟棄所有具有相同鍵值的記錄-b忽略前面的空格 2. sort使用實例: 提示:在下面的輸出結果中紅色標注的為第一排序字段,后面的依次為紫、綠。 /> sed -n '1,5p' /etc/passwd > users /
閱讀全文 posted @ 2011-11-28 07:12 Stephen_Liu 閱讀(5121) | 評論 (5) 編輯 |
摘要: 十一. awk編程: 1. 變量:在awk中變量無須定義即可使用,變量在賦值時即已經完成了定義。變量的類型可以是數(shù)字、字符串。根據(jù)使用的不同,未初始化變量的值為0或空白字符串" ",這主要取決于變量應用的上下文。下面為變量的賦值負號列表:符號含義等價形式=a = 5a = 5+=a = a + 5a += 5-=a = a - 5a -= 5*=a = a * 5a *= 5/=a = a / 5a /= 5%=a = a % 5a %= 5^=a = a ^ 5a ^= 5 /> awk '$1 ~ /Tom/ {Wage = $2 * $3; print
閱讀全文 posted @ 2011-11-24 07:34 Stephen_Liu 閱讀(6334) | 評論 (1) 編輯 |
摘要: 九. awk實用功能: 和sed一樣,awk也是逐行掃描文件的,從第一行到最后一行,尋找匹配特定模板的行,并在這些行上運行“選擇”動作。如果一個模板沒有指定動作,這些匹配的行就被顯示在屏幕上。如果一個動作沒有模板,所有被動作指定的行都被處理。 1. awk的基本格式: /> awk 'pattern' filename /> awk '{action}' filename /> awk 'pattern {action}' filename 具體應用方式分別見如下三個用例: /> cat employees Tom Jon
閱讀全文 posted @ 2011-11-21 06:48 Stephen_Liu 閱讀(7282) | 評論 (3) 編輯 |
摘要: 八. 流編輯器sed: sed一次處理一行文件并把輸出送往屏幕。sed把當前處理的行存儲在臨時緩沖區(qū)中,稱為模式空間(pattern space)。一旦sed完成對模式空間中的行的處理,模式空間中的行就被送往屏幕。行被處理完成之后,就被移出模式空間,程序接著讀入下一行,處理,顯示,移出......文件輸入的最后一行被處理完以后sed結束。通過存儲每一行在臨時緩沖區(qū),然后在緩沖區(qū)中操作該行,保證了原始文件不會被破壞。 1. sed的命令和選項:命令功能描述a\在當前行的后面加入一行或者文本。c\用新的文本改變或者替代本行的文本。d從pattern space位置刪除行。i\在當前行的上面插入文.
閱讀全文 posted @ 2011-11-17 06:56 Stephen_Liu 閱讀(8957) | 評論 (5) 編輯 |
摘要: 七. grep家族: 1. grep退出狀態(tài): 0: 表示成功; 1: 表示在所提供的文件無法找到匹配的pattern; 2: 表示參數(shù)中提供的文件不存在。 見如下示例: /> grep 'root' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin /> echo $? 0 /> grep 'root1' /etc/passwd #用戶root1并不存在 /> echo $? 1 /> grep '
閱讀全文 posted @ 2011-11-14 06:51 Stephen_Liu 閱讀(8760) | 評論 (4) 編輯 |
摘要: 一. 特殊文件: /dev/null和/dev/tty Linux系統(tǒng)提供了兩個對Shell編程非常有用的特殊文件,/dev/null和/dev/tty。其中/dev/null將會丟掉所有寫入它的數(shù)據(jù),換句換說,當程序將數(shù)據(jù)寫入到此文件時,會認為它已經成功完成寫入數(shù)據(jù)的操作,但實際上什么事都沒有做。如果你需要的是命令的退出狀態(tài),而非它的輸出,此功能會非常有用,見如下Shell代碼: /> vi test_dev_null.sh #!/bin/bash if grep hello TestFile > /dev/null then echo "Found" els
閱讀全文 posted @ 2011-11-10 07:19 Stephen_Liu 閱讀(15144) | 評論 (4) 編輯 |
摘要: 1. find find pathname -options [-print -exec -ok] 讓我們來看看該命令的參數(shù): pathname find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統(tǒng)根目錄。 -print find命令將匹配的文件輸出到標準輸出。 -exec find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令。相應命令的形式為'command' {} \;,注意{}和\;之間的空格,同時兩個{}之間沒有空格, 注意一定有分號結尾。 0) -ok 和-exec的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令,在執(zhí)行每一
閱讀全文 posted @ 2011-11-07 07:26 Stephen_Liu 閱讀(6932) | 評論 (4) 編輯 |
摘要: 五、BASH SHELL編程:1. 初始化順序: /etc/profile ( ~/.bash_profile | ~/.bash_login | ~/.profile ) ~/.bashrc2. set -o allexport 當前shell變量對其所有子shell都有效. set +o allexport 當前shell變量對其所有子shell都無效. set -o noclobber 重定向輸出時,如果輸出文件已經存在則提示輸出失敗, date > out; date > out, 第二次操作失敗 set +o noclobber 缺省shell行為. date >
閱讀全文 posted @ 2011-11-04 07:09 Stephen_Liu 閱讀(3969) | 評論 (1) 編輯 |
摘要: 零、shell中的內部變量:1. $?: 表示shell命令的返回值.2. $$: 表示當前shell的pid.3. $!: 最后一個放入后臺作業(yè)的PID值.4. $0: 表示腳本的名字.5. $1--$9,${10}: 表示腳本的第一到九個參數(shù),和第十個參數(shù).6. $#: 表示參數(shù)的個數(shù).7. $*,$@: 表示所有的參數(shù). 兩者的區(qū)別如下: //都是雙引號惹的禍^-^ /> set 'apple pie' pears peaches /> for i in $* > do > echo $i > done apple pie pears pea
閱讀全文 posted @ 2011-11-01 06:56 Stephen_Liu 閱讀(5399) | 評論 (5) 編輯 |