如何在Bash shell脚本中创建一个函数

89 阅读1分钟

我正在写一个shell脚本,以使我的工作流程中的事情自动化,以出版书籍。

我是手动做事的,一般来说,我很懒,可以在自动化之前一次又一次地重复做事,但今天我不得不做一个非常重复的任务,我想把事情做对,所以我就决定写一个脚本来帮助我和未来的我。

所以我写了一个shell脚本,它要进入不同的文件夹,必须调用3次 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 ..

# and repeat this endlessly

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 ..

# ...and so on

然后当我在那里的时候,我还决定为所有的图书文件夹创建一个数组。

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