更多精彩內容,請關注微信公眾號:后端技術小屋
《Linux Shell腳本攻略》是一本適合初學者系統學習Bash Shell的書籍,墻裂推薦,以下是我閱讀這本書的筆記,希望對讀者有用,
- 輸出顏色字符
echo -e "\e[1:41m" # 1表示背景色
- echo列印!需轉義
echo "hello, bash!" # 報錯,因為!在shell中屬于特殊字符,需要轉義
echo "hello, bash\!" # 不報錯,!已轉義
echo 'hello, bash!' # 不報錯,在單引號中!無需轉移
- printf可用于格式化輸出
# 用法類似C中的`printf`
printf "format" var1 var2 ...
- echo常用選項
echo -n # 不在字串末尾添加換行符
echo -e # 支持轉義字符表示
echo -e "\e[id XXXXXX" # 顯示顏色字體,其中id表示背景顏色id
- pgrep
# 根據行程名獲取行程id
pgrep <行程名> # 相當于ps -ef
cat /proc/$PID/environ # 查看行程運行程序中的環境變數
- 用(())進行算數運算
# 計算兩個數之和,有以下兩種寫法:
c=$((a+b)) # 賦值方式1
((c = a+b)) # 賦值方式2
- 輸出重定向
# 將標準輸出和標準錯誤輸出重定向到run.log中
./binary >run.log 2>&1
# 更簡潔的寫法:注意&和>之間不能有空格
sh mybash.sh &>run.log
- 用exec創建檔案描述符
exec 4 < log.txt
exec 5 > log.txt
exec 6 >> log.txt
- 哈希陣列
# 宣告
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"
)
- date獲取時間
# 顯示秒數
date +%s
# 將秒數轉成字串
date -d @秒數
11 tput控制終端游標
# 設定游標位置
tput cup 行號 列號
# 保存游標位置
tput sc
# 回到保存的游標位置
tput rc
# 清除當前游標到行尾
tput ed
- read讀取標準輸入
# 設定不回顯
read -s
# 設定超時時間
read -t
# 設定讀入位元組數
read -n 位元組數
# 設定提示
read -p "please input passwd"
- cat顯示檔案內容
# 顯示時忽略多余的空行
cat -s file
# 顯示每一行的行號
cat -n file
# 列印出制表符
cat -T file
- 用find進行檔案搜索
# 列印符合搜索條件的檔案或目錄
find <path> -name XXX -print
# 洗掉符合條件的檔案或目錄
find <path> -name XXX -exec rm -rf {} \;
- xargs:從標準輸入拼裝命令
# 常用用法
cat file | xargs
# 設定每行的欄位數
cat file | xargs -n 3
# 以null為換行符
cat file | xargs -0
# 代替命令中位置
cat file | xargs -I{} rm -rf {}
- tr: 替換或洗掉標準輸入的字符
# 替換
tr 字符集1 字符集2
# 洗掉
tr -d 字符集
# 補集
tr -d -c 要留下的字符集
# 去除重復空格
tr -s " "
- md5sum: 對檔案生成md5 checksum
# 生成md5值
md5sum file > file.md5
# 校驗
md5sum -c file.md5
- sort: 對檔案內容進行排序
# 按照字串排序
cat file | sort
#按照數字排序
cat file | sort -n
# 逆序排序
cat file | sort -r
# 按照某列排序
cat file | sort -k 列數
- dd:復制并轉換檔案
# 從/dev/zero生成檔案
dd if=/dev/zero of=data.file bs=100k count=1
- split:分割大檔案
# 將檔案分成大小為10k的小檔案,且小檔案命名中后綴長度為3
split data.file -b 10k -a 3
- 字串分割
# 獲取檔案后綴
echo ${filename##*.}
# 獲取檔案名
echo ${filename%.*}
- 單詞表
cat /usr/share/dict/words
- expect: 自動化互動式輸入
# expect
spawn ./interactive.sh
expect "Password:"
send "XXX\n"
- comm: 求兩個檔案的交集/差集/并集
# 求差集a-b
comm a.txt b.txt -1
# 求a+b并集
comm a.txt b.txt
# 求ab交集
comm a.txt b.txt -1 -2
- chattr: 修改檔案屬性
# 將檔案設定為不可修改
chattr +i file
# 去除不可修改屬性
chattr -i file
- 尋找軟連接
# 方法一
ll -rt | grep -P "^l" | awk '{print $8}'
# 方法二
find . -type l
- diff: 比對兩個檔案(或目錄)
diff -abru 1.txt 2.txt
diff -abru 1.txt 2.txt > 12.patch
- patch: 對檔案打補丁
patch -p1 1.txt < 12.patch
- 命令列當前目錄管理
# pushd: 將當前目錄壓入堆疊中
# popd: 從堆疊中彈出目錄,并作為當前目錄
# dirs: 顯示堆疊中目錄
# 常規用法
pushd directory
popd
# 指定目錄
dirs
pushd +N
popd +N
- grep: 搜索檔案內容
# 匹配內容顯示顏色
grep --color=auto
# 統計匹配行數
grep -c
# 顯示匹配行號
grep -n
# 顯示匹配字符偏移量
grep -o -b
# 顯示匹配檔案串列
grep -l 1.txt 2.txt
# 使用檔案匹配
grep -f pattern.txt file.txt
# 靜默模式
grep -q
# 定位代碼
grep -R -n
# 忽略大小寫
grep -i
# 匹配多個樣式
grep -e pattern1 -e pattern2
# 顯示匹配行之前N行
grep -A
# 顯示匹配行之后N行
grep -B
# 顯示匹配行之前之后N行
grep -C
- sed: 文本過濾和轉換工具
# sed "s///" 替換
echo "hello wolrd" | sed "s/hello/goodbye/"
# sed -i 替換檔案內容
sed -i 's/hello/goodbye/' 1.txt
# sed 's///g' 替換所有匹配內容
echo "thisthisthisthis" | sed 's/this/THIS/g'
# sed 's///ng' 從第n處匹配開始替換
echo "thisthisthisthis" | sed 's/this/THIS/2g'
# sed '//d' 洗掉匹配行
cat diff.sh | sed '/^$/d'
# 匹配字串標記
echo this is an example | sed 's/\w\+/[&]/g'
# 捕捉字串
echo "this is a digit 7 in a numbger" | sed 's/digit \([0-9]\)/\1/'
- paste: 合并檔案
# 按列合并檔案
paste file1 file2
paste file1 file2 -d ","
- rev: 字串逆序輸出
echo "1234" | rev
- tac: 對多行檔案逆序輸出
# 行逆序
seq 1 10 | tac
- 設定命令列編輯模式
set -o vi
推薦閱讀
- STL原始碼分析--vector
- STL原始碼分析--hashtable
- STL原始碼分析--algorithm
- zookeeper client原理總結
- redis實作分布式鎖
- 推薦幾個好用的效率神器
- C/C++關鍵字之restrict
- 現代C++之右值語意
- Python亂碼九問
更多精彩內容,請掃碼關注微信公眾號:后端技術小屋,如果覺得文章對你有幫助的話,請多多分享、轉發、在看,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/264359.html
標籤:其他
下一篇:30分鐘入門Vim

