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
下一篇 2016-11-22

相關推薦

  • vsftpd基于mysql存儲認證(centos7)

    (1)首先開發包組和服務器平平臺開發包組 (2)yum安裝需要的依賴包 (3)編譯安裝pam_mysql模塊 (4)配置mysql,并添加mysql中的vsftpd進程用戶,且創建vsftpd數據庫,并將vsftpd數據庫授權給vsftpd用戶,且創建vsftpd.users表,并在表中添加用戶tom (5)創建vsftpd要上傳和下載的URL (6)創建基…

    Linux干貨 2016-10-15
  • 文本處理

    1 、查出分區空間使用率的最大百分比值   2、查出用戶UID最大值的用戶名、UID及shell類型   3、查出/tmp的權限,以數字方式顯示   4、統計當前連接本機的每個遠程主機IP的連接數,并按從大到小排序 5、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式) 6、顯示/etc/passwd文…

    Linux干貨 2016-08-08
  • 日志收集工具EFK之fluent部署手稿

    Edit EFK fluent部署安裝 1. 環境介紹 Centos 6.5 64bit 2. 安裝 td-agent介紹 fluent 考慮到靈活可擴展性,使用Ruby編寫,部分功能考慮性能使用C語言編寫。普通用戶安裝操作Ruby daemon還是有一定難度的??紤]到flunt的上手難度, fluent專門發布了穩定發布包,就也是所謂的td-agent. …

    Linux干貨 2016-03-24
  • Linux獲取命令幫助方法全攬

    Linux獲取命令幫助方法全攬 Linux命令分類 內置命令:shell程序自帶的命令 外部命令:獨立的可執行程序,在linux系統中存在與命令名稱相同的可執行文件,需要shell程序通過環境變量解析到對應的可執行性文件后才可執行 可使用type COMMAND查看命令的分類 獲取幫助的方法 內置命令獲取幫助 命令格式:help COMMAND 外部命令獲取…

    Linux干貨 2017-07-02
  • 搭建私有CA服務器

       CA(Certificate Authority)證書頒發機構主要負責證書的頒發、管理以及歸檔和吊銷。證書內包含了擁有證書者的姓名、地址、電子郵件帳號、公鑰、證書有效期、發放證書的CA、CA的數字簽名等信息。證書主要有三大功能:加密、簽名、身份驗證。下面來看一下自建CA的過程    一、建立CA服務器 &nbsp…

    Linux干貨 2016-03-14
  • 馬哥教育網絡班21期-第五周課程練習

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; # grep -E "^[[::space]]\+.*" /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;…

    Linux干貨 2016-08-08

評論列表(1條)

  • luoweiro
    luoweiro 2016-12-01 00:06

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

欧美性久久久久