《Linux Shell腳本攻略》讀書筆記1
- Shell是系統(tǒng)用戶界面,提供用戶與內(nèi)核進(jìn)行交互操作的一種接口掘而。Shell是一種命令解釋器,它解釋用戶輸入的命令并把他們送到內(nèi)核
- Bash是目前多數(shù)GNU/Linux系統(tǒng)默認(rèn)的shell環(huán)境
- sudo (Super user do) sudo <command><arguments>
- shebang:
#!
(sharp/hash:#
; bang:!
) - 當(dāng)啟動(dòng)shell時(shí)员寇,它一開始會(huì)執(zhí)行一組命令來定義諸如提示文本昧穿、顏色等各類設(shè)置。這組命令來自位于用戶主目錄中的腳本文件~/.bashrc署尤。
- 在Bash中耙替,每個(gè)命令或是命令序列是通過使用分號(hào)或換行符來分隔的。
-
echo
是用于終端打印的基本命令:-
echo xxx
不能打印;
-
echo 'xxx'
不能打印變量 -
echo “xxx”
不能打印特殊字符曹体,需要轉(zhuǎn)義
-
-
printf
格式化輸出俗扇,需要手動(dòng)添加換行,%-5s:-
-
: 左對(duì)齊 -
5
: 輸入最小寬度 -
s
: 輸出字符串
-
- echo "
\e[1;31m
xxxx\e[0m
":\e[1;31
將顏色設(shè)為紅色箕别,\e[0m
將顏色重新置回铜幽。 - 在bash中,每個(gè)變量的值都是字符串
- 在一些特殊的變量會(huì)被shell環(huán)境和操作系統(tǒng)環(huán)境用來出儲(chǔ)存一些特別的值串稀,這些變量就被稱為環(huán)境變量除抛。
cat /proc/$PID/environ
- pgrep命令獲得進(jìn)程id:
pgrep gedit # 獲取gegit的進(jìn)程ID
-
tr
(translate)命令,簡(jiǎn)化sed工具:- 主要功能:①替換②刪除母截。
tr '\0' '\n' #用'\n'替換'\0'
- tr [option] ["string1"] ["string2"] < file:
- 默認(rèn)選項(xiàng) - 替換操作
- c - 將string1字符的補(bǔ)集替換為string2
- d - 刪除
- s - 重復(fù)出現(xiàn)到忽,只保留一個(gè)
- 變量賦值
var=value
- 如果value不包含任何空白字符(例如空格),那么它就不需要使用引號(hào)進(jìn)行引用清寇,否則必須使用單引號(hào)或雙引號(hào)
- 注意=兩遍不要留空格: val=value是賦值喘漏,val==value是相等操作
- 環(huán)境變量是未在當(dāng)前進(jìn)程中定義,而從父進(jìn)程中繼承而來的變量华烟。
- export命令用來設(shè)置環(huán)境變量翩迈。
- PATH通常定義在
/etc/environment
或/etc/profile
或~/.bashrc
中。 -
${#變量}
是變量長(zhǎng)度 -
$SHELL
or$0
是所用shell -
UID
是一個(gè)重要的環(huán)境變量盔夜,可以用來檢查當(dāng)前腳本是以超級(jí)用戶還是以普通用戶的身份運(yùn)行的负饲。 -
PS1
環(huán)境變量用來定制提示文本。默認(rèn)的shell提示文本是在文件~/.bashrc中的某一行比吭。 chsh -s /bin/zsh #修改SHELL
- eval 首先掃描名兩行進(jìn)行所有的置換绽族,然后再執(zhí)行該命令。
prepend() { [ -d "$2" ] && eval $1=\"$2$\{$1:+':'\$$1\}\" && export $1 ; }
其中衩藤,${parameter:+expression}
如果parameter有值且不為空吧慢,則使用expression的值 - 反引號(hào)``和$()功能相似。解釋命令行赏表,開子shell執(zhí)行命令检诗,然后用結(jié)果替換匈仗。反引號(hào)以及其中的命令。
- 在Bash shell環(huán)境中逢慌,可以要利用let悠轩、(( ))和[ ]執(zhí)行基本的算術(shù)操作,在進(jìn)行高級(jí)操作時(shí)攻泼,expr和bc這兩個(gè)工具也會(huì)非常有用火架。
- bc是一個(gè)用于數(shù)學(xué)運(yùn)算的高級(jí)工具。
-
echo "scale=2;3/8" | bc
#0.37 scale設(shè)定小數(shù)精度 -
echo "obase=2;$no"| bc
obase結(jié)果進(jìn)制為2進(jìn)制 -
echo "obase=10;ibase=2;$no | bc"
將2進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制
-