/

然後不斷重複這個過程

#如何在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”]