EBB-7、認識bash

一、認識bash

(一)shell

1、定義:命令解釋器。

  將用戶下達的命令解釋給kernel,將kernel的反饋解釋給用戶。

clip_p_w_picpath002

2、使用文字界面的shell的原因

1)通用性

2)便捷迅速

3)可以將多個小工具組合在一起完成任務

4)節省資源

5)方便遠程管理

3、shell的歷史

1)Steven Borne最早創建了bsh

2)Bill Joy創建了csh。並創辦了SUN。csh衍生出tcsh。

3)Bran.J.Fox創建了Bash ——Bourne again shell,Linux上最爲常用的shell。

4)AIX平臺上常用的是ksh

5)使用cat /etc/shells命令,查看linux當前系統下支持的shell

clip_p_w_picpath004


(二)、內建指令與命令用法

1)內建指令不真實存在本機硬盤目錄下,包含在bash內部自身中;使用help查看bash shell的內建命

  令。


  外建命令指放在本機/bin,/sbin等目錄下的可執行文件,運行外建命令的標準方式是切換到目錄下  

  通過./ ,或者是以絕對路徑的方式調用命令。

  通過$PATH變量可以方便的調用執行命令

2)cd /root

     ls

 與(cd /root ; ls)(用分號的方式分割)顯示結果一樣;

 區別:分兩次執行完畢後,當前目錄已經切換到/root;在括號內一次執行完畢後,當前所在路徑依  

       然是未切換之前的目錄/etc。當以() ;的方式連接多個命令執行時,是在當前的進程中開  

       啓了一個子進程,並在子進程中執行的一系列命令(先執行cd /root,然後執行ls),當執  

       行完畢後,退出子進程,回到原進程,回到初始目錄。

clip_p_w_picpath006


(三)變量

1、變量是shell所記得的指定值

2、聲明變量(給變量賦值)A=1,使用echo $A查看變量A;如果直接echo A將直接輸出A。

  $叫做變量的前綴

3、取消聲明變量unsetA

clip_p_w_picpath008

  變量名稱中的字母一般是大寫的,後面指定的一般是數字


(四)BASH的只讀變量

     只讀變量是由bash shell自動設置的,這些變量是隻讀的,不能被用戶設置。

1、 ? 最新執行的命令的退出狀態。狀態有兩種,分別爲0和1。

     代表執行成功或者執行失敗

clip_p_w_picpath010

   echo $?的值爲0表示cd /etc/的命令執行成功。

   echo $?的值爲1表示cd /fu/的命令執行失敗

   寫shell腳本時,使用 $? 判斷前一個指令是否執行成功

2、 _當前啓用中的shell選項標記。

    echo $_ :

   該結果隨着使用會發生變化的。

   當前執行ls ,進程中執行的是/bin/ls --color=tty

   如果只執行/bin/ls ,顯示無顏色

clip_p_w_picpath012

3、$ 當前shell的進程(pid)

  echo $$ 查看當前進程的編號

4、! 最新的後臺命令的進程id(pid)

5、_ (下劃線) 前一個命令的最後標記

  -  當前命令的特殊標記

6、PPID 當前進程父進程的號碼


(五)預賦值變量

     預賦值變量由bash shell初始化,不要去重新賦值

1、 BASH_VERSION:當前bash的版本

clip_p_w_picpath014

2、 HOSTNAME :當前機器的DNS主機名

clip_p_w_picpath016

3、 OLDPWD:上一次工作目錄

           cd - 查找的就是OLDPWD存放的信息,進入相關目錄

4、 PWD:當前工作目錄

5、 RANDOM:隨機顯示介於0到32767之間的任意整數

6、 SECONDS:自shell啓動以來經過的秒數


(六)環境變量和局部變量

1、局部變量:只在當前進程範圍內有效的變量

2、環境變量:Linux內核允許任何進程定義被稱做環境變量的“名稱-值對”。這些變量是保存在內核

            進程中的一部分。無論何時,一個進程啓動另一個進程時(例如,bash shell啓動ls命

            令),子進程都會繼承環境變量

3、set:列出當前系統已經定義的shell變量和與shell有關的環境變量

  env:只列出環境變量

  例如:LANG 程序應該使用的默認語言

clip_p_w_picpath018


(七)、命令行替換

1) ! 前一個命令行

2){} 指定的文本

clip_p_w_picpath020

3) ~username 進入指定用戶的家目錄

   cd ~ 默認進入當前用戶的家目錄

4) $ shell的變量

clip_p_w_picpath022

     ${ …} 環境變量

     $(...) 將變量值替換爲括號內命令執行的結果

clip_p_w_picpath024

5) $((…)) 算術運算。只能進行標準的整數運算。例如

clip_p_w_picpath026

6)`…` (反逗點) ,$(…)(括號內爲命令)

    運行在子shell中的命令的輸出

    例如:在/tmp下創建一個以當前時間命名的文件

(1)touch /tmp/$(date +%Y%m%d).log

clip_p_w_picpath028

(2)touch /tmp/`date +%Y%m%d `.log

clip_p_w_picpath030

7)

* 任意多個字符

? 任意單個字符

[… ] 括號中的字符之一

[^…] 任何一個不在[…]字符

文件系統中匹配的文件名,如通配符等


8)如何轉義或者避免shell將其特殊解釋,bash shell提供三種方法:

(1)轉義 \ 避免下一個字符被shell進行解釋,例如:

clip_p_w_picpath032

(2)""(雙引號) 避免雙引號內除了$、!、空格和` `(反引號)字符以外的其他字符被shell解釋

(3)''(單引號)     避免單引號內的字符被shell解釋

                     (包括$,!,` `(反引號)特殊字符在內的所有字符)

clip_p_w_picpath002

clip_p_w_picpath036


(八)自定義shell

1、alias不能創建新的命令,但可以創建現有命令的方便用法。

2、執行alias查看當前系統的別名定義

clip_p_w_picpath038

定義alias h

clip_p_w_picpath040

clip_p_w_picpath042

unalias取消別名的定義

clip_p_w_picpath044


(九)Shell腳本

1、Shell腳本本質是Shell命令的羅列

clip_p_w_picpath046

2、Shell腳本中

shell下執行命令方式:

<1> source的方式執行

<2>. 的方式執行

例如:執行vi /etc/init.d/sshd

clip_p_w_picpath048

1)標準的shell腳本一般以#!/開始

注意:一般情況下,#開頭的稱爲註釋行,該行無任何含義,主要寫一些說明性的文字;

     但是如果 # 後跟上!表示該腳本以什麼shell來運行的

     如跟/bin/bash,表示以/bin/bash來運行

2)shell儘量書寫相應的註釋

3)良好的縮進,可以更方便的閱讀腳本

  如寫完開頭先寫個結尾,然後在中間寫入;

  儘可能使用變量;

  先寫變量的賦值,然後再寫相應的內容;

  相應的功能建議形成模塊,製作成爲函數,方便以後調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章