bash特性之命令hash
之前我們講過用戶在執行一個命令的時候bash會遍歷環境變量$PATH中所有路徑來查找執行文件。而命令hash是用來緩存之前用戶使用過的命令下次執行的時候直接搜索hash緩存來減少對$PATH變量中路徑的遍歷次數,從而提高系統運行效率
hash:hash命令 hash:列出 -d COMMAND:刪除 -r:清空
bash特性之變量
變量簡單的來說就是讓某一個特定的字符串來代表不固定的內容,以一個簡單的字眼來代替一個復雜或者容易變動的數據
例如:y=x+z 那么這里y就是變量,x+z就是變量的值
變量賦值:name=VALUE
變量的設置和規則
1.變量與變量內容以=相鏈接.
2等號兩邊不能直接鏈接空格。
3.變量名稱只能是英文字母與數字,但是不能以數字開頭頁不能使用橫須的保留字段,例如if,else,then,while等
4.“”里面的變量名會被替換成變量值,''里面變量名則不會被替換成變量值
5.可以使用轉義符\來講特殊符號(如[enter],$,\,空格符….等)編程一般字符
6.命令的引用可以使用反單引號`命令`或者$(命令)來引用
7.通常系統變量使用大寫字母表示.自行設置的變量用小寫字母以方便判斷
8.查看變量:set
9.撤銷變量:unset NAME
bash變量的類型
1.本地變量:其作用域僅為當前shell
2.環境變量:作用域為當前shell及其子進程
環境變量可以幫我們達到很多功能,包括主文件夾的變換,執行文件的路徑,提示符的顯示等等。常見的有HOME,SHELL,HISYSIZE,MALL,UIS,PWD,PATH,LANG…..
3.局部變量:作用域僅為某部分代碼片段
4.位置參數變量:當執行腳本的shell進程傳遞的參數
5.特殊變量:shell內置的有特殊功用的變量;如:$?
bash的環境配置文件
當我們進入bash的時候就會有一堆有用的變量,這些變量都是由環境變量的配置文件提供的,bash在啟動時就會依次讀取到這些文件。這些配置文件按功能分為兩類
profile類:
作用范圍:對全局所有的用戶有效
/etc/profile;/etc/profile.d/*.sh
對用戶個人有效
~/.bahs_profile
功能:1.定義環境變量;2.運行腳本命令
bashrc類:
作用范圍:全局所有用戶:
/etc/bashrc
個人用戶:
~/.bashrc
功用:定義本地變量;定義命令別名
注意:只有管理員可修改全局配置文件
bash特性之多命令執行
在某些時候我們希望可以一次性執行多個命令的話可以在命令中間加;隔開,那么bash會在運行完一個命令之后繼續運行下一個命令
COMAND1;COMAND2;COMAND3;……
邏輯運算
第一種方式:布爾運算:
運算數:真;(表示為yrue,yes,on,1)
假;(false,no,off,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 非假=真
第二種方式:
EXRPESSINO1 -a EXRPESSINO2 EXRPESSINO1 -o EXRPESSINO2
!EXRPESSINO
短路法則:
COMAND1 && COMAND2
COMAND1為假,則COMAND2不會再執行;其結果一定為假;否則COMAND1為真,則COMAND2必須執行
COMAND1 || COMAND2
COMAND1為真,則COMAND 不會再執行;其結果一定為真;否則COMAND1為假,則COMAND2必須執行 實例:id $username || useradd $usernam
用戶是否存在 存在為真,不存在未假,即存在則不執行,不存在就必須執行
shell腳本編程
shell腳本是利用shell的功能所寫的一個“程序”這個程序是純文本文件,將一些shell命令與shell語法想結合,搭配正則表達式,管道命令,IO重定向等功能來達到我們想要處理的目的
shell腳本與其他的編程語言根據其運行方式可以分為兩類
編譯式:是有源代碼經過編譯器編譯成程序文件,JAVA等為編譯式
解釋型:源代碼是由解釋器一遍解釋一遍執行,shell屬于解釋型
以編程模型來分類:
過程式編程語言:是以指令為中心來組織代碼,數據是服務于代碼的,代表為C,bash
面向對象式編程語言:以數據為中心來組織代碼,圍繞數據來組織指令,代表c++,python
shell腳本編程是過程式編程,邊解釋邊運行,依賴于外部程序文件
如何寫shell腳本
腳本文件的第一行,定格給出解釋器路徑,用來指明解釋執行當前腳本的解釋器程序文件比較常見的解釋器有:
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
我們這里會使用到文本編輯器nano,nano是一個比較簡單的全屏文本編輯器,使用namo NAME 就可以打開一個文件
運行腳本
兩種方式:1.賦予執行權限,并直接運行此程序文件;2.直接運行解釋器,并將腳本以命令行參數傳遞給解釋器
shell腳本是運行在shell的子進程中
注意:腳本中除了頂格的#之外,余下的所有已#開頭的都會被視作注釋信息而忽略
練習1:寫一個腳本,實現如下功能; (1) 顯示/etc目錄下所有以大寫p或小寫p開頭的文件或目錄本身; #!/bin/bash
ls -dl /etc/[pP]*
(2) 顯示/var目錄下的所有文件或目錄本身,并將顯示結果中的小寫字母轉換為大寫后顯示; #!/bin/bash
ls -a | tr [a-z] [A-Z]
(3) 創建臨時文件/tmp/myfile.XXXX;
#/bin/bash
mktenp /tmp/myfule.xxxxx
原創文章,作者:N24-執念,如若轉載,請注明出處:http://www.www58058.com/64252