Centos6筆記 -- Bash


1. shell的簡單介紹

  Shell簡單說既是提供用戶操作系統的接口。Linux默認使用的shell就是 bash。你可以通過查看 "/etc/shells" 這個文件來檢查我們目前的機器上可以支持使用的shell啦。

  如果你想查看你這個用戶使用的是哪個shell的話,你可以查看 "etc/passwd" 文件,每行的最后標出來的就是這個用戶所使用的shell啦。

  /bin/bash 是 Linux 默認的 shell,bash 是 GNU 計划中重要的工具軟件之一,目前也是 Linux distributions 的標准 shell。bash 主要兼容於 sh ,並且依據一些使用者需求,而加強的 shell 版本。

  bash 主要的優點有底下幾個:

    • 命令記憶能力(history)

      簡單說就是會記錄我們的歷史命令,這些命令記錄你可以在你的主文件夾內的 .bash_history 中找到。

    • 命令與文件補全功能([Tab]按鍵的好處)

      [Tab] 接在一串命令的第一個字的后面,則為命令補全;[Tab] 接在一串命令的第二個字以后時,則為文件補齊。

    • 命令別名設置功能(alias)

      比如你在命令行敲下 "alias lm='ls -al'" 那么你就可以通過 lm 命令來代替 ls -al 命令了。

    • 作業控制、前台、后台控制(job control, foreground, background)
    • 程序腳本(shell script)
    • 通配符(Wildcard)

 2. bash shell 的內置命令 -- type

  為了方便 shell 的操作,bash 內建了很多命令,如果你想確定某個命令是來自於外部命令(其他非bash所提供的命令)或是內置在bash當中的,你可以使用type這個命令來查看:

[root@www ~]# type [-tpa] name 選項與參數: :不加任何選項與參數時,type 會顯示出 name 是外部命令還是 bash 內建命令 -t :type 會將 name 以底下這些字眼顯示出它的意義: file :表示為外部命令; alias :表示該命令為命令別名所配置的名稱; builtin :表示該命令為 bash 內建的命令功能; -p :如果后面接的 name 為外部命令時,才會顯示完整文件名; -a :會由 PATH 變量定義的路徑中,將所有含 name 的命令都列出來,包含 alias 例一:查詢一下 ls 這個命令是否為 bash 內建 [root@www ~]# type ls ls is aliased to `ls --color=tty'

3. shell的變量功能

3.1 變量的顯示與設置 echo, unset

  利用 echo 這個命令來取用變量,變量被取用時,前面必須要加上錢字號 $ ,例如:

[root@www ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@www ~]# echo ${PATH} <==也可以使用這種方式

  那變量如何設置,如下所示:

[root@www ~]# myname=VBird

  我們在配置變量時,需要遵循以下守則:

    • 變量名稱只能是英文字母與數字,但是數字不能作開頭字符;
    • 變量內容若有空格符可使用雙引號 [ " ] 或單引號 [ ' ] 將變量內容包含起來;
    • 可用跳脫字符[ \ ] 將特殊符號(如 [Enter], $, \, 空格符, '等)變成一般字符;
    • 在一串命令中,還需要根據其他的命令提供信息時,可以使用反單引號[ `命令` ]或 [ $(命令) ]。特別注意,這個 ` 是鍵盤上方的數字鍵 1 左邊那個按鍵,而不是單引號;
    • 若該變量為擴增變量內容時,則可用 "$變量名稱" 或 ${變量} 累加內容,比如 PATH="$PATH":/home/bin;
    • 若該變量需要在其他子程序運行,則需要以 export 來使變量變成環境變量,比如 export PATH;
    • 取消變量的方法為使用 unset ,[ unset 變量名稱 ] ,比如取消 myname 的配置,則為 unset myname;

3.2 環境變量的功能

  可以使用 env 或 export 命令來查看我們系統目前存在的環境變量。

  可以使用 set 查看所有變量(包含環境變量與自定義變量)。

  可以使用 export 命令將自定義變量轉為環境變量。

[root@www ~]# export 變量名稱

3.3 變量的有效范圍

  操作系統中分環境變量與自定義變量,這兩個主要區別就是,子進程中訪問不到父進程中定義的自定義變量,但是可以訪問到環境變量。

3.4 變量的鍵盤讀取、數組與聲明: read, array, declare

  需要讀取來自鍵盤輸入的變量,可以使用 read 命令:

[root@www ~]# read [-pt] variable
選項與參數: -p :后面可以接提示字符 -t :后面可以接等待的秒數

例一:讓用戶由鍵盤輸入一內容,將該內容變成名為 atest 的變量
[root@www ~]# read atest
This is a test        <==此時光標會等待你輸入!請輸入左側文字看看
[root@www ~]# echo $atest
This is a test          <==你剛剛輸入的數據已經變成一個變量內容!

范例二:提示使用者 30 秒內輸入自己的大名,將該輸入字符串作為名為 named 的變量內容 [root@www ~]# read -p "Please keyin your name: " -t 30 named
Please keyin your name: Tsai   <==注意看,會有提示字符喔!
[root@www ~]# echo $named
Tsai        <==輸入的數據又變成一個變量的內容了!

   declare / typeset 是一樣的功能,就是聲明變量的類型

[root@www ~]# declare [-aixr] variable
選項與參數: -a :將后面名為 variable 的變量定義成為數組 (array) 類型 -i :將后面名為 variable 的變量定義成為整數數字 (integer) 類型 -x :用法與 export 一樣,就是將后面的 variable 變成環境變量; -r :將變量配置成為 readonly 類型,該變量不可被更改內容,也不能 unset

例一:讓變量 sum 進行 100+300+50 的加總結果
[root@www ~]# sum=100+300+50
[root@www ~]# echo $sum
100+300+50  <==因為這是文字型態的變量屬性,所有並沒有相加
[root@www ~]# declare -i sum=100+300+50
[root@www ~]# echo $sum
450

  數組變量的類型

  數組的設置方式: var[index]=content

3.5 變量內容的刪除、替代與替換

變量配置方式 說明

${變量#關鍵詞}

${變量##關鍵詞}

若變量內容從頭開始的數據符合“關鍵詞”,則將符合的最短數據刪除 若變量內容從頭開始的數據符合“關鍵詞”,則將符合的最長數據刪除

若變量內容從頭開始的數據符合“關鍵詞”,則將符合的最短數據刪除 若變量內容從頭開始的數據符合“關鍵詞”,則將符合的最長數據刪除

${變量%關鍵詞}

${變量%%關鍵詞}

若變量內容從尾向前的數據符合“關鍵詞”,則將符合的最短數據刪除

若變量內容從尾向前的數據符合“關鍵詞”,則將符合的最長數據刪除

${變量/舊字符串/新字符串}

${變量//舊字符串/新字符串}

若變量內容符合“舊字符串”則“第一個舊字符串會被新字符串取代”

若變量內容符合“舊字符串”則“全部的舊字符串會被新字符串取代”

4. Bash Shell的操作環境

4.1 通配符與特殊符號

符號 意義
* 代表0 個到無窮多個任意字符
? 代表一定有一個任意字符
[] 代表一定有一個在括號內的字符(非任意字符)。例如 [abcd] 代表一定有一個字符, 可能是 a, b, c, d 這四個任何一個
[-] 若有減號在中括號內時,代表在編碼順序內的所有字符。例如 [0-9] 代表 0 到 9 之間的所有數字,因為數字的語系編碼是連續的
[^] 若中括號內的第一個字符為指數符號 (^) ,那表示反向選擇,例如 [^abc] 代表 一定有一個字符,只要是非 a, b, c 的其他字符就接受


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM