linux學習之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'
   也可以自定義別名,如:

jesson@jesson-HP:~$ alias lh='ls -lh'
jesson@jesson-HP:~$ lh
總用量 40K
drwxr-xr-x 2 jesson jesson 4.0K 12月 18 09:47 Desktop
drwx------ 4 jesson jesson 4.0K 12月  2 20:29 develop
drwxr-xr-x 8 jesson jesson 4.0K 12月 16 11:27 iNodeClient
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 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) 命令替換

   直接看這樣一個命令

jesson@jesson-HP:~$ 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/dash
lrwxrwxrwx 1 root root      4 12月  6 19:10 /bin/rbash -> bash
lrwxrwxrwx 1 root root      4 12月  6 19:10 /bin/sh -> dash
   可以看出,命令的結果是列出當前系統存在的shell。其實,執行過程是這樣的,先執行` `中的命令,執行結果如下:

jesson@jesson-HP:~$ 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) 管道

   管道是把一個命令的輸出連接到另一個命令的輸入。如:

jesson@jesson-HP:~$ ls | sort
Desktop
develop
iNodeClient
公共的
模板
視頻
圖片
文檔
下載
音樂
  可以注意到,這是排序後的輸出結果。

  6) 重定向

    重定向與管道相關,可以改變程序的輸入來源和輸出地點,

jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ls -l  >homefile.txt
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ll
總用量 12
drwxrwxr-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
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ cat homefile.txt 
總用量 40
drwxr-xr-x  2 jesson jesson 4096  1月 11 23:44 Desktop
drwxrwxr-x  4 jesson jesson 4096  1月 12 00:41 develop
drwxr-xr-x  8 jesson jesson 4096  1月 11 21:51 iNodeClient
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  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 音樂
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ sort < homefile.txt > homefile.txt.sort
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ll
總用量 16
drwxrwxr-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
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ cat homefile.txt.sort 
drwxrwxr-x  4 jesson jesson 4096  1月 12 00:41 develop
drwxr-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 Desktop
drwxr-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開頭的文件,這種能力即稱爲模式匹配,在模式匹配中,一般使用正則表達式。

例如:

jesson@jesson-K43SV:~/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無法認出其後的特殊字符,使其後的特殊字符失去特殊含義。

   分號(;): 允許在一行放置多個命令。

   &: 後臺執行。

   括號(): 創建成組的命令。

   大括號{}: 創建命令塊。

   豎杆(|): 管道表示符。

   < >: 重定向表示符。

   * ? []: 模式匹配符。

   $: 變量名的開頭。

   #: 註釋

   空格,製表符,換行符: 當作空白。

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