bash特性之基礎

bash shell

命令歷史history

環境變量:

HISTSIZE :命令歷史記錄的條數
HISTFILE :~/.bash_history
HISTFILESIZE:

顯示環境變量:echo 

bash特性之基礎 

環境變量的修改:export 

bash特性之基礎

history

history [-c] [-d offset] [n]
 -c :清空命令歷史
 -d offset :刪除指定偏移量的歷史條目
  n  :顯示歷史中最近的n 條命令
 -a:

bash特性之基礎

調用歷史中的命令

!# :重復執行第# 條指令
!! :重復執行上一條命令
! !string :執行歷史中以string 開頭的第一條匹配到的命令

命令別名

通過alias命令實現

1 )alias
顯示當前shell 進程所有可用的命令別名
2 )alias NAME='VALUE'
定義別名NAME
3 )unalias NAME,unalias -a
撤銷別名   撤銷所有定義別名

bash特性之基礎

通過命令行定義的命令別名只對當前shell有效,命令別名要想永久生效就需要編譯到配置文件里面。

僅對當前用戶有效:~/.bashrc

對所有用戶有效:/etc/bashrc 

bash特性之基礎

4 )bash進程重新讀取配置文件,文件配置好了要立即生效。

bash特性之基礎

glob通配符

*  :任意長度的任意字符
?:任意單個字符
[] :匹配指定范圍內的任意單個字符

[]  :匹配指定范圍內的任意單個字符
[0-9]
[a-z] :不區分字符大小寫
[A-Z] :大寫字母
[^] :匹配指定范圍外的任意單個字符
[^0-9]

專用字符集合
[[:digit:]]:任意數字,相當于0-9
[[:lower:]]:任意小寫字母
[[:upper:]]: 任意大寫字母
[[:alpha:]]: 任意大小寫字母
[[:alnum:]]:任意數字或字母
[[:space:]]: :
[[:punct:]]:標點符號

bash快捷鍵

Ctrl+l:  清屏,相當于clear 命令;
Ctrl+a:跳轉至命令開始處;
Ctrl+e:跳轉至命令結尾處;
Ctrl+c:取消命令的執行

命令行展開:
~ :展開為用戶的家目錄
~USERNAME :展開為指定用戶的主目錄
{ } :可承載一個以逗號分隔的列表,并將其展開為多個路徑
/tmp/{a,b}=/tmp/a,/tmp/b

bash的輸入輸出及管道

標準輸入:keyboard ,0
標準輸出:monitor ,1
標準錯誤輸出:monitor ,2

標準輸出追加: >>

輸出重定向:COMMAND > NEWPOS, COMMAND >> NEWPO

> :覆蓋重定向,目標文件中的原有內容會被清除;
>>:  追加重定向,新內容會追加至目標文件尾部;

例子:使用輸出重定向將/boot目錄的內容保存到/root/abc文件中 

bash特性之基礎

說明,沒有目標文件會自動創建一個文件

# set -C:禁止將內容覆蓋輸出至已有文件中;
強制覆蓋:>|
# set +C:禁止將內容覆蓋輸出至已有文件中;

標準輸出和錯誤輸出各自指向不同的位置 

bash特性之基礎

像這樣錯誤輸出就不能重定向了,所以要使用錯誤輸出用的符號

2>:  覆蓋重定向錯誤輸出數據流;
2>>:  追加重定向錯誤輸出數據流;

bash特性之基礎

合并正確和錯誤的輸出數據流

COMMAND > /path/to/file.out 2>&1
COMMAND >> /path/to/file.out 2>&1

輸入重定向

tr 命令:轉換或刪除字符
tr [OPTION]... SET1 [SET2]

將/etc/fstab文件的中小寫字母變成大寫 

bash特性之基礎HERE Documentation :<< (可用于生成文檔,并以此為結束的標志) # cat << EOF # cat > /path/to/somefile << EOF

管道

COMMAND1 | COMMAND2 | COMMAND3
注意:最后一個命令會在當前shell 進程的子shell 進程中執行

bash變量

構成:變量名+指向內存空間
賦值:name=value,將此字符串存到所指存儲空間
引用:${name},$name
替換:將變量名出現的位置替換為其所指向的內存空間的數據

強弱類型

靜態語言: 編譯型語言
    強類型(變量)
    事先轉換成可執行格式
    c\c++\JAVA\c#

動態語言: 解釋性語言
    弱類型
    邊解釋邊執行
    asp/asp.net/php/shell/python/perl

Shell: 弱類型編程語言
強類型: 變量在使用前,必須事先聲明,甚至還需要初始:
弱類型: 變量用時聲明,甚至不區分類型:

根據生效范圍分類

本地變量:
生效范圍為當前shell 進程;對當前shell 之外的其它shell 進程,包括當前shell 的子shell 進程均無效;

環境變量:生效范圍為當前shell 進程及其子進程;

局部變量:生效范圍為當前shell 進程中某代碼片斷( 通常指函數);

位置變量:
$1, $2, ... 來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數;

特殊變量:$?, $0, $*, $@, $#

  位置變量
在腳本代碼中調用通過命令行傳遞給腳本的參數
    $1,$2,... :對應調用第1 ,第2 等參數
    $#: 
    它可抓出positional parameter 的數量,即在腳本后面的參數有幾個
    $0 :腳本本身的名字
    $@ :傳給腳本的所有參數
    $*: 
    是以一個單字符串顯示里所有向腳本傳遞的參數,與位置參數不同,參數可超過9個 個
    $$:是腳本運行的當前進程的ID號 號
    $?:顯示最后命令的退出狀態

本地變量:
    1) 變量賦值:name='value', 其中的value 可以為
    a. 可以使直接字串:name="username"
    b. 變量引用:name="$username"
    c. 命令引用:name=`COMMAND` (單反引號)或者
                name=$(COMMAND)
    2) 變量引用:${name},$name
    " ":  弱引用,其中的變量引用會被替代為變量值
    ' ':  強引用,其中的變量引用不會被替換為變量值,而保持原字符串
    3)顯示已經定義的所有變量:
    set
    撤銷變量 unset name

環境變量
    1)變量聲明,賦值
    export name=VALUE
    declare -x name=VALUE (-x: to make NAMEs export)
    2)變量引用:$name,${name}
    3) 顯示所有環境變量:
    export
    env
    printenv
    4) 只讀變量
    readonly name
    declare -r name  (-r :to make NAMEs readonly)

配置文件

按生效范圍劃分,存在兩類:
    全局配置:
    /etc/profile
    /etc/profile.d/*sh
    /etc/bashrc
    個人配置
    ~/.bash_profile
    ~/.bashrc

按功能劃分,存在兩類;
    1)profile 類:為交互式登錄的shell 提供配置
    全局:/etc/profile,/etc/profile.d/*.sh
    個人:~/.bash_profile
    功能:用于定義環境變量
    要執行的命令或腳本
    2)bashrc 類:為非交互式登錄的shell 提供配置
    全局:/etc/bashrc
    個人:~/.bashrc
    功能:定義命令別名
    定義本地變量

讀取順序
    交互式:

    /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc -->/etc/bashrc

    非交互式:

    ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
    編輯配置文件定義的新配置的生效方式:

重新啟動shell 進程;
    使用source 或. 命令進程;
    source Or . filename [arguments]

shell 登錄
    交互式登錄:
        直接通過終端輸入賬號密碼登錄
        使用“ “su - UserName” ” 或“ “su -l UserName” ” 切換的用戶
    非交互式登錄
        su UserName
        圖形界面下打開的終端

shell腳本之基礎練習

1、寫一個腳本計算/etc/passwd文件中的第10個用戶和第20個用戶的id號之和;

bash特性之基礎

2、寫一個腳本計算/etc/rc.d/init.d/functions和/etc/inittab文件的空白行數之和;

bash特性之基礎

利用bash -n 2.sh檢查一下有無語法錯誤

利用bash -x 2.sh查看

bash特性之基礎

3、將當前主機名稱保存至hostName變量中;主機名如果為空,或者為localhost.localdomain,則將其設置為www.yezi.com;

bash特性之基礎

4、寫一腳本,通過命令傳遞兩個文本文件路徑給腳本,計算其空白行數之和;

bash特性之基礎

演示結果如下: 

bash特性之基礎

原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/60352

(0)
N24_yeziN24_yezi
上一篇 2016-11-22 12:50
下一篇 2016-11-22 13:00

相關推薦

  • 文件編輯之神器Sed

    pattern space   //  文本中每行內容都會進入到pattern space中, 如果匹配到了,就會進入到右分支, 如果沒有匹配到,則進入左分支。 hold space  //  就是已經被模式匹配到, 并且編輯后保存的內容就是hold space 中. 默認情況下,當沒有被匹配之后,沒有匹配到…

    Linux干貨 2016-08-15
  • N26 第二周

    本周學習了: linux的目錄層級結構、常見文件類型、bash基本特性、文件的基本管理命令、globbing文件通配符、用戶管理命令 開始作業! 1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。    文件管理命令有:ls,cp,mv,pwd,mkdir,rmdir,touch  …

    Linux干貨 2017-01-12
  • #招聘福利#餓了么/運維核心崗位/上海

    餓了么/運維核心崗位/上海 待遇面談 具體崗位:         應用運維,核心崗位,負責商家訂單系統,有之前的學長帶著成長 要求:     1、1-2年以上工作經驗,     2、熟悉shell和python,    &nbsp…

    Linux干貨 2016-03-18
  • Nginx常用配置詳解

    Nginx常用配置詳解(一) 本文依照nginx官方站點文檔介紹常用的nginx各種常用配置,未經過校對,如有錯誤還望海涵。 Nginx配置通用語法 Nginx最基本的配置語法 配置項名 配置項值1 [配置項值2 ….]; 配置項名位于行首,配置項值與配置項名之間用空格隔開,多個配置項值之間也用空格隔開,每行配置結尾必須加上分號。 #配置項名 配置項值1…

    Linux干貨 2017-06-20
  • 第六周作業

    請詳細總結vim編輯器的使用并完成以下練習題 光標跳轉 字符間跳轉 h或向左箭頭鍵 光標向左移動一個字符 j或向下箭頭鍵 光標向下移動一個字符 k或向上箭頭鍵 光標向上移動一個字符 l或向右箭頭鍵 光標向右移動一個字符 翻屏 Ctrl+f 屏幕向下移動一頁 Ctrl+b 屏幕向上移動一頁 Ctrl+d 屏幕向下移動半頁 Ctrl+u 屏幕向上移動半頁 Ent…

    Linux干貨 2017-01-22
  • 馬哥教育網絡班20期+第二周課程練習

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。  答:文件管理類命令有: touch :創建一個新文件 示例:在/tmp/目錄下創建一個1.log文件 touch /tmp/1.log mv:移動文件  示例:將/etc/fstab文件移至/tmp/目錄中。  mv /etc/fstab /tmp/…

    Linux干貨 2016-06-23

評論列表(1條)

  • luoweiro
    luoweiro 2016-12-01 00:06

    對于配置文件讀取順序,希望自己能通過調試或者讀代碼來掌握,比如加一些echo信息,你在執行的過程中能很明顯看到讀取的文件。

欧美性久久久久