shell入門基礎必備(轉)
1.建立和執行shell程式
什麼是shell程式呢? 簡單的說shell程式就是一個包含若干行
shell或者linux命令的檔案.
象編寫高階語言的程式一樣,編寫一個shell程式需要一個文字編輯器.如VI等.
在文字編輯環境下,依據shell的語法規則,輸入一些shell/linux命令列,形成一個完整
的程式檔案.
執行shell程式檔案有三種方法
(1)#chmod +x file(在/etc/profile中,加入export PATH=${PATH}:~/yourpath,就可以在命令列下直接執行,像執行普通命令一樣)
(2)#sh file
(3)# . file
(4)#source file
在編寫shell時,第一行一定要指明系統需要那種shell解釋你的shell程式,如:#! /bin/bash,
#! /bin/csh,/bin/tcsh,還是#! /bin/pdksh .
2.shell中的變數
(1)常用系統變數
$ # :儲存程式命令列引數的數目
$ ? :儲存前一個命令的返回碼
$ 0 :儲存程式名
$ * :以("$1 $2...")的形式儲存所有輸入的命令列引數
$ @ :以("$1""$2"...)的形式儲存所有輸入的命令列引數
(2)定義變數
shell語言是非型別的解釋型語言,不象用C++/JAVA語言程式設計時需要事先宣告變數.給一
個變數賦值,實際上就是定義了變數.
在linux支援的所有shell中,都可以用賦值符號(=)為變數賦值.
如:
abc=9 (bash/pdksh不能在等號兩側留下空格 )
set abc = 9 (tcsh/csh)
由於shell程式的變數是無型別的,所以使用者可以使用同一個變數時而存放字元時而存放
整數.
如:
name=abc (bash/pdksh)
set name = abc (tcsh)
在變數賦值之後,只需在變數前面加一個$去引用.
如:
echo $abc
(3)位置變數
當執行一個支援多個命令列引數的shell程式時,這些變數的值將分別存放在位置變數裡.
其中第一個引數存放在位置變數1,第二個引數存放在位置變數2,依次類推...,shell保留
這些變數,不允許使用者以令外的方式定義他們.同別的變數,用$符號引用他們.
3.shell中引號的使用方法
shell使用引號(單引號/雙引號)和反斜線("")用於向shell直譯器遮蔽一些特殊字元.
反引號(")對shell則有特殊意義.
如:
abc="how are you" (bash/pdksh)
set abc = "how are you" (tcsh)
這個命令列把三個單片語成的字串how are you作為一個整體賦值給變數abc.
(3)用於檔案操作的運算子,他們能檢查:檔案是否存在,檔案型別等 5.條件語句 同其他高階語言程式一樣,複雜的shell程式中經常使用到分支和迴圈控制結構, bash,pdksh和tcsh分別都有兩種不同形式的條件語句:if語句和case語句. (1)if語句 語法格式: bash/pdksh用法: if [expression1] then commands1 elif [expression2] commands2 else commands3 if tcsh用法: 含義:當expression1的條件為True時,shell執行then後面的commands1命令;當 expression1的條件為false並且expression2的條件滿足為True時,shell執行 commands2命令;當expression1和expressin2的條件值同為false時,shell執行 commands3命令.if語句以他的反寫fi結尾. (2)case語句 case語句要求shell將一個字串S與一組字串模式P1,P2,...,Pn比較,當S與 某個模式Pi想匹配時,就執行相應的那一部分程式/命令.shell的case語句中字元 模式裡可以包含象*這樣的萬用字元. 語法格式: bash/pdksh用法: 含義:shell將字串string1分別和字串模式str1和str2比較.如果string1與str1匹配,則 shell執行commands1的命令/語句;如果string11和str2匹配,則shell執行commands2的命令/ 語句.否則shell將執行commands3的那段程式/命令.其中,每個分支的程式/命令都要以兩個 分號(;;)結束. 6.迴圈語句 當需要重複的某些操作時,就要用到迴圈語句. (1)for語句 大家知道在很多程式語言中for語句是最常見.在shell中也不例外.for語句要求shell將包含 在這個語句中的一組命令連續執行一定的次數. 語法格式: bash/pdksh 用法1: for var1 in list do commands done 含義:在這個for語句中,對應於list中的每個值,shell將執行一次commands代表的一組命令. 在整個迴圈的每一次執行中,變數var1將依此取list中的不同的值. 用法2: for var1 do setatements done 含義:在這個for語句中,shell針對變數var1中的每一項分別執行一次statements代表的一組 命令.當使用這種形式的語句時,shell認為var1變數中包含了所有的位置變數,而位置變數中 存放著程式的命令列引數值.也就是說,他等價於下列形式: for var1 in " $@" do statements done tcsh用法: 在tcsh中沒有for這個單詞,與for語句起同樣功能的是foreach語句 foreach name (list) commands end 舉例: (2)while語句 while語句是shell提供的另一種迴圈語句. while語句指定一個表示式和一組命令.這個 語句使得shell重複執行一組命令,直到表示式的值為False為止. 語法格式: 舉例: 語句中shift命令的功能是將所有的命令列引數依次相左傳遞. (3)until語句 until與while語句具有類似的語法格式和功能,不同的是while中expression的值為True時, shell執行命令組;而until中當expression的值為False時,shell才執行那組命令. 語法格式: 舉例: 情注意上述例子中帶***號.在while中的表示式: -n string,他的含義是當string不是空 字串時,表示式的值為True;在until中的表示式: -z string,他的 含義是當string是空 字串時,表示式的值為True.由此可見,兩個程式對條件表示式的設定恰好是相反的. (4)shift語句 bash和tcsh都支援shift命令.shift將存放在位置變數中的命令列引數,依次向左傳遞.例如 位置變數當前值為: $1=file1 $2=file2 $3=file3 執行一次shift命令後,位置變數的值為: $1=file2 $2=file3 還可以在shift命令中指定位置變數轉移的次數, 如: shift n 例子: (5)select語句 select語句是pdksh提供的一個獨特的迴圈語句.他不同於前面介紹的迴圈語句.他不是 反覆計算一個條件表示式,並依據表示式的值決定是否執行一組命令.select的功能是自動的 生成一個簡單的文字選單. 語法格式: 含義:當執行一個select語句時,pdksh分別為每個列在list_of_items中的成員建立一個選單 選項.list_of_items既可以是一個包含多個選項的變數,也可以是直接列在程式中的一組選項 .如果語句中沒有提供list_of_items,select語句將使用位置變數作為list_of_items. 舉例: (6)repeat語句 repeat語句是tcsh提供的獨有的迴圈語句.使用repeat命令要求shell對一個命令執行一定 的次數. 語法格式: repeat count command 如; 7.shell中的函式 shell允許使用者定義自己的函式.函式是高階語言中的重要結構.shell中的函式於C或者其他 語言中定義的函式一樣.與從頭開始,一行一行地寫程式相比,使用函式主要好處是有利於組織 整個程式.在bash中,一個函式的語法格式如下: 定義好函式後,需要在程式中呼叫他們.bash中呼叫函式的格式: fname [parm1 parm2 parm3...] 呼叫函式時,可以向函式傳遞任意多個引數.函式將這些引數看做是存放他的命令列引數的 位置變數. 舉例: 這個程式定義了4個函式: upper ():將傳遞給他的檔案中的字母轉換成大寫,並存放到同名的結尾為.out的檔案中. lower ():將傳遞給他的檔案裡的字母轉換成小寫,並存放到同名的結尾為.out的檔案中. print ():輸出傳遞給他的檔案的內容. usage_error ():輸出程式的幫助資訊. 程式的主模組是個case條件語句,他根據命令列中第一個引數,決定程式要完成的功能,並呼叫相應 的函式完成這一功能. 總結 利用shell程式設計是提高系統管理工作效率的重要手段,學好shell跟了解系統基本命令和管理 工具的使用方法同樣重要! 附: A.bash中常用的命令 B.bash中常用的系統變數 abc1='@LOGNAME,how are you!' (bash/pdksh)
test表示式 | 含義
if (expression1) thencommands1else if (expression2) thencommands2elsecommands3endif
case string1 instr1)commands1;;str2)commands2;;*)commands3;;esactcsh用法:switch (string1)case str1:statements1breakswcase str2:statements2breakswdefault:statements3breakswendsw
for file ;bash/pdkshdotr a-z A-Zfile.capsdone# ;tcshforeach file ( $ * )tr a-z A-Z$file.capsend
while expression ;bashdostatementsdonewhile (expression) ;tcshstatementsend
count=1 ;bashwhile [ -n "$ *"] ***doecho "this is a parameter number $count $1"shiftcount='expr $count + 1'doneset count = 1 ;tcshwhile ( " $ * " ! = "")echo "this is a parameter number $count $1"shiftset count = 'expr $count + 1'end
until expressiondocommandsdone
count=1until [ -z " $ * "] ***echo "this is a parameter number $count $1"shiftcount='expr $count + 1'done
while [ "$1"]doif [ "$1"="-i"] theninfile=" $2"shift 2else if [ "$1"="-o"] thenoutfile="$2"shift 2elseecho "Program $0 does not recognize option $1"fidonetr a-z A-Z$outfile
select menu [in list_of_items]docommandsdone
select menuitem in pick1 pick2 pick3doecho "are you sure you want to pick $menuitem"read res ;接收使用者的輸入,並且將輸入的值存放在特定變數裡.if [ $res=" y" -o $res=" Y"]thenbreak ;用於退出while,for,select等迴圈語句fidone
foreach num ( $ *)repeat $num echo -n " *"echo " "end
fname (){shell comands}
upper (){shiftfor idotr a-a A-Z$1.outrm $1mv $1.out $1shiftdone; }lower () {shiftfor idotr A-Z a-z$1.outrm $1mv $1.out $1shiftdone; }print() {shiftfor idolpr $1shiftdone; }usage_error() {echo " $1 syntax is $1
命令 | 含義-------------------------------------------------------------------------------Alias |設定命令別名Bg |將一個被掛起的程式在後臺執行cd |改變使用者的當前目錄exit |終止一個shellexport |使作為這個命令的引數的變數及其當前值,在當前執行的shell的子程式中可見fc |編輯當前的命令列歷史列表fg |讓一個被掛起的程式在前臺執行help |顯示bash內部命令的幫助資訊history |顯示最近輸入的一定數量的命令列kill |終止一個程式pwd |顯示使用者當前工作目錄unalias |刪除命令列別名--------------------------------------------------------------------------------
變數 | 含義-------------------------------------------------------------------------------EDITOR,FCEDIT |Bash的fc命令的預設文字編輯器HISTFILE |規定存放最近輸入命令列檔案的名字HISTSIZE |規定命令列歷史檔案的大小HOME |當前使用者的宿主目錄OLDPWD |使用者使用的前一個目錄PATH |規定bash尋找可執行檔案時搜尋的路徑PS1 |命令列環境中顯示第一級提示符號PS2 |命令列環境中顯示第二級提示符號PWD |使用者當前工作目錄SECONDS |當前執行的bash程式的執行時間(以秒為單位)--------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-939774/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- shell入門基礎
- Python 基礎(一):入門必備知識Python
- oracle基礎入門(轉)Oracle
- bash入門基礎(轉)
- typescript必備基礎TypeScript
- Linux基礎入門(一)初識ShellLinux
- shell入門基礎&常見命令及用法
- shell基礎(轉)
- 入門大資料行業!必備的十大基礎大資料行業
- Swing入門基礎 (轉)
- Linux-shell程式設計入門基礎Linux程式設計
- Linux入門必備Linux
- docker基礎部署入門,微服務必備技術,月薪上萬不是夢Docker微服務
- Mandrakelinux 入門學習必備資料(轉)Linux
- 0基礎入門 IT,該具備哪些技能?
- linux新手入門――shell入門(轉)Linux
- 零基礎入門學習Python爬蟲必備的知識點!Python爬蟲
- 入門大資料開發行業!必備的十大基礎大資料行業
- Python入門必知的知識點!Python基礎入門Python
- LSTM入門必讀:從入門基礎到工作方式詳解
- 人工智慧入門必備人工智慧
- OpenStack必備基礎知識
- 全棧必備 JavaScript基礎全棧JavaScript
- 轉行進入IT行業,0基礎學習大資料開發必備的基礎有哪些?行業大資料
- Squid Proxy Server基礎入門(轉)UIServer
- Shell程式設計基礎學習之六:sed 入門程式設計
- 常見JVM基礎面試必備JVM面試
- 全棧必備:Linux 基礎全棧Linux
- Ado.NET基礎必備
- 全棧必備 測試基礎全棧
- ExtJs4 基礎必備JS
- 必備電子技術經典資料彙總:基礎入門篇1.6G
- korn shell基礎知識(轉)
- JVM必備基礎知識(一) -- 類的載入機制JVM
- RabbitMQ基礎入門MQ
- mongodb基礎入門MongoDB
- MySQL 基礎入門MySql
- ZooKeeper 基礎入門