linux學習之shell指令碼

來源:互聯網
上載者:User

標籤: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指令碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.