linux Shell學習筆記3

2021-07-05 07:13:40 字數 2967 閱讀 3993

一.簡單函式

函式的使用

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 一樣增加特殊含義。跟在反斜線後的字元被稱為轉義字元。特...