#如何在Bash shell腳本中創建函數
我在寫一個shell腳本來自動化我在工作流程中的事情,以便發布書籍。
我一直在手動操作,通常我很懶,我會重複做同樣的事情,直到自動化,但今天我必須完成一個非常重複的任務,我希望能做對事情,所以我決定寫一個腳本來幫助我和未來的我。
所以我寫了一個腳本,它要進入不同的文件夾並且需要三次調用npx
來執行某些操作,就像這樣:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #!/bin/sh
cd c-handbook
npx honkit pdf ./ ../books/$(basename $PWD).pdf npx honkit epub ./ ../books/$(basename $PWD).epub npx honkit mobi ./ ../books/$(basename $PWD).mobi
cd ..
# 然後不斷重複這個過程
cd css-handbook
npx honkit pdf ./ ../books/$(basename $PWD).pdf npx honkit epub ./ ../books/$(basename $PWD).epub npx honkit mobi ./ ../books/$(basename $PWD).mobi
cd ..
|
npx
部分的操作都是相同的。
所以我把所有的npx
調用封裝到一個函數中,然後我只需調用該函數,像這樣:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #!/bin/sh
generate\_book () { npx honkit pdf ./ ../books/$(basename $PWD).pdf npx honkit epub ./ ../books/$(basename $PWD).epub npx honkit mobi ./ ../books/$(basename $PWD).mobi }
cd c-handbook generate\_book cd ..
cd css-handbook generate\_book cd ..
# ...以此類推
|
然後我在這期間決定創建一個包含所有書本文件夾的數組:
1
| books=( "c-handbook" "css-handbook" "deno-handbook" "es5-to-next" "express-handbook" "html-handbook" "javascript-beginner-handbook" "linux-commands-handbook" "nextjs-handbook" "node-handbook" "python-handbook" "react-beginner-handbook" "svelte-handbook" "vue-handbook" )
|
並且使用循環迭代這個數組:
1 2 3 4 5 6 7 8
| for i in "${books[@]}" do : echo $i cd $i generate\_book cd .. done
|
最終版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #!/bin/sh
books=( "c-handbook" "css-handbook" "deno-handbook" "es5-to-next" "express-handbook" "html-handbook" "javascript-beginner-handbook" "linux-commands-handbook" "nextjs-handbook" "node-handbook" "python-handbook" "react-beginner-handbook" "svelte-handbook" "vue-handbook" )
generate\_book () { npx honkit pdf ./ ../books/$(basename $PWD).pdf npx honkit epub ./ ../books/$(basename $PWD).epub npx honkit mobi ./ ../books/$(basename $PWD).mobi }
for i in "${books[@]}" do : echo $i cd $i generate\_book cd .. done
|
tags: [“bash scripting”, “shell script”, “automation”]