讀書筆記之:Linux命令列和shell指令碼編程寶典

來源:互聯網
上載者:User

Linux命令列和shell指令碼編程寶典

這次閱讀《Linux命令列和shell指令碼編程寶典》這本書是第3次閱讀。 總的來說,這本書還是挺不錯的。很適合入門。我也是從這本書開始瞭解shell編程的。

不過,因為現在對Linux 環境也比較熟悉了,並且也會一些shell編程了,所以,這次看的時候會比較快,有些已經會的東西就沒有寫。只是記錄下那些之前沒有注意到的東西。

第1章 Linux shell入門

Linux 核心


GNU軟體:

Gnome shell


Gnome軟體



Linux發行版

(1)核心發行版


(2)特定發行版


第2章 瞭解shell

Linux下的虛擬控制台:ctrl+Alt+F1/F2/F3../F8

類比終端:xterm, gnome terminal

1. 任務管理命令:

&: 最經常被用到,這個用在一個命令的最後,可以把這個命令放到後台執行

ctrl + z:可以將一個正在前台執行的命令放到後台,並且暫停

jobs:查看當前有多少在後台啟動並執行命令

fg:將後台中的命令調至前台繼續運行,如果後台中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的後台正在執行的命令的序號(不是pid)

bg:將一個在後台暫停命令,變成繼續執行,如果後台中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的後台正在執行的命令的序號(不是pid)

 

2.檔案和目錄操作
 (1). 檔案清單
 ls -l -h -a -s
 (2). 建立檔案/目錄
 touch  -a access time
        -m modify time
        -t time stamp
 mkdir -p
 (3). 複製檔案/目錄
 cp -r(遞迴複製檔案) -v -p(保留檔案屬性)
    -R(遞迴複製目錄)
    -l(建立永久連結檔案)
    -s(建立軟串連)
 (4). 重新命名
 mv -v
 (5). 刪除檔案/目錄
 rm -r -v -f
 rmdir
 (6). 查看檔案內容
 cat -n(編號)
 vi,od(二進位),more,less,tail,head
 nl(為輸出加上行號)
 stat(檔案統計資料)
 file(檔案類型)
  
3.進程管理
(1). 進程查看
   ps -aux
   ps -l
   ps -efH
   top
(2)進程管理
   kill
(3) 查看磁碟
  mount -o loop
  umount
  df -h -l
  du -c -h -s -a
(4) 資料排序
  sort -n(進行數值排序)
       -r(逆序)
(5)搜尋資料
 grep -n(顯示匹配行號)
      -v(反轉搜尋)
      -c(統計匹配數)
      -e(指定多個匹配)
4. 環境變數
(1). 建立全域環境變數
   export
(2). 移除全域環境變數
   unset
(3). 預設的環境變數
  HOME,HOSTNAME,PATH,IFS(用於分割欄位的字元列表),OPTARG,OPTIND
(4). 登入shell
 當登入到Linux系統時,bash shell將作為登入shell啟動.登入shel將尋找4個不同的開機檔案來處理其中的命令.
 bash shell中處理檔案的順序如下:
 /etc/profile
 ~/.bash_profile
 ~/.bash_login
 ~/.profile
 即先執行/etc/profile,接著檢查使用者的目錄中是否有.bash_profile,.bash_login或.profile其中之一.
 當執行新的shell時, 如果是執行互動shell,例如直接執行bash,bash會執行/etc/bashrc檔案,然後檢查使用者目錄中的.bashrc
 如果非互動式(shell script),bash shell會去執行BASH_ENV環境變數的內容.

 


5.shell中數學計算

(1)count=1;count=$[ $count+1 ]

(2) let i=i+1;(( i=i+1 ))

(3)var=1;var=`expr $var + 1`

第4章 Linux中的許可權管理

 常用的命令:

 useradd用於添加新使用者
 userdel刪除使用者,但是只刪除/etc/passwd中的使用者資訊,不會刪除賬戶在系統中擁有的任何檔案
 passwd 修改賬戶密碼
 chsh 修改預設shell

 groupadd 添加使用者組

chmod   修改許可權
chown  修改所有者
chgrp 修改使用者組

 

第10章 結構化命令

  (1) if-else

 數值比較:-eq,-ge,-gt,-le,-lt,-ne
 字串比較:=,!=,<,>,-n,-z
 檔案比較:-e,-d,-f,-r,-w,-x,-s
 複合條件檢查:&&,||
 (2)case
 (3)for,while,until
 (4)break,continue


 

第11章 處理使用者輸入輸出

  (1)命令列參數

 位置參數:$0程式名稱,$1第一個參數,$2第二個參數...
 basename,dirname
 $#命令列參數個數
 $*所有參數作為一個對象
 $@所有參數作為多個對象

(2)處理選項

  利用case語句的形式

 shift位移參數
 getopt命令接受任意形式的命令選項和參數列表,並自動將這些選項和參數轉換為適當的格式.
 如:getopt ab:cd -a -b test1 -c -d test2 test3
 set命令的一個選項是雙破折號,將命令列參數變數替換為set命令的命令列中的值.
 比如:set -- `getopt ab:cd -a -b test1 -c -d test2 test3`

 getopts命令為在命令列中找到的所有待處理的選項和參數產生一個輸出,並且順序的對現有的shell參數變數進行處理
 同時利用到了兩個環境變數OPTARG和OPTIND.OPTARG中包含需要參數值的選項要使用的值;OPTIND包含的值表示getopts停止處理時在參數列表中的位置.

 

 

 (3)擷取使用者輸入
 echo -n(不換行)
 read 讀取輸入
     -p 給出提示
     -t 計時
     -n1 指示read命令只需接受一個字元後就退出
     -s 不回顯

  (4)使用臨時檔案

  linux中的/tmp目錄處理不需要永久儲存的檔案,在啟動時自動刪除/tmp目錄中的任何檔案
  系統上的任何使用者賬戶都有權讀取和寫入/tmp目錄中的檔案.
  mktemp testing.XXXXXX  建立本地臨時檔案
  -t 強迫mktemp在/tmp中建立檔案
  當mktemp建立臨時檔案時,它將完整路徑名返回給環境變數.
  -d 建立一個臨時目錄

 

輸入輸出重新導向:

 1.重新導向錯誤

ls -al badfile 2>test4 #將錯誤重新導向到檔案test4,這樣程式的錯誤就直接輸入到了檔案test4中,而在螢幕上看不到輸出。

2. 重新導向錯誤和資料

如果需要同時重新導向錯誤和普通資料,則必須使用兩個重新導向符號。必須在希望重新導向的資料前面放置相應的檔案描述符,然後將他們指向相應的輸出檔案以儲存資料

如:

ls -al test test3 badfile 2>test6 1>test7

這是將錯誤重新導向到test6檔案,將標準輸出STDOUT重新導向test7檔案

其實,也可以將STDEER和STDOUT重新導向到同一個檔案,使用&>符號,如:

ls -al test test2 test3 badfile &> test7

這樣,錯誤和標準輸出都定向到test7檔案中了。

3. 臨時重新導向

如:

echo "This is an error" >&2 #將這句重新導向到了標準錯誤

4. 永久重新導向

exec 1>testout 在指令碼執行期間,將標準輸出重新導向到testout

exec 2>testerror 在指令碼執行期間,將標準錯誤重新導向到testerror

但是這樣存在的一個問題是重新導向STDOUT和STDERR之後,就無法再將他們重新導向到原來的位置。

exec 0<testfile 在指令碼執行期間,將testfile重新導向到標準輸入

5. 輸出檔案描述符。shell中最多有9個開啟的檔案描述符,其他6個是3~8

exec 3>test13out

echo "and this" >&3

將數字3重新導向到test13out檔案,這樣上面echo後面的一句就輸入到了test13out檔案。

6. 恢複重新導向檔案描述符

exec 3>&1

exec 1>test14out

echo "dsafadsfasdf"

exec 1>&3

這樣 先將檔案描述符3重新導向到標準輸出,然後將標準輸出重新導向到檔案test14out,之後再把檔案描述符1重新導向到3,這樣1就恢複了原來的STDOUT了。這兒檔案描述符3相當於一個臨時變數來儲存標準輸出STDOUT

類似輸入檔案描述符如下:

exec 6<&0

exec 0<testfile

....

exec 0<&6

7. 建立讀取/寫入檔案描述符

確實可以為輸入和輸出開啟同一個檔案描述符,可以使用同一個檔案描述符從一個檔案讀取資料,同時向這個檔案寫入資料

exec 3<>testfile

輸入輸出都定向到了testfile檔案。

8. 關閉檔案描述符

要關閉檔案描述符,將它重新導向特殊符號&-

如:exec 3>&-

 

第13章 指令碼 指令碼控制


mktemp testint.XXXXXX 建立臨時檔案     

-t 選項強迫mktemp在系統臨時檔案夾中建立臨時檔案

-d mktemp建立一個臨時目錄

 

tee命令可以將STDIN的資料同時發送到STDOUT和其所指定的檔案

 

建立函數

return 命令以特定退出狀態退出函數。return命令可以使用單個整數值來定義函數退出的狀態,提供了一種通過編程設定函數退出狀態的簡單方法。

必須注意兩個容易發生的錯誤:

(1)請記住在函數完成之後儘快提取傳回值。

(2)請記住退出狀態的取值範圍是0~255

第15章 在指令碼中使用顏色

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.