#如何在Bash shell腳本中創建函數
我在寫一個shell腳本來自動化我在工作流程中的事情,以便發布書籍。
我一直在手動操作,通常我很懶,我會重複做同樣的事情,直到自動化,但今天我必須完成一個非常重複的任務,我希望能做對事情,所以我決定寫一個腳本來幫助我和未來的我。
所以我寫了一個腳本,它要進入不同的文件夾並且需要三次調用npx
來執行某些操作,就像這樣:
#!/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
調用封裝到一個函數中,然後我只需調用該函數,像這樣:
#!/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 ..
然後我在這期間決定創建一個包含所有書本文件夾的數組:
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" )
並且使用循環迭代這個數組:
for i in "${books[@]}"
do
:
echo $i
cd $i
generate\_book
cd ..
done
最終版本:
#!/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