一.簡單函式
函式的使用
bash 是乙個相對簡單的指令碼語言,不過為了方便結構化的設計,bash 中也提供了函式定義的功能。bash 中的函式定義很簡單,只要向下面這樣寫就可以了:
function my_funcname
或者 my_funcname()
上面的第二種寫法更接近於 c 語言中的寫法。bash 中要求函式的定義必須在函式使用之前,這是和 c 語言用標頭檔案說明函式方法的不同。
更進一步的問題是如何給函式傳遞引數和獲得返回值。bash 中函式引數的定義並不需要在函式定義處就制定,
而只需要在函式被呼叫時用 bash 的保留變數 $1 $2 ... 來引用就可以了;
bash 的返回值可以用 return 語句來指定返回乙個特定的整數,如果沒有 return 語句顯式的返回乙個返回值,
則返回值就是該函式最後一條語句執行的結果(一般為 0,如果執行失敗返回錯誤碼)。函式的返回值在呼叫該函式的程式體中通過【 $?】 保留字來獲得。
二.匯出環境變數
export evalue=123 #注意左右兩邊不能有空格
char * getenv("evalue");//c函式
三.截斷字串
1.basename工具,dirname basename 命令
命令替換
$ mydir=`dirname /usr/local/share/doc/foo/foo.txt`
$ echo $mydir
/usr/local/share/doc/foo
在第一行,簡單地將要執行的命令以 反引號 括起。那不是標準的單引號,而是鍵盤中通常位於 tab 鍵之上的單引號。
可以用 bash 備用命令替換語法來做同樣的事:
$ mydir=$(dirname /usr/local/share/doc/foo/foo.txt)
$ echo $mydir
/usr/local/share/doc/foo
2.如您所見,bash 提供多種方法來執行完全一樣的操作。使用命令替換可以
====從前往後刪
# 兩個"##"搜尋最長匹配:foodfo,截斷之後結果返回
# 乙個"#"搜尋最短匹配:fo,截斷之後結果返回
3.====從後往前刪
$ myfoo="chickensoup.tar.gz"
$ echo $
#兩個最長匹配.tar.gz刪了,結果如下
chickensoup
$ echo $
#乙個%,最短匹配,.gz刪了,結果如下
chickensoup.tar
#記憶法: 美國鍵盤上的#$%,#在$的前面,從前刪;%在$的後面,從後刪
4.可以根據特定字元偏移和長度,使用另一種形式的變數擴充套件,來選擇特定子字串
$ exclaim=cowabunga
$ echo $ #從第乙個數字的位置下乙個位置的字元開始 直到 第二個數字的位置的字元結束
#就是說pos(0)沒有字元
cow$ echo $
abunga
四.比較運算子
運算子描述
示例1.
檔案比較運算子
-e filename 如果 filename存在,則為真 [ -e /var/log/syslog ]
-d filename 如果 filename為目錄,則為真 [ -d /tmp/mydir ]
-f filename 如果 filename為常規檔案,則為真 [ -f /usr/bin/grep ]
-l filename 如果 filename為符號鏈結,則為真 [ -l /usr/bin/grep ]
-r filename 如果 filename可讀,則為真 [ -r /var/log/syslog ]
-w filename 如果 filename可寫,則為真 [ -w /var/mytmp.txt ]
-x filename 如果 filename可執行,則為真 [ -l /usr/bin/grep ]
filename1 -nt filename2 如果 filename1比 filename2新,則為真 [ /tmp/install/etc/services -nt /etc/services ] new than
filename1 -ot filename2 如果 filename1比 filename2舊,則為真 [ /boot/bzimage -ot arch/i386/boot/bzimage ]
old than
2.字串比較運算子 (請注意引號的使用,這是防止空格擾亂**的好方法)
-z string 如果 string長度為零,則為真 [ -z "$myvar" ]
-n string 如果 string長度非零,則為真 [ -n "$myvar" ]
string1= string2 如果 string1與 string2相同,則為真 [ "$myvar" = "one two three" ]
string1!= string2 如果 string1與 string2不同,則為真 [ "$myvar" != "one two three" ]
算術比較運算子
num1-eq num2 等於 [ 3 -eq $mynum ]
num1-ne num2 不等於 [ 3 -ne $mynum ]
num1-lt num2 小於 [ 3 -lt $mynum ]
num1-le num2 小於或等於 [ 3 -le $mynum ]
num1-gt num2 大於 [ 3 -gt $mynum ]
num1-ge num2 大於或等於 [ 3 -ge $mynum ]
五。迴圈
forwhile
until
Linux shell指令碼學習攻略筆記3
今天繼續上一次find命令的內容,主要是find和 exec 和xargs的結合和使用。9 find 命令可以借助選項 exec與其他命令進行結合。exec算得上是find最強大的特性之一。比如我們要將某位使用者全部檔案的所有權更換為另乙個使用者 比如root 那麼就可以用 user找出root擁有...
linux shell學習筆記
shell程式 將一系列linux程式通過流程控制寫在乙個文字檔案中,由shell讀取此文字檔案並且依次執行檔案中的程式。例子 bin bash 代表shell程式的注釋 echo hello linux echo this is a shell file.shell程式中需要用變數來儲存程式中的資...
Linux Shell學習筆記六
第八學時 引用 術語引用 引用即是將被選擇文字用某種型別的引用標記括起來,從而使得被選擇文字變成文字字元。轉義 轉義乙個字元意味著該字元前加乙個反斜線 從而轉義或者去除了shell命令中該字元的特殊含 義,或者正如讀者在echo命令中看到的 n 一樣增加特殊含義。跟在反斜線後的字元被稱為轉義字元。特...