在現代軟體開發和系統管理中,Shell 腳本(Shell Script)是一個極為重要的工具。它們允許我們自動化任務,簡化工作流程,並以更有效率的方式處理各種任務
今天我將介紹 Shell 腳本的基礎語法。
而在後面兩天我會分別介紹如何使用shell script寫迴圈與條件式,並在再隔一天後使用shell script配合openai以在terminal模擬使用chatGPT
提供說明和文檔的特殊行,這些行不會被 Shell執行,僅用於幫助理解腳本的功能和行為。
註解在代碼中起到了關鍵的解釋和記錄作用,使代碼更容易讀取和維護。
# 註解以`#`開頭,後面跟著註解文字
<< EOF
使用EOF接收註釋行
這是第二行
EOF
: << EOF
也可以使用冒號後面接空格使得再加上雙引號
或使用EOF來實現多行註解
PS. 冒號後面加空格為空命令
EOF
#!/path/to/interpreter
#!/this/is/shebang/string
# this is comment
直接像在terminal中打指令就行
command
輸出內容,等價於其他程式語言的print()
E.G. 使用shell script 實作 Hello world
#!/bin/bash
echo "Hello World"
要一次print多行可以用cat配合將多行字串丟到stdin
cat << STDIN
this will apply for the string between two
"STDIN" OR whatever you named it
Shell will put thest text into stdin
and uses cat to print these text
STDIN
輸入內容,等價於python的input()
或其他程式語言的readline()
read Input # 將接下來輸入的值傳給Input變數
KEY=VALUE
$KEY
${arr[n]}
var=$(command)
export KEY=VALUE
一般用於指定是否因為錯誤而退出
exit [exit code]
基本語法: $(( expression ))
預設是直接捨去小數點,因此無法處理小數。若要計算小數需配合nc
使用
$ echo | 'scale=n;((expression))'
+ - * /
: 加減乘除%
: 取餘數var++ var--
: 指定變數後將變數加或減1++var --var
: 將變數加或減1後指定變數! ~
: 位元/邏輯 反轉<< >>
: 位元位移**
: 計算次方& |
: 對數值做位元 或/與 運算&& ||
: 邏輯 或/與expr ? exprTrue : exprFalse
: 三元運算子之所以把這個單獨拿出來講是因為這個能講得真的太多了,總之是一種用來操作變數值的方法,其基本形式是${parameter}
,其中 parameter 是一個 shell 變數或一個陣列參考。
$#
: 傳給shell的參數數量$?
: 上一個指令的狀態碼(exit code)
$$
: 獲取目前process ID$<n>
: 獲取第n個參數值(n=0代表獲取指令名稱)$*
: 所有參數
str=string
${#str}
: 獲取字串長度${#str:offset:[length]"}
: 切割字串
length可為負數(-k): 代表結束位置往前k位
$ echo ${str:2:3} # 等價於echo ${str:2:-1}`
rin
postfix=ing
prefix=str
pattern=rin
replace=ron
${str%postfix}
: 刪除後綴${str#prefix}
: 刪除前綴${str/pattern[/replace]}
: 刪除符合
$ echo ${str/$pattern/$replace}
strong
${str}
https://zhuanlan.zhihu.com/p/54494213
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
https://www.cyut.edu.tw/~ywfan/1109linux/201109chapter11shell%20script.htm
https://myapollo.com.tw/blog/bash-parameter-expansion/