shell簡介

一、Shell簡介linux

  Shell是一個命令解釋器,它在操做系統的作外層,負責直接與用戶對話,把用戶的輸入解釋給操做系統,並處理各類各樣的操做系統的輸出結果,輸出到屏幕返回給用戶。這種對話方式能夠是交互的方式(從鍵盤輸入命令,能夠當即的到shell的迴應),或非交互(腳本)的方式。shell

  

  shell 英文是貝殼的意思,命令解釋器 shell 就像一個貝殼同樣包住了系統核心。bash

二、什麼是 Shell 腳本運維

  當 linux 命令或語句不在命令行下執行(嚴格說,命令行也是 shell),而是經過一個程序文件執行時,該程序就被稱爲shell腳本或shell程序,shell程序很相似dos系統下的批處理程序(擴展名*.bat)。編輯器

三、Shell 腳本語言的種類:函數

  在unix/linux中主要有兩大類shell:spa

  (1)Bourne shell (包括sh、ksh、bash)操作系統

  (2)C shell(包括csh、tcsh)命令行

  Shell 腳本是弱類型語言,較爲通用的shell有標準的Bourne shell(sh)和C shell(csh)。其中 Bourne shell(sh)已經被 bash shell取代。unix

  Shell 的優點在於處理操做系統底層的業務,由於有大量的系統命令作支撐,shell開發更簡單快速,服務運維的原則。

四、Linux操做系統默認Shell是Bash

   查看當前系統的shell :echo $SHELL

五、shell 腳本的創建

  開頭:#!/bin/bash

     其中開頭的「#!」又稱爲幻數,在執行bash腳本的時候,內核會根據「#!」後的解釋器來肯定用哪一個程序解釋腳本中的內容,若是不設置,就用系統默認的shell來解釋。

  sh 爲 bash 的軟連接,標準寫法是#!/bin/bash

六、shell腳本的執行

  當shell腳本以非交互的方式(文件方式)運行時,它會先查找環境變量ENV,該變量指定了一個環境文件(一般是.bashrc,.bash_profile,/etc/bashrc,/etc/profile等),而後從該環境變量文件開始執行,當讀取了ENV文件後,shell纔開始執行shell腳本中的內容。

七、shell腳本的基本規範。

  #!/bin/sh 或 #!/bin/bash

  開頭加版本版權等信息。

  中括號兩端要有空格

八、Shell 變量

(1)變量類型

  變量可分爲兩類:環境變量(全局變量)和局部變量。

  環境變量也稱爲全局變量,能夠在建立他們的shell及其派生出來的任意子進程shell中使用。局部變量只能在建立他們的shell函數或腳本中使用。還有一些變量是用戶建立的,其餘的則是專用的shell變量。

(2)環境變量

  環境變量用於定於Shell的運行環境,保證Shell命令的正確執行,Shell經過環境變量來肯定登陸的用戶名、命令途徑、終端目錄等,全部的環境變量都是全局的,可用於子進程中,包括編輯器,Shell腳本和各種應用(crond任務時最好自定義)。

  環境變量能夠在命令行中設置,但用戶退出時這些變量值會丟失。

  定義環境變量的路徑:

  ~/.bash_profile

  /etc/bashrc

  /etc/profile   ----全局的環境變量

  /etc/profile.d

  全部環境變量均大寫。環境變量應用於用戶進程前,都應該用export命令導出,例如:export CHAN=1

八、查看系統的環境變量:

  env

  set

九、自定義環境變量

  ①export 變量名=value

  ②變量名=value;export 變量名

  ③declare -x 變量名=value

  

  只在命令行生效。重啓或退出終端失效

   

   區別:上面兩個只在用戶下生效,切換到別的用戶下不生效

十、取消本地變量和環境變量  -- unset

  

   取消環境變量的時候變量不帶 $,只有在輸出的時候才帶$

  shell中變量的命名,通常是數字、字母、下劃線組成,字母開頭

  

   數字開頭定義變量不嚴謹。要用字母開頭

 十一、單引號、雙引號的區別

  單引號裏的內容原樣輸出。所見即所得

  雙引號裏的變量解析,全部內容輸出。

  雙引號裏的命令能夠用  `命令` 表示 也能夠是 $(命令) 表示

  

  無引號,定義的變量之間不能有空格。

  echo的特殊性,後面內容不加引號也能輸出,最好加雙引號。

  小結:腳本中普通字符串儘可能雙引號,單純數字能夠不加引號。

 (1)awk 的單雙引號存在特殊性:

  

 

   awk 的單引號是解析變量,雙引號原樣輸出,不加引號無內容。

十二、Shell 特殊變量:

 (1)位置變量:

  $0  獲取當前執行的shell腳本的文件名,若是執行腳本帶路徑那麼就包括腳本路徑。

  $n  獲取當前執行的shell腳本的第n個參數值,n=1..9,當n爲0時表示腳本的文件名,若是n大於9,用大括號括起來{10}

  $*   獲取當前shell的全部參數,將全部的命令行參數視爲單個字符串,至關於"$1$2$3",注意與$#的區別。

  $#   獲取當前shell腳本命令行中參數的總個數。

  $@  這個程序的全部參數"$1" "$2" "$3"...,這是將參數傳遞給其餘程序的最佳方式。

1三、查看文件的路徑或名字

  dirname 文件路徑        顯示當前目錄的路徑

  basename  文件名字   顯示當前文件的名字

1四、$# 簡單應用

  

 

   傳入的參數必須是兩個。

1五、進程狀態變量。

  $$  獲取當前shell的進程號(PID)

  $!   執行上一個指令的PID

  $?   獲取執行上一個指令的返回值(0爲成功,非0爲失敗)

  $_   在此以前執行的命令或腳本的最後一個參數。

1六、$? 返回值參考

  0  運行成功

  2   權限拒絕

  126   找到命令沒法執行

  127   找不到命令

  >128     命令被強制結束

相關文章
相關標籤/搜索