初識 Shell

cnguu發表於2019-09-05

認識 Shell

什麼是 Shell

  • Shell 是命令解析器,用於解析使用者對作業系統的操作
  • Shell 有很多
    • cat /etc/shells
  • CentOS 7 預設使用的 Shell 是 bash

Linux 的啟動過程

  • BIOS → MBR → BootLoader(Grub)→ Kernel → Systemd → 系統初始化 → Shell

Shell 指令碼

  • UNIX 的哲學:一條命令只做一件事
  • 為了組合命令和多次執行,使用指令碼檔案來儲存需要執行的命令
  • 賦予該檔案執行許可權(chmod u+rx filename)

標準的 Shell 指令碼包含元素

  • Sha-Bang
  • 命令
  • “#” 號開頭的註釋
  • chmod u+rx filename 可執行許可權

指令碼不同執行方式的影響

  • bash ./filename.sh(無需新增執行許可權,不改變當前目錄,產生子程式)
  • ./filename.sh(需要新增執行許可權,不改變當前目錄,產生子程式)
  • source ./filename.sh(需要新增執行許可權,改變當前目錄,無子程式產生)
  • .filename.sh(需要新增執行許可權,改變當前目錄,無子程式產生)

內建命令和外部命令的區別

  • 內建命令不需要建立子程式
  • 內建命令對當前 Shell 生效

管道與管道符

  • 管道和訊號一樣,也是程式通訊的方式之一
  • 匿名管道(管道符)是 Shell 程式設計經常用到的通訊工具
  • 管道符是 “|”,將前一個命令執行的結果傳遞給後面的命令
ps | cat
echo 123 | ps

重定向符號

  • 一個程式預設會開啟標準輸入、標準輸出、錯誤輸出三個檔案描述符
  • 輸入重定向符號 “<”
read var < /path/to/a/file
  • 輸出重定向符號
    • “>”:清空內容再輸出
    • “>>”:換行追加內容輸出
    • “2>”:錯誤輸出
    • “&>”:全部輸出
echo 123 > /path/to/a/file
  • 輸入和輸出重定向組合使用
cat > /path/to/a/file << EOF
I am $USER
EOF

變數的定義

  • 變數名的命名規則
    • 字母、數字、下劃線
    • 不以數字開頭

變數的賦值

為變數賦值的過程,稱為變數替換

  • 變數名=變數值 a=123
  • 使用 let 為變數賦值 let a=10 + 20
  • 將命令賦值給變數 l=ls
  • 將命令結果賦值給變數,使用 $() 或者 `letc=$(ls -l /etc)`
  • 變數值有空格等特殊字元可以包含在 “” 或者 '' 中

不能有空格

變數的引用

  • ${變數名} 稱作對變數的引用
  • echo ${變數名} 檢視變數的值
  • ${變數名} 在部分情況下可以省略為 $變數名

變數的作用範圍

  • 變數的匯出
    • export
  • 變數的刪除
    • unset

系統環境變數

  • 環境變數:每個 Shell 開啟都可以獲得的變數

    • set 和 env 命令
    • $? $$ $0
    • $PATH
    • $PS1
  • 位置變數

    • $1 $2 ... $n

環境變數配置檔案

  • /etc/profile
  • /etc/profile.d/
  • ~/.bash_profile
  • ~/.bashrc
  • /etc/bashrc
本作品採用《CC 協議》,轉載必須註明作者和本文連結