İlerleme Göstergesi Düşen kart destesi (Bash)


5

Düşen bir kart destesi şeklinde bir ilerleme göstergesi kodladım (karımın fikri).

Henüz nihai haliyle değil. İşte kod:

vdeck="| | | | | "
hdeck[1]="__ | | | |"
hdeck[2]="__ __ | | |"
hdeck[3]="__ __ __ | |"
hdeck[4]="__ __ __ __ |"
hdeck[5]="__ __ __ __ __"

while true
do
    clear
    echo -n -e "\r$vdeck"
    sleep 0.8

    for i in 1 2 3 4 5
    do
        echo -n -e "\r${hdeck[$i]}"
        sleep 0.2
    done
    clear
done

Bir hdeck dizisine sahip olmadan ve aynı efekti elde etmeden bu kodu optimize etmek mümkün mü? Artan '|' 'iyi değil' hdeck 'dizi kombinasyonlarını arttırmak anlamına gelir.

Yanıtlar:


3

Böyle bir şey mi?

#!/bin/bash
LEN=5
echo 'start';
for (( i=0; i<((${LEN}+1)); i++ )); do
echo -ne '\r' 
        for (( j=0; j<${i}; j++ )); do
                 echo -n '_'
        done
        for (( j=${i}; j<${LEN}; j++ )); do
                 echo -n '|'
        done
sleep 0.5
done
echo -e '\ndone'

Bir kenara, değişkenleri kısaca "{1..10}" sözdiziminde "i" için kullanmanız gerekmiyor mu? Kodu biraz kısaltan işe yarayan "i için {1 .. $ {LEN}}" i alamadım.
Tzarium

1

Peki, neden tek bir dizgene (tümü '|') sahip değilsiniz ve (ilk) '|' harfini değiştirmeyi deneyin. Her döngüde '-' ile?

Dize değiştirme örneği:

stringZ=abcABC123ABCabc

echo ${stringZ/abc/xyz}       # xyzABC123ABCabc
                              # Replaces first match of 'abc' with 'xyz'.

Bu şekilde, hdeck dizisi olmadan çoklu dizgelere ihtiyacınız yoktur.

Bunu dene:

deck="| | | | | "

while true
do
    clear
    echo -n -e "\r$deck"
    sleep 0.8

    for ((i=1; i<=`expr length $deck`; i++))
    do
        echo -n -e "\r${deck/|/-}"
        sleep 0.2
    done
    clear
done

Yukarıdaki betiği yapmalı .. Bu sadece bir gösterge betiği ve kendim çalıştırmadım .. Lütfen yazım hatalarını kontrol edin ..

Bash'de string manipülasyonu hakkında daha fazla bilgi burada - http://tldp.org/LDP/abs/html/string-manipulation.html


Tzarium'un yukarıdaki kodu benimkinden daha zarif
Vinay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.