­

Linux shell腳本筆記

  • 2019 年 10 月 26 日
  • 筆記

shell 命令解釋器 是用來解釋用戶對系統的操作 使用 cat /etc/shells 可以查看 系統安裝的shell

Linux 啟動過程: BIOS -> MBR -> BootLoader(grub) -> kernel -> systemd -> 系統初始化 -> shell

  BIOS 基本輸入輸出系統 選擇U盤啟動還是硬碟啟動;MBR 硬碟里可引導的部分;BootLoader(grub) 啟動內核工具 選擇啟動的內核;

  kernel 啟動內核;systemd 1號進程 其餘所有進程派生於它;然後才是系統初始化 啟動shell

執行腳本的四種方式

  1 bash ./filename.sh   2 ./filename.sh 

  3souce ./filename.sh  4 . ./filename.sh

  1和2 執行腳本時 會創建一個新的進程來執行 3和4執行腳本時會用當前進程來執行(環境變數是當前系統的環境變數) (不產生新進程執行的命令叫做內建命令

  1 3 4 執行腳本時腳本可以不擁有執行許可權 2 執行腳本時必須有可執行許可權

管道 ‘|’ 兩個進程之間的通訊 第一個進程的輸出當作第二個進程的輸入  a|b|c a的輸出當作b的輸入 b的輸出當作c的輸入 (管道應該規避內建命令

重定向 更改標準輸入和標準輸出為文件 利用文件代替鍵盤的輸入 保存至文件代替終端的輸出

  < 輸入 wc -l < /etc/passwd  將<右側的內容代替鍵盤輸入

  > 輸出 覆蓋輸出  >> 追加輸出

  2>> 錯誤輸出重定向 2 為標準錯誤流重定向 

  &>> 正確或錯誤都重定向輸出

變數 shell腳本中可以有變數 變數名由字母 數字 下劃線組成 數字不能在變數名開始處

  shell 變數為弱類型 不區分類型 區分大小寫

  使用方式 1name=value 等號左右不能有空格   2  read name 從用戶處讀入變數 互動式輸入 3 name=ls 變數的值還可以是命令

    4 name=$(ls /etc/) 變數的值還可以是命令的字元串 $() 可以用反引號代替 5let a=2 let關鍵字也可賦值 此時賦值數字時可以使用0開頭八進位 和0x開頭十六進位

    6 變數的值有特殊字元時應該用” 或者’包起來 這時候不應該使用let 使用’單引號包裹的內容不會解析變數 會被當作字元串輸出

變數引用 ${} 大括弧{}可以省略 當使用字元串拼接時 也就是要把變數的值加上其他字元串 這時候{}不能省略

  變數作用範圍  默認作用於當前執行的shell本身 若想讓作用於子shell 時 需要用export 導出一個變數  變數不再使用時 可以用unset刪除變數

環境變數 環境變數是當前用戶統一配置的 當前用戶下每個shell都可以得到的變數  使用env set可以查看當前環境變數

  常用環境變數  $PATH 為命令搜索路徑   $USER 用戶名   $UID 用戶id    $PSI 配置終端提示顯示

  預定義變數   $? 保存上一條命令運行結果 0為正確 1為錯誤   $$ 當前進程PID  $0當前進程名

  位置變數   $0 $1 … $9 執行腳本時的參數 不存在為空  (${2-_}  如果$2為空代表_  不空代表$2

環境變數配置文件   /etc/profile  /etc/bashrc  ~/.bashrc  ~/.bash_bashrc  /etc/profile.d/

  /etc/目錄下對所有用戶生效 ~/目錄下對當前用戶生效

  執行 su – root 時 配置文件執行順序  /etc/profile  ~/.bash_bashrc  ~/.bashrc  /etc/bashrc 有相同變數名時後面會覆蓋前面的

  執行su root 時 執行~/.bashrc 和 /etc/bashrc

數組的使用

  IPTS=(1 2 3)  定義數組   值之間用空格分開IPTS=(1 2 3)

  echo ${IPTS[@]} 顯示所有元素

  echo ${#IPTS[@]} 顯示元素個數

  echo ${IPTS[0]} 顯示第0個元素