Shell Cheatsheet

變量

變量定義

var="hello"
echo $var ${var}-name

位置參數(shù)

param desc
$0 script file
$1 .. $n script params
$# param count
$@ $* all params
$? most recent ret code
$! most recent background job pid

$@ vs $*

# script.sh
function main() {
   echo 'I got ' $# ' args'
}
main $*
main $@
main "$*"
main "$@"

# output
$ sh script.sh 'a b c' d e
I got 5 args
I got 5 args
I got 1 args
I got 3 args

條件控制

注意項

  • [ -z "" ] 前后都有空格
  • [ "1" \> "" ] 因為 [ 是命令,后面跟著的都是它的參數(shù),所以不要少加空格铅鲤,且為了防止 > 被解析為重定向符號要轉義
  • [[ "1" > "" ]] 因為 [[ ]] 是 bash 的語法結構,所以不需要轉義

邏輯測試

param desc
(e) ([ -n "hello" ])
not e [ ! -n "hello" ] 等價于 ! [ -n "" ]
e1 and e2 [ -n "" -a -n "" ] 等價于 [ -n "" ] && [ -n "" ]
e1 or e2 [ -n "" -o -n "" ] 等價于 [ -n "" ] [ -n "" ]

文件測試

param desc
-d FILE is directory
-f FILE is file
-e FILE file or dir exists
-x FILE excutable
f1 -nt f2 f1 newer then f2
f1 -ot f2 f1 older then f2
... man test

字符串測試

param desc
-z str len(str) == 0
-n str len(str) > 0
s1 = s2 s1 == s2
s1 != s2 s1 != s2
s1 > s2 s1 > s2
!(s1 < s2) s1 >= s2
s1 < s2 s1 < s2
!(s1 > s2) s1 <= s2
... man test

數(shù)字測試

param desc
n1 -eq n2 algebraically ==
n1 -ne n2 algebraically !=
n1 -gt n2 algebraically >
n1 -ge n2 algebraically >=
n1 -lt n2 algebraically <
n1 -le n2 algebraically <=
... man test

直接測試

$ test expression && echo yes
$ [ expression ] && echo yes
$ [[ expression ]] && echo yes

條件判斷

if [[ expression ]]; then
  # ...
elif [[ expression ]]; then
  # ...
else
  # ...
fi

條件選擇

case VAR in
  var1) cmd1 ;;
  var2) cmd2 ;;
  # ...
  *) cmd ;;
esac

循環(huán)控制

for

for var in (list); do
  # ...
  break
  continue
done

for ((i=1, j=10; i <= 10; i++, j--)); do
  # ...
done

while

while ((1)); do
  # ...
  break
  continue
done

while true; do
  # ...
done

until

until [[ -n "" ]]; do
  # ...
  break
  continue
done

select DAY in Mon Tue Wed Thu Fri Sat Sun; do
case $DAY in
Mon) echo "Today is Monday" ;;
Tue) echo "Today is Tuesday" ;;
# ...
*) echo "Unkown day, stop" && break ;;
esac
done


# 函數(shù)

```shell
function foo() {
  local var=0
  return $var
} 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末捣郊,一起剝皮案震驚了整個濱河市帆啃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虐秋,老刑警劉巖榕茧,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異客给,居然都是意外死亡用押,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門靶剑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜻拨,“玉大人,你說我怎么就攤上這事桩引《兴希” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵坑匠,是天一觀的道長血崭。 經常有香客問我,道長厘灼,這世上最難降的妖魔是什么夹纫? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮设凹,結果婚禮上舰讹,老公的妹妹穿的比我還像新娘。我一直安慰自己闪朱,他們只是感情好月匣,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奋姿,像睡著了一般锄开。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胀蛮,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天院刁,我揣著相機與錄音,去河邊找鬼粪狼。 笑死退腥,一個胖子當著我的面吹牛任岸,可吹牛的內容都是我干的。 我是一名探鬼主播狡刘,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼享潜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嗅蔬?” 一聲冷哼從身側響起剑按,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澜术,沒想到半個月后艺蝴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鸟废,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年猜敢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盒延。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡缩擂,死狀恐怖,靈堂內的尸體忽然破棺而出添寺,到底是詐尸還是另有隱情胯盯,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布计露,位于F島的核電站博脑,受9級特大地震影響,放射性物質發(fā)生泄漏票罐。R本人自食惡果不足惜趋厉,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胶坠。 院中可真熱鬧,春花似錦繁堡、人聲如沸沈善。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闻牡。三九已至,卻和暖如春绳矩,著一層夾襖步出監(jiān)牢的瞬間罩润,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工翼馆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留割以,地道東北人金度。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像严沥,于是被迫代替她去往敵國和親猜极。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容