Bash的基礎特性(1)
1.指令曆史history
環境變量;
HISTSIZE:指令曆史記錄的條數;
HISTFILE:~/.bash_history
HISTFILESIZE;指令曆史檔案記錄曆史的條數;
調用上一條指令的最後一個參數:
!$:
控制指令記錄的方式:
環境變量:HISTCONTROL
ignoredups;忽略重複的指令;連續且相同方為重複;
ignorespace:忽略所有以空白開頭的指令;
ignoreboth:ignoredups,ignorespace;
修改環境變量值的方式:export 變量名=“值”
變量指派:把指派符号後面的資料存儲于變量名指向記憶體空間;

history其它用法在計算機基礎章節也寫過,就此略過
2.指令補全
Bash執行指令:
内部指令;
外部指令:bash根據PATH環境變量定義的路徑,自左向右在每個路徑搜尋以給定指令命名的檔案,第一次找到即為要執行的指令;
直接補全:Tab,使用者給定的字元串隻有一條唯一對應的指令;
以使用者給定的字元串為開頭對應的指令不唯一,則再次Tab會給出清單;
3.路徑補全
把使用者給出的字元串當做路徑開頭,并在其指定上級目錄下搜尋已指定的字元串開頭的檔案名;
如果唯一:則直接補全。否則;再次Tab,給出清單;
4.指令行展開
~:展開為使用者的主目錄;
~USERNAME:展開為指定使用者的主目錄
{}:可承載一個以逗号分隔的清單,并将其展開為多個路徑
/tmp/{a,b}=/tmp/a,/tmp/b;
/tmp/{tom,jerry}/hi=/tmp/tom/hi,/tmp/jerry/hi
5.指令的執行結果
成功
失敗
Bash使用特殊變量$?儲存最近一次指令的執行狀态結果:
0:成功
1-255:失敗
echo$?
Bash基礎特性(2)
1.指令别名(alias)
通過alias指令來實作:
1)alias
顯示目前shell程序所有可用的指令别名;
2)alias NAME=‘VALUE’
note:在指令行中定義的别名,僅對目前的shell程序有效;如果想要永久有效,要定義在配置檔案中;
僅對目前使用者有效:~/.bashrc
對所有使用者有效:/etc/bashrc
Note:編輯配置不會立即生效,需要bash程序重新讀取配置檔案:
Source /path/to/config_file
. /path/to/config_file
撤銷别名:unalias
unalias [-a] name [name...]
note:如果别名同原指令的名稱,則要執行原指令,可以使用”\COMMAND”
2.glob(globbing)
bash中用于實作檔案名“通配”
通配符:*,?,[]
1)*:任意長度的任意字元
2)?:任意單個字元
3)[]:比對指定範圍内的任意單個字元
[0-9]:0-9之間任意一個值;
[a-z]:不區分大小寫;
4)[^]:比對指定範圍外的任意單個字元
[^0-9]:除了0-9以外的任意單個字元;
專用字元集合:
[:digit:]:任意數字,相當于0-9;
[:lower:]:任意小寫字母
[:upper:]:任意大寫字母
[:alpha:]
[:alnum:]:任意數字
[:space:]:空格
[:punct:]:标點符号
練習:
1)顯示/var目錄下所有以1開頭,以一個小寫字母結尾,且中間出現至少一位數字的檔案或目錄;
2)顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的檔案或目錄;
3)顯示/etc/目錄下,以非字母開頭,後面跟了一個字母及其它任意長度任意字元的檔案或目錄;
4)複制/etc目錄下,所有以m開頭,以非數字結尾的檔案或目錄至/tmp/claude目錄中
5)複制/etc目錄下,所有以.d結尾的檔案或目錄至/tmp/claude目錄中;
6)複制/etc目錄下,是以有.conf結尾,且以m,n,r,p開頭的檔案或目錄至/tmp/claude目錄中;
3.Bash的快捷鍵
Ctrl+l:清屏,相當于clear
Ctrl+a:跳轉至指令開始處;
Ctrl+e:跳轉至指令結尾處;
Ctrl+c:取消指令的執行;
Ctrl+u:删除指令行首至光村所在處的所有内容;
Ctrl+k:除光标所在處至指令行尾部的所有内容;
4.Bash的I/O重定向及管道
程式:指令+資料
讀入資料:input
輸出資料:output
打開的檔案都由一個fd:filedescription(檔案描述符)
标準輸入:keyboard,0
标準輸出:monitor,1
标準錯誤輸出:monitor,2
I/O重定向:改變标準位置
輸出重定向:COMMAND > NEW_POS, COMMAND >>NEW_POS
>:覆寫重定向,目标檔案中的原有内容會被清除;
>>:追加重定向,新内容會追加至目标檔案尾部;
#set–C:禁止将内容覆寫輸出至已有檔案中;
強制覆寫:>|
2>:覆寫重定向錯誤輸出資料流;
2>>追加重定向錯誤輸出資料流;
标準輸出和錯誤輸出各自定向至不同位置:
COMMAND> /path/to/file.out 2> /path/to/error.out
合并标準輸出和錯誤輸出為同一個資料流進行重定向:
&>:覆寫重定向
&>>:追加重定向
另一種方法:
COMMAND> /path/to/file.out 2> &1
COMMAND>> /path/to/file.out 2>> &1
輸入重定向:<
tr指令:轉換或删除字元
tr [OPTION]... SET1[SET2]
HERE Documentation:<<
cat << EOF
cat >/path/to/somefile << EOF
管道:
COMMAND1 | COMMAND2 | COMMAND3 |...
Note:最後一個指令會在目前shell程序的子shell程序中執行;
tee指令:
tee [OPTION]... [FILE]...
1.将/etc/passwd檔案中的前5行内容轉換為大寫後儲存至/tmp/passwd.out檔案中;
2.将登入至目前系統上的使用者資訊中的後3行的資訊轉換為大寫後儲存/tmp/who.out檔案中;
Bash的基礎特性(3)
1、提供了程式設計環境
程式:指令+資料
程式程式設計風格:
過程式:以指令為中心,資料服務于指令
對象式:以資料為中心,指令服務于資料
shell程式:提供了程式設計能力,解釋執行
程式的執行方式:
計算機:運作二進制指令;
程式設計語言:
低級:彙編
進階:
編譯:進階語言-->編譯器-->目标代碼
C、C++, java
解釋:進階語言-->解釋器-->機器代碼
shell, perl, python
過程式程式設計:
順序執行
循環執行
選擇執行
shell程式設計:過程式、解釋執行
程式設計語言的基本結構:
資料存儲:變量、數組
表達式
語句
shell腳本:文本檔案
shebang:
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
magic number: 魔數
運作腳本:
1、給予執行權限,通過具體的檔案路徑指定檔案執行;
2、直接運作解釋器,将腳本作為解釋器程式的參數運作;
變量:
命名的記憶體空間;
資料存儲方式:ASCII
字元:110:24
數值:110--> 8
整型
浮點型
變量:變量類型
作用:
1、資料存儲格式;
2、參與的運算;
3、表示的資料範圍;
類型:
字元
數值:
程式設計程式語言:
強類型:
弱類型:bash
把所有要存儲的資料統統當作字元進行
不支援浮點數;
邏輯運算:
true, false
1, 0
與:
1 && 1 = 1
1 && 0 = 0
0 && 1 = 0
0 && 0 = 0
或:
1 || 1 = 1
1 || 0 = 1
0 || 1 = 1
0 || 0 = 0
非:
! 1 = 0
! 0 = 1
短路運算:
第一個為0,結果必定為0;
第一個為1,第二個必須要參與運算;
或:
第一個為1,結果必定為1;
第一個為0,第二個必須要參與運算;
Bash的基礎特性(4)
變量類型:
資料存儲格式、存儲空間大小、參與運算種類;
字元型;
數值型:
整型;
浮點型;
強類型:定義變量時必須指定類型、參與運算必須符合類型要求;調用未聲明變量會産生錯誤;
弱類型:無須指定類型,預設均為字元型;參與運算會自動進行隐式類型轉換;變量無須事先定義可直接調用;
Bash中變量的種類:
根據變量的生效範圍等标準;
本地變量:生效範圍為目前shell程序;隊目前shell之外的其它shell程序,包括目前shell的子shell程序均無效;
環境變量:生效範圍為目前shell程序的及其子程序;
局部變量:生效範圍為目前shell程序中某代碼片段(通常指函數);
位置變量:$1,$2,…來表示,用于讓腳本在腳本代碼中調用通過指令傳遞給它的參數;
特殊變量:$?,$0,$*,$@,$#
本地變量:
變量指派:name=‘value’可以使用引用
Value:
1)可以直接是字元串;name=“username”
2)變量引用:name=“$username”
3)指令引用:name=’COMMAND’,name=$(COMMAND)
變量引用:${name}, $name
"":弱引用,其中的變量引用會被替換為變量值;
'':強引用,其中的變量引用不會被替換為變量值,而保持原字元串;
顯示已定義的所有變量:set
銷毀變量:unset name
環境變量:
變量聲明、指派;
export name=VALUE
declare –x name=VALUE
變量引用:$name,${name}
顯示所有的環境變量:export,env,printenv
銷毀:unset name
Bash有許多內建的環境變量:PATH,SHELL,UID,HISTSIZE,HOME,PWD,OLD,HISTFILE,PS1
變量命名規則:
1)不能使用程式中的保留字:例如if,for;
2)不能使用數字、字母及下劃線,且不能以數字開頭;
3)見名知意;
隻讀變量:
readonly name
declare –r name
位置變量:
在腳本代碼中調用通過指令行傳遞給腳本的參數;
$1,$2,…:對應調用第1、第2等參數;
Shift[n]
$0:指令本身;
$*:傳遞給腳本的所有參數;
$@:傳遞給腳本的所有參數;
$#;傳遞給腳本的參數的個數
示例:判斷給出的檔案的行數;
Bash的配置檔案:
按生效範圍劃分,存在兩類:
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人配置;
~/.bash_profile
~/.bashrc
按功能劃分存在兩類:
Profile類:為互動式登入的shell提供配置
全局:/etc/profile,/etc/profile.d/*.sh
個人:~/.bash_profile
功用:
1)用于定義環境變量;
2)運作指令或腳本;
Bashrc類:為非互動式登入的shell提供配置
全局:/etc/bashrc
個人:~/.bashrc
功用:定義指令别名;定義本地變量
Shell登入:
互動式登入:
直接通過終端賬号密碼登入:
使用“su -username”或“su –l username”切換的使用者;
/etc/peofile à /etc/profile.d/*.sh à~/.bash_profile à~/.bashrc à/etc/bashrc
非互動式登入:
su username
圖形界面下打開的終端
執行腳本
~/.bashrc à/etc/bashrc à/etc/profile.d/*.sh
編輯配置檔案定義的新配置的生效方式: