bash shell
命令歷史history
環境變量:
HISTSIZE :命令歷史記錄的條數 HISTFILE :~/.bash_history HISTFILESIZE:
顯示環境變量:echo
環境變量的修改:export
history
history [-c] [-d offset] [n] -c :清空命令歷史 -d offset :刪除指定偏移量的歷史條目 n :顯示歷史中最近的n 條命令 -a:
調用歷史中的命令
!# :重復執行第# 條指令 !! :重復執行上一條命令 ! !string :執行歷史中以string 開頭的第一條匹配到的命令
命令別名
通過alias命令實現
1 )alias 顯示當前shell 進程所有可用的命令別名 2 )alias NAME='VALUE' 定義別名NAME 3 )unalias NAME,unalias -a 撤銷別名 撤銷所有定義別名
通過命令行定義的命令別名只對當前shell有效,命令別名要想永久生效就需要編譯到配置文件里面。
僅對當前用戶有效:~/.bashrc
對所有用戶有效:/etc/bashrc
4 )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文件中
說明,沒有目標文件會自動創建一個文件
# set -C:禁止將內容覆蓋輸出至已有文件中; 強制覆蓋:>| # set +C:禁止將內容覆蓋輸出至已有文件中;
標準輸出和錯誤輸出各自指向不同的位置
像這樣錯誤輸出就不能重定向了,所以要使用錯誤輸出用的符號
2>: 覆蓋重定向錯誤輸出數據流; 2>>: 追加重定向錯誤輸出數據流;
合并正確和錯誤的輸出數據流
COMMAND > /path/to/file.out 2>&1 COMMAND >> /path/to/file.out 2>&1
輸入重定向
tr 命令:轉換或刪除字符 tr [OPTION]... SET1 [SET2]
將/etc/fstab文件的中小寫字母變成大寫
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號之和;
2、寫一個腳本計算/etc/rc.d/init.d/functions和/etc/inittab文件的空白行數之和;
利用bash -n 2.sh檢查一下有無語法錯誤
利用bash -x 2.sh查看
3、將當前主機名稱保存至hostName變量中;主機名如果為空,或者為localhost.localdomain,則將其設置為www.yezi.com;
4、寫一腳本,通過命令傳遞兩個文本文件路徑給腳本,計算其空白行數之和;
演示結果如下:
原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/60352
對于配置文件讀取順序,希望自己能通過調試或者讀代碼來掌握,比如加一些echo信息,你在執行的過程中能很明顯看到讀取的文件。