İşte, bash scriptlerini sık sık yazıyorum. Danışmanım, aşağıdaki komut örneğine benzer bir şekilde tüm komut dosyasının fonksiyonlara bölünmesini önerdi:
#!/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
Bunu, birkaç yorum ve bazı satır aralıklarında eşit derecede iyi kurulabileceğini düşündüğüm “okunabilirlik” dışında yapmak için herhangi bir neden var mı?
Komut dosyasının daha verimli çalışmasını sağlıyor mu (gerçekten varsa bir tersini beklerdim) veya kodu yukarıda belirtilen okunabilirlik potansiyelinin ötesinde değiştirmeyi kolaylaştırıyor mu? Yoksa bu gerçekten sadece bir stilistik tercih mi?
Lütfen senaryoyu iyi göstermemesine rağmen, asıl komut dosyalarımızdaki fonksiyonların "çalıştırma sırası" çok doğrusal olma eğilimindedir - walk_into_bar
yapılan şeylere bağlıdır i_am_foo
ve do_baz
ayarlanan şeylere göre hareket eder walk_into_bar
- öyleyse rastgele çalıştırma sırasını değiştirebilmek genel olarak yapacağımız bir şey değildir. Örneğin, aniden koymak istemem declare_variables
sonra walk_into_bar
şeyleri kırmak olacağını.
Yukarıdaki betiği nasıl yazacağımın bir örneği:
#!/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
- bu, önemsiz olmayan herhangi bir komut dosyasında inanılmaz derecede önemli olan değişken kapsamı sağlar .
main()
üstüne koyupmain "$@"
çağırmak için altına ekledik. Bu, ilk açtığınızda üst düzey komut dosyası mantığını görmenizi sağlar.