《Linux Shell腳本攻略》讀書(shū)筆記

更多精彩內(nèi)容药有,請(qǐng)關(guān)注微信公眾號(hào):后端技術(shù)小屋

《Linux Shell腳本攻略》是一本適合初學(xué)者系統(tǒng)學(xué)習(xí)Bash Shell的書(shū)籍毅戈,墻裂推薦。以下是我閱讀這本書(shū)的筆記塑陵,希望對(duì)讀者有用嫂沉。

  1. 輸出顏色字符
echo -e "\e[1:41m" # 1表示背景色
  1. echo打印!需轉(zhuǎn)義
echo "hello, bash!"  # 報(bào)錯(cuò)赖淤,因?yàn)?在shell中屬于特殊字符,需要轉(zhuǎn)義
echo "hello, bash\!" # 不報(bào)錯(cuò),!已轉(zhuǎn)義
echo 'hello, bash!'  # 不報(bào)錯(cuò)基公,在單引號(hào)中!無(wú)需轉(zhuǎn)移
  1. printf可用于格式化輸出
# 用法類似C中的`printf`
printf "format"  var1 var2 ...
  1. echo常用選項(xiàng)
echo -n  # 不在字符串末尾添加換行符

echo -e  # 支持轉(zhuǎn)義字符表示
echo -e "\e[id XXXXXX" # 顯示顏色字體斑司,其中id表示背景顏色id
  1. pgrep
# 根據(jù)進(jìn)程名獲取進(jìn)程id
pgrep <進(jìn)程名>           # 相當(dāng)于ps -ef  

cat /proc/$PID/environ  # 查看進(jìn)程運(yùn)行過(guò)程中的環(huán)境變量
  1. 用(())進(jìn)行算數(shù)運(yùn)算
# 計(jì)算兩個(gè)數(shù)之和,有以下兩種寫(xiě)法:
c=$((a+b))   # 賦值方式1
((c = a+b))  # 賦值方式2
  1. 輸出重定向
# 將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到run.log中
./binary >run.log 2>&1 

# 更簡(jiǎn)潔的寫(xiě)法:注意&和>之間不能有空格 
sh mybash.sh &>run.log
  1. 用exec創(chuàng)建文件描述符
exec 4 < log.txt
exec 5 > log.txt
exec 6 >> log.txt
  1. 哈希數(shù)組
# 聲明
declare -a map 

# 定義
${map[key]}=value

# 獲取所有key
${!map[@]}
declare -a HTTP_RESPONSE=(
        [200]="OK"
        [400]="Bad Request"
        [403]="Forbidden"
        [404]="Not Found"
        [405]="Method Not Allowed"
        [500]="Internal Server Error"
)
  1. date獲取時(shí)間
# 顯示秒數(shù)
date +%s 

# 將秒數(shù)轉(zhuǎn)成字符串
date -d @秒數(shù) 

11 tput控制終端光標(biāo)

# 設(shè)置光標(biāo)位置
tput cup 行號(hào)  列號(hào)

# 保存光標(biāo)位置
tput sc 

# 回到保存的光標(biāo)位置
tput rc

# 清除當(dāng)前光標(biāo)到行尾
tput ed
  1. read讀取標(biāo)準(zhǔn)輸入
# 設(shè)置不回顯
read -s
# 設(shè)置超時(shí)時(shí)間 
read -t 
# 設(shè)置讀入字節(jié)數(shù)
read -n 字節(jié)數(shù)
# 設(shè)置提示
read -p "please input passwd"
  1. cat顯示文件內(nèi)容
# 顯示時(shí)忽略多余的空行 
cat -s file

# 顯示每一行的行號(hào)
cat -n file 

# 打印出制表符
cat -T file 
  1. 用find進(jìn)行文件搜索
# 打印符合搜索條件的文件或目錄
find <path> -name XXX  -print 

# 刪除符合條件的文件或目錄
find  <path> -name XXX -exec rm -rf {} \;
  1. xargs:從標(biāo)準(zhǔn)輸入拼裝命令
# 常用用法
cat file | xargs

# 設(shè)定每行的字段數(shù)
cat file | xargs -n 3 

# 以null為換行符
cat file | xargs -0

# 代替命令中位置
cat file | xargs -I{} rm -rf {}
  1. tr: 替換或刪除標(biāo)準(zhǔn)輸入的字符
# 替換 
tr  字符集1 字符集2 

# 刪除
tr -d 字符集

# 補(bǔ)集
tr -d -c 要留下的字符集

# 去除重復(fù)空格
tr -s " "
  1. md5sum: 對(duì)文件生成md5 checksum
# 生成md5值
md5sum file  > file.md5

# 校驗(yàn) 
md5sum -c file.md5
  1. sort: 對(duì)文件內(nèi)容進(jìn)行排序
# 按照字符串排序 
cat file | sort 

#按照數(shù)字排序
cat file | sort -n 

# 逆序排序
cat file | sort -r

# 按照某列排序 
cat file | sort -k 列數(shù) 
  1. dd:復(fù)制并轉(zhuǎn)換文件
# 從/dev/zero生成文件 
dd if=/dev/zero of=data.file bs=100k count=1 
  1. split:分割大文件
# 將文件分成大小為10k的小文件,且小文件命名中后綴長(zhǎng)度為3
split data.file -b 10k -a 3
  1. 字符串分割
# 獲取文件后綴
echo ${filename##*.}

# 獲取文件名
echo ${filename%.*}
  1. 單詞表
cat /usr/share/dict/words
  1. expect: 自動(dòng)化交互式輸入
# expect 
spawn  ./interactive.sh 
expect "Password:"
send "XXX\n"
  1. comm: 求兩個(gè)文件的交集/差集/并集
# 求差集a-b
comm a.txt b.txt -1

# 求a+b并集
comm a.txt b.txt 

# 求ab交集
comm a.txt b.txt -1 -2 
  1. chattr: 修改文件屬性
# 將文件設(shè)置為不可修改
chattr +i file
# 去除不可修改屬性
chattr -i file 
  1. 尋找軟連接
# 方法一
ll -rt | grep -P "^l" | awk '{print $8}'

# 方法二
find . -type l
  1. diff: 比對(duì)兩個(gè)文件(或目錄)
diff -abru 1.txt 2.txt 
diff -abru 1.txt 2.txt > 12.patch 
  1. patch: 對(duì)文件打補(bǔ)丁
patch -p1 1.txt < 12.patch
  1. 命令行當(dāng)前目錄管理
# pushd: 將當(dāng)前目錄壓入棧中
# popd: 從棧中彈出目錄,并作為當(dāng)前目錄
# dirs: 顯示棧中目錄

# 常規(guī)用法
pushd  directory
popd

# 指定目錄
dirs
pushd +N
popd +N
  1. grep: 搜索文件內(nèi)容
# 匹配內(nèi)容顯示顏色
grep --color=auto 

# 統(tǒng)計(jì)匹配行數(shù)
grep -c 

# 顯示匹配行號(hào)
grep -n 

# 顯示匹配字符偏移量
grep -o -b

# 顯示匹配文件列表
grep -l  1.txt 2.txt

# 使用文件匹配
grep -f pattern.txt  file.txt

# 靜默模式
grep -q 

# 定位代碼
grep -R -n 

# 忽略大小寫(xiě)
grep -i 

# 匹配多個(gè)樣式
grep -e pattern1 -e pattern2

# 顯示匹配行之前N行
grep -A 

# 顯示匹配行之后N行
grep -B 

# 顯示匹配行之前之后N行
grep -C 
  1. sed: 文本過(guò)濾和轉(zhuǎn)換工具
# sed "s///" 替換
echo  "hello wolrd" | sed "s/hello/goodbye/"

# sed -i 替換文件內(nèi)容
sed -i 's/hello/goodbye/' 1.txt

# sed 's///g' 替換所有匹配內(nèi)容
echo "thisthisthisthis" | sed 's/this/THIS/g'

# sed 's///ng' 從第n處匹配開(kāi)始替換
echo "thisthisthisthis" | sed 's/this/THIS/2g'

# sed '//d' 刪除匹配行
cat diff.sh | sed '/^$/d' 

# 匹配字符串標(biāo)記
echo this is an example | sed 's/\w\+/[&]/g'

# 捕捉字符串
echo "this is a digit 7 in a numbger" | sed 's/digit \([0-9]\)/\1/'
  1. paste: 合并文件
# 按列合并文件
paste file1 file2
paste file1 file2 -d  ","
  1. rev: 字符串逆序輸出
echo "1234" | rev
  1. tac: 對(duì)多行文件逆序輸出
# 行逆序
seq 1 10 | tac
  1. 設(shè)置命令行編輯模式
set -o vi

推薦閱讀

更多精彩內(nèi)容伐厌,請(qǐng)掃碼關(guān)注微信公眾號(hào):后端技術(shù)小屋晤锹。如果覺(jué)得文章對(duì)你有幫助的話,請(qǐng)多多分享衣陶、轉(zhuǎn)發(fā)拯欧、在看兜材。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烁设,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翩迈,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鉴象,死亡現(xiàn)場(chǎng)離奇詭異腊脱,居然都是意外死亡磕仅,警方通過(guò)查閱死者的電腦和手機(jī)憔辫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門吕漂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吠昭,你說(shuō)我怎么就攤上這事偶洋∈迫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵浴骂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)弯屈,這世上最難降的妖魔是什么窄刘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任簿废,我火速辦了婚禮铸屉,結(jié)果婚禮上钉蒲,老公的妹妹穿的比我還像新娘。我一直安慰自己彻坛,他們只是感情好顷啼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著小压,像睡著了一般线梗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怠益,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天仪搔,我揣著相機(jī)與錄音,去河邊找鬼蜻牢。 笑死烤咧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抢呆。 我是一名探鬼主播煮嫌,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抱虐!你這毒婦竟也來(lái)了昌阿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恳邀,失蹤者是張志新(化名)和其女友劉穎懦冰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谣沸,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刷钢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乳附。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片内地。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伴澄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阱缓,到底是詐尸還是另有隱情非凌,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布茬祷,位于F島的核電站清焕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏祭犯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一滚停、第九天 我趴在偏房一處隱蔽的房頂上張望沃粗。 院中可真熱鬧,春花似錦键畴、人聲如沸最盅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)涡贱。三九已至,卻和暖如春惹想,著一層夾襖步出監(jiān)牢的瞬間问词,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工嘀粱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留激挪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓锋叨,卻偏偏與公主長(zhǎng)得像垄分,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娃磺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容