職場では、bashスクリプトを頻繁に記述しています。私のスーパーバイザーは、次の例のように、スクリプト全体を機能に分割することを提案しています。
#!/bin/bash
# Configure variables
declare_variables() {
noun=geese
count=three
}
# Announce something
i_am_foo() {
echo "I am foo"
sleep 0.5
echo "hear me roar!"
}
# Tell a joke
walk_into_bar() {
echo "So these ${count} ${noun} walk into a bar..."
}
# Emulate a pendulum clock for a bit
do_baz() {
for i in {1..6}; do
expr $i % 2 >/dev/null && echo "tick" || echo "tock"
sleep 1
done
}
# Establish run order
main() {
declare_variables
i_am_foo
walk_into_bar
do_baz
}
main
「読みやすさ」以外にこれを行う理由はありますか?これは、いくつかのコメントと行間隔で等しく確立できると思いますか?
それはスクリプトをより効率的に実行しますか(実際には反対のことを期待します)、または前述の可読性の可能性を超えてコードを簡単に変更できるようにしますか?それとも本当に単なる文体的な好みですか?
スクリプトはそれをうまく実証していませんが、実際のスクリプトの関数の「実行順序」は非常に線形になる傾向があることに注意してください- 行っwalk_into_bar
たものに依存しi_am_foo
、do_baz
設定されたものに作用しますwalk_into_bar
-実行順序を任意に交換できることは、私たちが一般的に行っていることではありません。たとえば、突然のdeclare_variables
後walk_into_bar
にを置きたくない場合、それが問題を引き起こします。
上記のスクリプトをどのように作成するかの例を次に示します。
#!/bin/bash
# Configure variables
noun=geese
count=three
# Announce something
echo "I am foo"
sleep 0.5
echo "hear me roar!"
# Tell a joke
echo "So these ${count} ${noun} walk into a bar..."
# Emulate a pendulum clock for a bit
for i in {1..6}; do
expr $i % 2 >/dev/null && echo "tick" || echo "tock"
sleep 1
done
local
-これは、重要な変数のスコープを提供します。
main()
では、上部に配置main "$@"
し、下部に追加して呼び出します。これにより、高レベルのスクリプトロジックを開いたときに最初に見ることができます。