Jquery中文網 伊蒂哈德7比2 www.jvkwgx.com.cn
Jquery中文網 >  腳本編程  >  shell  >  正文 linux shell編程知識點總結

阿联酋伊蒂哈德航空官网:linux shell編程知識點總結

發布時間:2014-12-10   編輯:伊蒂哈德7比2 www.jvkwgx.com.cn
本文分享下,linux shell編程中的一些重要知識,供大家學習參考,希望對你有一定的幫助。

伊蒂哈德7比2 www.jvkwgx.com.cn 本節內容:
linux shell編程的知識要點。

本系列針對Bash Shell,其他的比較流行的Shell還有Korn shell (ksh)和"Tenex C shell" (tcsh)等。

一,簡單過程
1)可以使用任意一種文字編輯器,比如nedit、kedit、emacs、vi等來編寫shell腳本。ubuntu中可以使用gedit,notpad++也不錯啊。
2)文件必須以#!/bin/sh開始。符號#!用來告訴系統那個shell來執行該腳本的程序,系統中可以有多個shell,例如使用/bin/sh,/bin/bash。
3)編輯結束并保存后,如果要執行該腳本,必須先使其可執行,使用命令chmod +x filename。
4)此后在該腳本所在目錄下,輸入 ./filename 即可執行該腳本。
5)最簡單的調試方法當然是使用echo命令。你可以在任何懷疑出錯的地方用echo打印變量值。
6)可以用sh -x strangescript來調試。
7)可以使用sh -n your_script來檢查語法,不執行。
8)以# 開始的行表示注釋,直到該行的結束。

二,命令
可以使用所有的Unix的命令。

三,變量
Shell編程中,使用變量無需事先聲明,同時變量名的命名須遵循如下規則:
1. 首個字符必須為字母(a-z,A-Z)
2. 中間不能有空格,可以使用下劃線(_)
3. 不能使用標點符號
4. 不能使用bash里的關鍵字(可用help命令查看保留關鍵字)。

要給變量賦值時,可以這么寫:變量名=值, 等號兩邊均不能有空格存在。
為了避免混淆,可以使用{}給變量,如${num}。

四,管道/重定向
*  管道 (|) :將一個命令的輸出作為另外一個命令的輸入 :grep "hello" file.txt | wc -l 。
上述命令會在file.txt中搜索包含有”hello”的行并計算行數,這里grep命令的輸出成了wc命令的輸入。
* 重定向:將命令的結果輸出到文件,而不是標準輸出(屏幕) > 寫入文件并復蓋舊文件,>> 加到文件的尾部,保留舊文件內容。
* 反短斜線:反短斜線可以將一個命令的輸出作為其它命令的命令行參數。find . -mtime -1 -type f -print。上述命令可以查找過去24小時(-mtime –2則表示過去48小時)內修改過的文件。

將所有查找到的文件打一個包,腳本:
 

復制代碼 代碼示例:
#!/bin/sh
# The ticks are backticks (`) not normal quotes  ('):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`

說明:
 

* 單引號‘’:功能則最強。當你把字符串用單引號括起來時,外殼將忽視所有單引號中的特殊字符。
* 雙引號“”:雙引號的功能最弱。當你把字符串用雙引號括起來時,外殼將忽略字符串中的空格,但其他的字符都將繼續起作用。
雙引號在將多于一個單詞的字符串賦給一個變量時尤其有用。
* 反斜杠\:反斜杠的功能和單引號一樣,只是反斜杠每次只能使一個字符發生轉義,而不是使整個字符串發生轉義。

五,特殊字符
1,有些變量在啟動外殼時就已經存在于系統中,你可以使用這些系統變量,并且可以賦予新值:
 

$HOME 用戶自己的目錄。
$ PATH 執行命令時所搜尋的目錄。
$TZ 時區。
$MAILCHECK 每隔多少秒檢查是否有新的郵件。
$ P S 1 在外殼命令行的提示符。
$ P S 2 當命令尚未打完時,外殼要求再輸入時的提示符。
$ M A N PATHman 指令的搜尋路徑。
? 有些變量在執行外殼程序時系統就設置好了,并且你不能加以修改:
$ # 存儲外殼程序中命令行參數的個數。
$ ? 存儲上一個執行命令的返回值。
$ 0 存儲外殼程序的程序名。
$ * 存儲外殼程序的所有參數。
$ @ 存儲所有命令行輸入的參數,分別表示為(“$ 1” “$ 2” . . . )。shift 命令用來將存儲在位置參數中的當前值左移一個位置。
$ $ 存儲外殼程序的P I D。
$ ! 存儲上一個后臺執行命令的P I D。

六,關鍵字
1)if
 

復制代碼 代碼示例:
if [ expression ]
then
commands
elif [ expression2 ]
then
commands
else
commands
fi
 

2)條件,條件之間可以使用&& 和||
 

-b file   若文件存在且是一個塊特殊文件,則為真
-c file   若文件存在且是一個字符特殊文件,則為真
-d file   若文件存在且是一個目錄,則為真
-e file   若文件存在,則為真
-f file   若文件存在且是一個規則文件,則為真
-g file   若文件存在且設置了SGID位的值,則為真
-h file   若文件存在且為一個符合鏈接,則為真
-k file   若文件存在且設置了"sticky"位的值
-p file   若文件存在且為一已命名管道,則為真
-r file   若文件存在且可讀,則為真
-s file   若文件存在且其大小大于零,則為真
-u file   若文件存在且設置了SUID位,則為真
-w file   若文件存在且可寫,則為真
-x file   若文件存在且可執行,則為真
-o file   若文件存在且被有效用戶ID所擁有,則為真

-z string 若string長度為0,則為真
-n string 若string長度不為0,則為真
string1 = string2  若兩個字符串相等,則為真
string1 != string2 若兩個字符串不相等,則為真

int1 -eq int2      若int1等于int2,則為真
int1 -ne int2      若int1不等于int2,則為真
int1 -lt int2      若int1小于int2,則為真
int1 -le int2      若int1小于等于int2,則為真
int1 -gt int2      若int1大于int2,則為真
int1 -ge int2      若int1大于等于int2,則為真

!expr     若expr為假則復合表達式為真。expr可以是任何有效的測試表達式
expr1 -a expr2     若expr1和expr2都為真則整式為真
expr1 -o expr2     若expr1和expr2有一個為真則整式為真
 

3)case
 

case string1 in
str1 )
commands ; ;
str2 )
commands ; ;
* )
commands ; ;
esac
 

4)for
 

for var1 in list
do
commands
done
 

5)while
 

while expression
do
statements
done
 

6)until
 

until expression
do
commands
done
 

7)select
 

select menuitem [in list_of_items]
do
commands
done

七,子函數
 

fname () {
shellcommands
}
調用fname [parm1 parm2 parm3 ...]

>>> 學linux shell,盡在shell編程。

您可能感興趣的文章:
bash中too many arguments問題的解決方法
bash shell腳本執行的幾種方法
AWK 簡介與例子
為shell編程新手準備的教程
shell編程基礎知識(1)-文件類型介紹
inux shell初級入門教程
linux shell自定義函數與變量作用域
linux shell 比較二個浮點數
shell編程基礎知識(7)-命令執行順序
linux shell編程知識點總結

[關閉]