1. 程式人生 > >Linux shell指令碼筆記

Linux shell指令碼筆記

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關鍵字也可賦值

    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個