第五天 命令行 函數

目錄

command line

function



command line

command options arguments

options ,執行任務的方式  ,控制命令的動作,選項也稱開關switches或者標誌flags

arguments ,指定命令使用的數據

空白符,使用空格和製表符作爲分隔符的思想,是如此的重要,所以他們有自己的名稱,空白符

space 製表符,新行字符(Carriage Return回車符)
[root@localhost script]# set |grep IFS
IFS=$' \t\n'

\n newline 新行字符
\r return  回車符
\t tab     製表符

使用者每輸入一個鍵,cursor 就往後移動一格,直到碰到命令行讀進 CR(Carriage Return,由 Enter 鍵產生)字符爲止
所謂的命令行,就是在 shell prompt 與 CR 字符之間所輸入的文字。
若從技術細節來看,shell 會依據 IFS(Internal Field Seperator) 將 command line 所輸入的文字給拆解爲"字段"(word)。
然後再針對特殊字符(meta)先作處理,最後再重組整行 command line 。
其中的 IFS 是 shell 預設使用的字段分隔符,可以由一個及多個如下按鍵組成:
        * 空格鍵(White Space)
        * 表格鍵(Tab)
        * 回車鍵(Enter)
系統可接受的命令名稱(command-name)可以從如下途徑獲得:
        * 明確路徑所指定的外部命令
        * 命令別名(alias)
        * 自定功能(function)
        * shell 內建命令(built-in)
        * $PATH 之下的外部命令
每一個命令行均必需含用命令名稱,這是不能缺少的。

簡單而言(我不敢說這是精確的定議,注一),command line 的每一個 charactor ,分爲如下兩種:
* literal:也就是普通純文字,對 shell 來說沒特殊功能。
* meta:對 shell 來說,具有特定功能的特殊保留字符。
 IFS  space,tab,enter
 CR   carriage return
 = $ >等
IFS 是用來拆解 command line 的每一個詞(word)用的,因爲 shell command line 是按詞來處理的。
而 CR 則是用來結束 command line 用的,這也是爲何我們敲 ; 命令就會跑的原因。


function

所有函數在使用前必須定義。這意味着必須將函數放在腳本開始部分,直至shell解釋器首次發現它時,纔可以使用。調用函數僅使用其函數名即可。可以將函數看作是腳本中的一段代碼,但是有一個主要區別。執行函數時,它保留當前shelll和內存信息。如果執行或調用一個腳本文件中的另一段代碼,將創建一個單獨的shell,因而去除所有原腳本中定義的存在變量。
函數可以放在同一個文件中作爲一段代碼,也可以放在只包含函數的單獨文件中。

格式兩種

function(這個關鍵字可以不要) func_name(){  
#函數體內容  
}  
func_name(){  
#函數體內容  
}  

函數調用:func_name parm
函數體中,可以通過$1 $2 ...$9接受函數調用中的變量
函數可以通過return 返回函數執行的結果

1、在/home/script/目錄下新建函數文件fun-1
2、在fun-1文件中編寫函數findit內容
#!/bin/bash
findid ()
{
   if [ $# -lt 1 ]; then #判斷函數參數個數
       echo "usage: findit filename";
       return 1;
   fi;
   for loop in "$@"; #遍歷調用函數的參數
   do
       find /home/script/ -name $loop -print;
   done;
   return 0
}
3、Shell中載入函數文件
.或source /home/script/fun-1
4、檢查載入文件
set  
set命令將在shell中顯示所有的載入函數
5、調用函數
findit mysql php #在home目錄查找文件mysql和文件php


當你收集一些經常使用的函數時,可以將之放入函數文件中並將文件載入s h e l l。
文件頭應包含語句#!/bin/sh,文件名可任意選取,但最好與相關任務有某種實際聯繫。
一旦文件載入shell,就可以在命令行或腳本中調用函數。可以使用set命令查看所有定義
的函數。輸出列表包括已經載入shell的所有函數。
如果要改動函數,首先用unset命令從shell中刪除函數,儘管unset刪除了函數以便於此函數對於shell或腳本不可利用,但並不是真正的刪除。
改動完畢後,再重新載入此文件。有些shell會識別改動,不必使用unset命令,但爲了安全起見,改動函數時最好使用unset命令。

調用

同一個腳本中調用函數,只需要在調用前定義即可。
從函數文件中調用函數,這種方法不會創建另一個shell,所有函數均在當前shell下執行。
調用腳本在調用前需要載入函數文件。


/etc/sysconfig/      每一種服務的變量定義
/etc/init.d          每一種服務的腳本
/etc/init.d/funtions 函數文件擁有所有的公用函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章