標籤:shell
[本文是自己學習所做筆記,歡迎轉載,但請註明出處:http://blog.csdn.net/jesson20121020]
Shell指令碼基本元素:
#!/bin/bash --- 第一行# --- 注釋變數流程式控制制結構
看一個簡單的例子,學任何語言,我想大多數情況下都是從helloworld程式開始的,shell也是一門語言,我們也從helloworld開始。
建立一個名為helloworld.sh的檔案,在裡面寫入:
helloworld.sh
#!/bin/sh#這是一個很簡單的列印“hello world”的shell指令碼echo "hello world!"
要執行這樣一個簡單的指令碼,首先我們要給該檔案可執行檔許可權。如下:
chmod u+x helloworld.sh ./helloworld.sh hello world!
可以看出,通過這樣一個簡單的指令碼就可以將“hello world”列印到螢幕上。
Shell特性:
一般而言,shell指令碼有以下特性:
1) 別名
2) 命令替換
3) 幕後處理
4) 變數
5) 管道
6) 重新導向
7) 模式比對
8) 特殊字元
下面挨個介紹:
1) 別名
可以通過alias查看當前系統的別名,如我的系統別名如下:
alias egrep='egrep --color=auto'alias fgrep='fgrep --color=auto'alias grep='grep --color=auto'alias l='ls -CF'alias la='ls -A'alias ll='ls -alF'alias ls='ls --color=auto'
也可以自訂別名,如:
[email protected]:~$ alias lh='ls -lh'[email protected]:~$ lh總用量 40Kdrwxr-xr-x 2 jesson jesson 4.0K 12月 18 09:47 Desktopdrwx------ 4 jesson jesson 4.0K 12月 2 20:29 developdrwxr-xr-x 8 jesson jesson 4.0K 12月 16 11:27 iNodeClientdrwxr-xr-x 2 jesson jesson 4.0K 12月 6 19:30 公用的drwxr-xr-x 2 jesson jesson 4.0K 12月 6 19:30 模板drwxr-xr-x 2 jesson jesson 4.0K 12月 6 19:30 視頻drwxr-xr-x 3 jesson jesson 4.0K 12月 16 14:51 圖片drwxr-xr-x 9 jesson jesson 4.0K 1月 15 20:22 文檔drwxr-xr-x 6 jesson jesson 4.0K 1月 15 20:45 下載drwxr-xr-x 2 jesson jesson 4.0K 12月 6 19:30 音樂
既然可以自訂別名,當然,也可以取消別名,其實很簡單,直接輸入unalias 別名 即可。
2) 命令替換
直接看這樣一個命令
[email protected]:~$ ls -l `cat /etc/shells`-rwxr-xr-x 1 root root 920788 3月 29 2013 /bin/bash-rwxr-xr-x 1 root root 100284 3月 30 2012 /bin/dashlrwxrwxrwx 1 root root 4 12月 6 19:10 /bin/rbash -> bashlrwxrwxrwx 1 root root 4 12月 6 19:10 /bin/sh -> dash
可以看出,命令的結果是列出當前系統存在的shell。其實,執行過程是這樣的,先執行` `中的命令,執行結果如下:
[email protected]:~$ cat /etc/shells # /etc/shells: valid login shells/bin/sh/bin/dash/bin/bash/bin/rbash
這個命令的執行結果列印出該檔案的內容,然後,再執行ls -l 輸出的每行 ,這樣就按行列出所有的shell的詳細資料,其實在命令中加入` `的作用就是命令替換。
3) 幕後處理
一個終端可以同時運行多個背景程式。
用法: nohup command &
可以用jobs 查看當前的背景程式。
4) 變數
變數是用來儲存資訊的。如系統變數SHELL,PATH等,當然了也以自己定義變數了。
5) 管道
管道是把一個命令的輸出串連到另一個命令的輸入。如:
[email protected]:~$ ls | sortDesktopdevelopiNodeClient公用的模板視頻圖片文檔下載音樂
可以注意到,這是排序後的輸出結果。
6) 重新導向
重新導向與管道相關,可以改變程式的輸入來源和輸出地點,如
[email protected]:~/develop/worksapce/shell_workspace$ ls -l >homefile.txt[email protected]:~/develop/worksapce/shell_workspace$ ll總用量 12drwxrwxr-x 2 jesson jesson 4096 1月 16 00:30 ./drwxrwxr-x 7 jesson jesson 4096 1月 16 00:28 ../-rw-rw-r-- 1 jesson jesson 573 1月 16 00:30 homefile.txt[email protected]:~/develop/worksapce/shell_workspace$ cat homefile.txt 總用量 40drwxr-xr-x 2 jesson jesson 4096 1月 11 23:44 Desktopdrwxrwxr-x 4 jesson jesson 4096 1月 12 00:41 developdrwxr-xr-x 8 jesson jesson 4096 1月 11 21:51 iNodeClientdrwxr-xr-x 2 jesson jesson 4096 1月 11 21:23 公用的drwxr-xr-x 2 jesson jesson 4096 1月 11 21:23 模板drwxr-xr-x 2 jesson jesson 4096 1月 11 21:23 視頻drwxr-xr-x 3 jesson jesson 4096 1月 14 23:26 圖片drwxr-xr-x 2 jesson jesson 4096 1月 11 22:46 文檔drwxr-xr-x 5 jesson jesson 4096 1月 16 00:26 下載drwxr-xr-x 25 jesson jesson 4096 1月 12 00:48 音樂[email protected]:~/develop/worksapce/shell_workspace$ sort < homefile.txt > homefile.txt.sort[email protected]:~/develop/worksapce/shell_workspace$ ll總用量 16drwxrwxr-x 2 jesson jesson 4096 1月 16 00:31 ./drwxrwxr-x 7 jesson jesson 4096 1月 16 00:28 ../-rw-rw-r-- 1 jesson jesson 573 1月 16 00:30 homefile.txt-rw-rw-r-- 1 jesson jesson 573 1月 16 00:31 homefile.txt.sort[email protected]:~/develop/worksapce/shell_workspace$ cat homefile.txt.sort drwxrwxr-x 4 jesson jesson 4096 1月 12 00:41 developdrwxr-xr-x 25 jesson jesson 4096 1月 12 00:48 音樂drwxr-xr-x 2 jesson jesson 4096 1月 11 21:23 公用的drwxr-xr-x 2 jesson jesson 4096 1月 11 21:23 模板drwxr-xr-x 2 jesson jesson 4096 1月 11 21:23 視頻drwxr-xr-x 2 jesson jesson 4096 1月 11 22:46 文檔drwxr-xr-x 2 jesson jesson 4096 1月 11 23:44 Desktopdrwxr-xr-x 3 jesson jesson 4096 1月 14 23:26 圖片drwxr-xr-x 5 jesson jesson 4096 1月 16 00:26 下載drwxr-xr-x 8 jesson jesson 4096 1月 11 21:51 iNodeClient總用量 40
容易看出,利用重新導向可以很方便的指定程式的輸入來源和輸出,如上述例子中
sort < homefile.txt > homefile.txt.sort
sort的來源是homefile.txt檔案,而輸出也是檔案,這裡是homefile.txt.sort.
7) 模式比對
如顯示以txt為副檔名或以a開頭的檔案,這種能力即稱為模式比對,在模式比對中,一般使用Regex。
例如:
[email protected]:~/develop/worksapce/shell_workspace$ ls -l *.txt-rw-rw-r-- 1 jesson jesson 573 1月 16 00:30 homefile.txt
8) 特殊字元
雙引號(""): 用來使Shell無法認出空格,定位字元和其他大多數特殊字元,這樣“ls -l helloworld.sh” 表示一個值。
單引號(‘‘): 用來使Shell無法認出所有特殊字元。
反引號(``): 用來替換命令。
反斜線(\): 用來使Shell無法認出其後的特殊字元,使其後的特殊字元失去特殊含義。
分號(;): 允許在一行放置多個命令。
&: 後台執行。
括弧(): 建立成組的命令。
大括弧{}: 建立命令塊。
豎杆(|): 管道表示符。
< >: 重新導向表示符。
* ? []: 模式比對符。
$: 變數名的開頭。
#: 注釋
空格,定位字元,分行符號: 當作空白。
linux學習之shell指令碼