bash程式設計讀書筆記(基礎篇I)
1. && 與 ;
test -e . && echo "Yes"
解釋:&& 和 ";" 的區別是,如果前一個命令不成功,則後面的命令不能執行。而 ";" 不論前面的命令是否執行,後面的命令一定執行。也就是說,";" 和 "||" 功能相同。例如, ls asdfd ; echo "Yes" 和 ls asdfd || echo "Yes" 相同。2. linux下的true和false命令
解釋:再shell下,居然還有true和false這樣的命令。一般在/bin 下。直接返回程式語言中的True和False值,其他什麼都不做。厲害吧!
3. for 迴圈
for fn in *; do
echo "$fn"
done
解釋:"*"在命令列下指代一個目錄下的所有檔案(包括子目錄)。在shell腳本里,指代當前目錄下的所有檔案和子資料夾(和python比較相似)。當然,這裡也可以使用列表,列表值之間用一個空格隔開,例如 for fn in tom dick harry; do。
4. echo "fsadfad" 自動載入換行符
解釋: 不論再命令列還是在shell指令碼下,echo 在沒有加選項的情況下都自動載入一個換行符(\n)。所以,echo "" 就相當於輸入了一個換行符。若要取消換行符,則需要加上 -n。例如, echo -n "dfasdfasdf"。同時,echo也不會直接解釋換行符,如 echo "fasdf\ndfasdf"。如果要echo能分析特殊字元(注意這裡是特殊字元),需要使用 ”-e“。如,echo -e "fasdfsdf\n\t\basdf"。
5. ls -1
ls -1
解釋: 這裡的“1”不是“l”。 增加這個選項的目的是,在每個檔案後面用換行符代替ls輸出檔案之間的空格符。使每一行只有一個檔名。
6. 使用者輸入表示式和PS提示符
PS3="Choose (1-5):"
echo "Choose from the list below."
select name in red green blue yellow magenta
do
break
done
echo "You chose $name."
解釋:PS3是為select提供提示符。而PS1則是shell命令列前面的提示符。如 [[email protected]7. date
date +%N
解釋:date [option] ...[+format]。這裡+%N是format,而且所有format前面都要加上”+“。8. touch
touch filename
解釋:常常用touch生成一個新的檔名。使用過多以至於以為touch就是用於生成新的檔案的。其實不是,touch命令是用來修改檔案的訪問和修改時間到當前時間的,所以如果檔案已經存在,則touch不會覆蓋原有檔案,而只是修改檔案的時間到當前時間而已。9. 獲取子字串
string="this is a substring test"
substring=${string:10:9}
解釋:substring=${string_variable_name:starting_position:length}
。10. 字串替換
alpha="This is a test string in which the word \"test\" is replaced."
beta="${alpha/test/replace}"
beta="${alpha//test/replace}"
解釋:用"replace"替換”test“。如果想替換字串裡所有的”test“,就使用 第三行的表示式。
11. 列表和陣列
array=(red green blue yellow magenta)
len=${#array[*]}
echo "The array has $len members. They are:"
i=0
while [ $i -lt $len ]; do
echo "$i: ${array[$i]}"
let i++
done
list="cricket frog cat dog"
poem="I wanna be a x\n\
A x is what I'd love to be\n\
If I became a x\n\
How happy I would be.\n"
for critter in $list; do
echo -e ${poem//x/$critter}
done
解釋:在bash腳本里,array和list的賦值是有區別的。詳見程式碼。12. bash自帶的正則表示式
x='123-22-3432'
if [[ $x =~ [0-9]{3}-[0-9]{2}-[0-9]{4} ]]
then
echo "right"
else
echo "Wrong"
fi
$ echo {a..z}
for n in {0..5}
do
echo $n
done
解釋:自bash version3之後,bash可以使用正則表示式了。注意空格,賦值沒有空格,比較運算式左右兩邊都需要有空格。正則表示式需要用”[[“。而且不能使用perl中的正則表示式\w、\d和\s。13. ~/.bash_history
解釋:這個檔案是存放前次登入shell(bash)之後執行的命令。而當前執行的命令被被儲存在記憶體中,直到退出shell以後,才會儲存到.bash_history裡。預設是1000條。
14. alias
alias lm='ls -la'
解釋:alias命令設定別名。但是隻在當前的bash下。關閉當前bash後,別名就會消失。15. type
type cd
type ll
type -t ll
type -a ll
解釋:type命令是檢視命令是否是bash內建命令或者外部命令,或者是否是別名。16. 變數和路徑的關係。
解釋:在腳本里,最好在開頭把所有路徑都寫到變數裡。這樣,如果路徑發生變化後,不需要長篇地修改腳本里的路徑地址。
17. 賦值、取值、重置和輸出
myname=John
myname=John\ \'s\ brother
myname="John 's brother"
myname="$name"yes
myname=${name}yes
PATH=$PATH:/home/asdfd/bin
PATH="$PATH":/home/asdfd/bin
PATH=${PATH}:/home/asdfd/bin
echo $myname
export myname
unset myname
解釋:在命令列下,所付的值不需要引號,除非含有空格和不能使用在命令列的特殊字元(或者用跳脫元字)。在腳本里也同樣。所有變數都用 echo 取值,用unset清空變數。在 echo 後的變數需要加 $,在unset和export之後的變數不用 $。
18. 輸出核心的版本號
cd /lib/modules/`uname -r`/kernel
解釋:反單引號內的 uname -r 輸出當前所使用核心的版本號。這是一個非常實用的命令。會在多處使用到。
19. $(commands) 和 `commands`
version=`uname -r`
version=$(uname -r)
解釋:這兩個表達都是一樣的。但是後者比較容易區分。建議使用後者。但是,$( ) 和 ${ } 是完全不同的。不能混淆了。前者內嵌命令,後者內嵌變數。20. 在linux下搜尋文件。find、ls、locate
ls -R /usr/share | grep -i firefox.png
find /usr/share -iname firefox.png
locate firefox.png
解釋:使用第一個,還需要grep做輔助查詢。使用第二個則比較明朗,而且find也可以使用基礎正則表示式。locate功能非常強大,也同樣可以使用基礎正則表示式。locate -r。
21. linux環境變數。檢視命令用env、export、set。
解釋:比較奧常見的環境變數有HOME、PATH、SHELL、HISTSIZE、MAIL、LANG、RANDOM、UID、USER、USERNAME、PWD、HOSTNAME、SSH_AUTH_SOCK、HOSTTYPE、OSTYPE、MACHTYPE。系統內定的變數(不論是否為環境變數)都需要大寫。
22. PS1
解釋:
\d :可顯示出『星期 月 日』的日期格式,如:"Mon Feb 2"\H :完整的主機名稱。舉例來說,鳥哥的練習機為『www.vbird.tsai』
\h :僅取主機名稱在第一個小數點之前的名字,如鳥哥主機則為『www』後面省略
\t :顯示時間,為 24 小時格式的『HH:MM:SS』
\T :顯示時間,為 12 小時格式的『HH:MM:SS』
\A :顯示時間,為 24 小時格式的『HH:MM』
\@ :顯示時間,為 12 小時格式的『am/pm』樣式
\u :目前使用者的帳號名稱,如『root』;
\v :BASH 的版本資訊,如鳥哥的測試主機版本為 3.2.25(1),僅取『3.2』顯示
\w :完整的工作目錄名稱,由根目錄寫起的目錄名稱。但家目錄會以 ~ 取代;
\W :利用 basename 函式取得工作目錄名稱,所以僅會列出最後一個目錄名。
\# :下達的第幾個指令。
\$ :提示字元,如果是 root 時,提示字元為 # ,否則就是 $ 囉~
23. 父程式與子程式,自定義變數和環境變數。export 可以把自定義變數程式設計環境變數讓子程式也可以使用。
username=John
export username
export
解釋:子程式能繼承父程式的環境變數,但是不能繼承父程式的自定義變數。所以需要export宣告一下,設定好後,使用export 檢視。export 後面的變數不需要加 $符號。
資料:
相關推薦
bash程式設計讀書筆記(基礎篇I)
前言: bash不同於其他的語言。它和unix命令緊密結合。所以,精通bash的過程,就是精通unix命令的過程。 1. && 與 ; test -e . && echo "Yes"解釋:&& 和 ";" 的區別是,如果前一個
《C程式設計習慣》讀書筆記(1-6章)
最近在看兩本國人寫的書:C程式設計習慣、Linux C程式設計。越看越發現如獲至寶。有時真覺得,看國外的書,都能將晦澀概念深入淺出解釋通透,而國內的書,能切合國人的習慣來解釋和應用知識。以前只青睞國外的書,這兩本國內的電子書本來只想簡單瀏覽一遍鞏固基礎,現在越看越想做讀書筆記,因為實在是很多看似
python高階程式設計讀書筆記(一)
python高階程式設計讀書筆記(一) python 高階程式設計讀書筆記,記錄一下基礎和高階用法 python2和python3相容處理 使用sys模組使程式python2和python3相容 import sysver=sys.version_info#(ma
Java併發程式設計讀書筆記(一)
前幾天整理電腦檔案的時候,突然發現了之前還在kindle儲存了關於併發程式設計的書,剛好自己在這方面挺薄弱的,故整理一波讀書筆記,繼續加強學習。 1.上下文切換 1.1 時間片分配演算法 時間片是CPU分配給各個執行緒的時間,CPU通過不停地切換執行緒執行,使各個執行緒彷彿是”同
質量免費--讀書筆記(上篇)
推薦序:韋恩.考斯特 克勞士比非常想讓人們知道:質量的定義是符合要求,而不是好;質量的系統是預防,而不是校驗和救火;工作的標準是零缺陷,而不是差不多就好;質量的衡量要用金錢和代價,而不是各種基於妥協的指標。 叢書總序:楊鋼 解讀經典,既是一種榮譽,也是一種責任。 克勞
javascript高階程式設計讀書筆記(1)第 1章 JavaScript 簡介
第 1章 JavaScript 簡介 1.1 JavaScript 簡史 1.2 JavaScript 實現 一個完整的 JavaScript 實現應該由下列三 個不同的部分組成(見圖 1-1)。 核心(ECMAScript) 文件物件模型(DOM)
JavaScript高階程式設計讀書筆記(二)變數 作用域和記憶體
ECMAScript可能包含兩種不同的資料型別,基本資料型別指的是簡單的資料欄位,而引用型別指那些可能由多個指構成的物件。 1、基本資料型別是按值訪問的,因為可以操作儲存在變數中的實際值。 2、引用型別的是按引用訪問的,因為引用型別的值是儲存在記憶體中的物件,ECMAScript不允許直接訪問記憶體中的位
深度學習筆記(基礎篇)——(二)線性單元和梯度下降
在上一篇文章中,我們已經學會了編寫一個簡單的感知器,並用它來實現一個線性分類器。你應該還記得用來訓練感知器的『感知器規則』。然而,我們並沒有關心這個規則是怎麼得到的。本文通過介紹另外一種『感知器』,也就是『線性單元
深度學習筆記(基礎篇)——(一)機器學習與深度學習簡介
機器學習是最基礎的(當下初創公司和研究實驗室的熱點領域之一)。深度學習是非常嶄新和有影響力的前沿領域。 一、定義 1、機器學習 從樣本中學習的智慧程式。是資料驅動的。90年代初提出。強調的是給計算機程式(或者機器)輸入一些資料後,它學習這些資料,而
Git 學習筆記(基礎篇)
1. 命令初識 檢視GIT版本 git --version 在Global級別設定UserName(推薦使用) git config --global user.name ’Freud Kang‘ 在當前目錄界別設定UserName(優先順序高)git config us
PHP與MySQL程式設計讀書筆記(一)
一、PHP基本型別及函式 1. 短標籤 sprintf??? 2. 型別自動裝換 3. 與型別相關的函式 gettype(),settype(),判斷是否為某個型別:is_name() 變數賦
Object-C高階程式設計讀書筆記(5)——Block的物件型別擷取
在之前的部落格中,我們探討了Block對於普通型別資料的擷取,其實現很簡單,就是在Block物件中儲存一份值拷貝。 那麼,對於OC中的物件型別(包括系統自帶型別NSArray,NSString和自定義物件型別),Block又是怎麼儲存的呢?在《OC高階程式設計》書中對於該部
Object-C高階程式設計讀書筆記(3)——Block的變數擷取
之前我們對於Block的定義為 “帶有自動變數值的匿名函式”。通過前面的介紹,知道了Block能夠保持傳入其中的變數的值,即使在Block外部這些傳入的值已經結束了其作用域,但是在Block被呼叫時,
Unix網路程式設計讀書筆記(三)
這一章正式開始網路程式設計的內容,先將書中的示例編寫如下: 首先是伺服器端: #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include &l
讀書筆記(第五周)之魔方的創新
有著 而是 大牛 不一定 自己的 發展 有用 pos 哪些 讀書筆記(第五周) 讀《構建之法》之魔方的創新 在不苛求比喻精準的前提下,“魔方的創新” 這篇小故事寫得確實有意思,也很能反映創新過程中一系列的問題。首先,通過幾個大致的故事節點來總結一下情節的發展,再來逐一展開拓
原創:聊Python小白如何系統自學成為Python大牛(基礎篇一)上
Python Python學習 Python開發 Python自學 原創:聊Python小白如何系統自學成為Python大牛(基礎篇一)上 支持原創 本文章,由頭條py柯西發表,禁止轉載,希望大家支持原創 歡迎大家點擊復制鏈接看原文https://www.toutiao.com/i654581
資料結構與演算法JavaScript描述讀書筆記(js實現樹)
js定義二叉查詢樹 //建立建構函式建立節點 function Node(data){ this.data = data; this.left = null; this.right = null; } function tree(){ this.root = nu
資料結構與演算法JavaScript描述讀書筆記(高階排序演算法)
希爾排序 在插入排序的基礎上,只不過比較的步長不一樣,插入排序比較步長一直是1(即一個一個的比較)。希爾排序的步長第一次一般設定為gap=Math.floor(arr.length/2),之後依次將步長設定為gap/2,直到步長變為1,這個時候徹底轉化成插入排 測試時間普通排序演算法1
資料結構與演算法JavaScript描述讀書筆記(基本排序演算法)
前提準備 //自動生成陣列的函式,n:整數個數,數字在l-r之間 function setData(n,l,r){ var dataStore = []; for(var i=0;i<n;i++){ dataStore[i] = Math.floor(
老男孩shell實戰讀書筆記(1-5章節)
老男孩shell教程(1-5章節) 關於檢視系統變數命令 set: 輸出所有的變數,包括全域性變數和區域性變數 env:只顯示全域性變數 declare:輸出所有的變數、函式、整數和已經匯出(export)的變數 刪除環境變數 unset 變數名 關於設定(全域性)環境變數的三種方法 expo