Bash shell

  • Bash shell 的功能:
    1. 命令編修能力:記憶使用過的指令
      1. 只要在指令列按『上下鍵』就可以找到前一個輸入的指令。
      2. ~/.bash_history 記錄前一次登入以前所執行過的指令;
      3. 這一次登入所執行的指令都被暫存在暫記憶體中;
      4. 成功登出後會寫入 ~/.bash_history
    2. 命令與檔案補全功能:
      1. [Tab] 接在一串指令的第一個字的後面,則為命令補全;
      2. [Tab] 接在一串指令的第二個字以後時,則為『檔案補齊』。
    3. 命令別名 (alias) 設定功能:可以直接下達命令來設定別名
      alias lm='ls -al'
      
    4. 工作控制 (jobs)、前景背景控制:將工作丟到背景中執行不怕不小心使用了 [Ctrl]+c 來停掉該程序,也可以在單一登入的環境中,達到多工的目的。
    5. Shell scripts 的強大功能:
      1. 可以將需要下達的連續指令寫成一個檔案;
      2. 可以透過對談互動式的方式來進行主機的偵測工作;
      3. 可以藉由 shell 提供的環境變數及相關指令來進行設計。
    6. 萬用字元:可利用的萬用字元,加快使用者的操作。例如,查詢目錄 /etc 下以 sys 開頭之檔案或目錄。
      [root@dywOffice ~]# ls -ld /etc/sys*
      drwxr-xr-x 8 root root 1024 Jan 24 16:36 /etc/sysconfig/
      -rw-r--r-- 1 root root 1284 Jan  5 13:03 /etc/sysctl.conf
      -rw-r----- 1 root adm  1675 Jan  5 13:03 /etc/syslog.conf
      
  • 查詢 Bash shell 的內建命令
    1. type 指令:
      [root@linux ~]# type [-tpa] name
      選項:
          :不加任何參數,顯示出 name 是外部指令還是 bash 內建的指令。
      -t  :以下列字眼顯示 name 的意義:
            file    :表示為外部指令;
            alias   :表示該指令為命令別名所設定的名稱;
            builtin :表示該指令為 bash 內建的指令功能;
      -p  :如果 name 是指令,則顯示完整檔名(外部指令)或顯示為內建指令;
      -a  :列出 PATH 變數定義的路徑中,所有含有 name 的指令,包含 alias。
      
    2. 查詢指令 ls 是否為 bash 內建。
      [root@linux ~]# type ls
      ls is aliased to `ls --color=tty'
      [root@linux ~]# type -t ls
      alias
      [root@linux ~]# type -a ls
      ls is aliased to `ls --color=tty'
      ls is /bin/ls
      
    3. 查看指令 cd 。
      [root@linux ~]# type cd
      cd is a shell builtin
      

  • 指令的下達
    1. 指令下達方式及說明:
      [root@linux ~]# command [-options] parameter1 parameter2 ...
                        指令     選項      參數(1)    參數(2)
      說明:
      0. 一行指令中第一個輸入的絕對是『指令(command)』或『可執行檔案』
      1. command 為指令的名稱,例如變換路徑的指令為 cd 等;
      2. 中刮號[]並不存在於實際的指令;
      3. 加入選項時,前導符號通常為 - 號,例如 -h;
         有時候完整參數名稱會輸入 -- 符號,例如 --help;
      4. parameter1 parameter2.. 為依附在 option 後面的參數,
         或者是 command 的參數; 
      5. command, -options, parameter1.. 中間以空格來區分,
         不論空幾格 shell 都視為一格;
      6. 按下 [Enter] 按鍵後,該指令就立即執行。[Enter] 按鍵為 <CR> 字符,
         代表著一行指令的開始啟動。
      7. 指令太長時,可使用 \ 符號來跳脫 [Enter] 符號,使指令連續到下一行。
      8. 在 Linux 系統中,英文大小寫字母是不一樣的。舉例來說, cd 與 CD 並不同。
      
    2. 列出 /root 底下的各檔案名稱 。
      [root@linux ~]# ls -al /root
      [root@linux ~]# ls     -al      /root
      # 不論指令與參數中間空幾格,都是可以接受的。
      
    3. 如果指令太長的話,如何使用兩行來輸出?
      [root@linux ~]# cp /var/spool/mail/root /etc/crontab \
      > /etc/fstab /root
      # 利用 \ 將按鍵 [Enter]『跳脫』,也就是 [Enter] 按鍵不再具有指令開始啟動的功能。
      # [Enter] 按鍵要緊接著反斜線 (\),兩者間沒有其他字元。
      # \ [Enter] ,亦即 [Enter] 與反斜線中間有一個空格時,則 \ 跳脫的是『空白鍵』
      # 順利跳脫 [Enter] 後,下一行最前面就會主動出現 > 的符號,可以繼續輸入指令。
      
練習題
  1. Bash shell 的命令編修能力,所指為何?
    Sol. 記憶使用過的指令
  2. Bash shell 執行過的指令記錄在那個檔案?
    Sol. ~/.bash_history
  3. 在 Bash shell 環境下,按 [Tab] 有何功能?
    Sol. 命令與檔案補全功能
  4. 設定命令 ls -ld 的別名為 lld?
    Sol. alias lld='ls -ld'
  5. 在同一個 Bash shell 環境下,如何同時執行多項工作?
    Sol. 利用工作控制,將程序丟到背景中執行,即可繼續輸入指令。
  6. 請列舉三項 shell scripts 的功能?
    Sol. 1. 將連續下達的指令寫成一個檔案;2.透過對談互動式進行主機的偵測;3. 藉由 變數及相關指令進行 scripts 設計。
  7. 萬用字元 『 * 』代表什麼?
    Sol. 代表所有字元
  8. 在 Bash shell 環境下,如何查詢指令 ls 是否為 bash 內建?
    Sol. type ls
  9. 在 Bash shell 環境下,如何查詢指令 ls 是否為 bash 內建且列出 PATH 變數定義的路徑?
    Sol. type -a ls
  10. 在 Bash shell 環境下達指令,加入選項的前導符號通常為何?
    Sol. -
  11. 在 Bash shell 環境下達指令,加入完整選項名稱的前導符號通常為何?
    Sol.
  12. 在 Bash shell 環境下達指令,指令太長時,可使用什麼符號來跳脫 [Enter] 符號,使指令連續到下一行?
    Sol. 跳脫符號 \
  13. 在 Bash shell 環境下達指令,使用跳脫符號跳脫 [Enter] 符號後,下一行會出現什麼樣的提示符號?
    Sol. >
  14. 在 Linux 系統中,下達指令 cd 與 CD 是否相同?
    Sol. 不同

  DYWANG_HOME