一、認識bash
(一)shell
1、定義:命令解釋器。
將用戶下達的命令解釋給kernel,將kernel的反饋解釋給用戶。
2、使用文字界面的shell的原因
1)通用性
2)便捷迅速
3)可以將多個小工具組合在一起完成任務
4)節省資源
5)方便遠程管理
3、shell的歷史
1)Steven Borne最早創建了bsh
2)Bill Joy創建了csh。並創辦了SUN。csh衍生出tcsh。
3)Bran.J.Fox創建了Bash ——Bourne again shell,Linux上最爲常用的shell。
4)AIX平臺上常用的是ksh
5)使用cat /etc/shells命令,查看linux當前系統下支持的shell
(二)、內建指令與命令用法
1)內建指令不真實存在本機硬盤目錄下,包含在bash內部自身中;使用help查看bash shell的內建命
令。
外建命令指放在本機/bin,/sbin等目錄下的可執行文件,運行外建命令的標準方式是切換到目錄下
通過./ ,或者是以絕對路徑的方式調用命令。
通過$PATH變量可以方便的調用執行命令
2)cd /root
ls
與(cd /root ; ls)(用分號的方式分割)顯示結果一樣;
區別:分兩次執行完畢後,當前目錄已經切換到/root;在括號內一次執行完畢後,當前所在路徑依
然是未切換之前的目錄/etc。當以() ;的方式連接多個命令執行時,是在當前的進程中開
啓了一個子進程,並在子進程中執行的一系列命令(先執行cd /root,然後執行ls),當執
行完畢後,退出子進程,回到原進程,回到初始目錄。
(三)變量
1、變量是shell所記得的指定值
2、聲明變量(給變量賦值)A=1,使用echo $A查看變量A;如果直接echo A將直接輸出A。
$叫做變量的前綴
3、取消聲明變量unsetA
變量名稱中的字母一般是大寫的,後面指定的一般是數字
(四)BASH的只讀變量
只讀變量是由bash shell自動設置的,這些變量是隻讀的,不能被用戶設置。
1、 ? 最新執行的命令的退出狀態。狀態有兩種,分別爲0和1。
代表執行成功或者執行失敗
echo $?的值爲0表示cd /etc/的命令執行成功。
echo $?的值爲1表示cd /fu/的命令執行失敗
寫shell腳本時,使用 $? 判斷前一個指令是否執行成功
2、 _當前啓用中的shell選項標記。
echo $_ :
該結果隨着使用會發生變化的。
當前執行ls ,進程中執行的是/bin/ls --color=tty
如果只執行/bin/ls ,顯示無顏色
3、$ 當前shell的進程(pid)
echo $$ 查看當前進程的編號
4、! 最新的後臺命令的進程id(pid)
5、_ (下劃線) 前一個命令的最後標記
- 當前命令的特殊標記
6、PPID 當前進程父進程的號碼
(五)預賦值變量
預賦值變量由bash shell初始化,不要去重新賦值
1、 BASH_VERSION:當前bash的版本
2、 HOSTNAME :當前機器的DNS主機名
3、 OLDPWD:上一次工作目錄
cd - 查找的就是OLDPWD存放的信息,進入相關目錄
4、 PWD:當前工作目錄
5、 RANDOM:隨機顯示介於0到32767之間的任意整數
6、 SECONDS:自shell啓動以來經過的秒數
(六)環境變量和局部變量
1、局部變量:只在當前進程範圍內有效的變量
2、環境變量:Linux內核允許任何進程定義被稱做環境變量的“名稱-值對”。這些變量是保存在內核
進程中的一部分。無論何時,一個進程啓動另一個進程時(例如,bash shell啓動ls命
令),子進程都會繼承環境變量
3、set:列出當前系統已經定義的shell變量和與shell有關的環境變量
env:只列出環境變量
例如:LANG 程序應該使用的默認語言
(七)、命令行替換
1) ! 前一個命令行
2){} 指定的文本
3) ~username 進入指定用戶的家目錄
cd ~ 默認進入當前用戶的家目錄
4) $ shell的變量
${ …} 環境變量
$(...) 將變量值替換爲括號內命令執行的結果
5) $((…)) 算術運算。只能進行標準的整數運算。例如
6)`…` (反逗點) ,$(…)(括號內爲命令)
運行在子shell中的命令的輸出
例如:在/tmp下創建一個以當前時間命名的文件
(1)touch /tmp/$(date +%Y%m%d).log
(2)touch /tmp/`date +%Y%m%d `.log
7)
* 任意多個字符
? 任意單個字符
[… ] 括號中的字符之一
[^…] 任何一個不在[…]字符
文件系統中匹配的文件名,如通配符等
8)如何轉義或者避免shell將其特殊解釋,bash shell提供三種方法:
(1)轉義 \ 避免下一個字符被shell進行解釋,例如:
(2)""(雙引號) 避免雙引號內除了$、!、空格和` `(反引號)字符以外的其他字符被shell解釋
(3)''(單引號) 避免單引號內的字符被shell解釋
(包括$,!,` `(反引號)特殊字符在內的所有字符)
(八)自定義shell
1、alias不能創建新的命令,但可以創建現有命令的方便用法。
2、執行alias查看當前系統的別名定義
定義alias h
unalias取消別名的定義
(九)Shell腳本
1、Shell腳本本質是Shell命令的羅列
2、Shell腳本中
shell下執行命令方式:
<1> source的方式執行
<2>. 的方式執行
例如:執行vi /etc/init.d/sshd
1)標準的shell腳本一般以#!/開始
注意:一般情況下,#開頭的稱爲註釋行,該行無任何含義,主要寫一些說明性的文字;
但是如果 # 後跟上!表示該腳本以什麼shell來運行的
如跟/bin/bash,表示以/bin/bash來運行
2)shell儘量書寫相應的註釋
3)良好的縮進,可以更方便的閱讀腳本
如寫完開頭先寫個結尾,然後在中間寫入;
儘可能使用變量;
先寫變量的賦值,然後再寫相應的內容;
相應的功能建議形成模塊,製作成爲函數,方便以後調用