Dobra, staram się dostosować do niektórych standardów projektu. Mogę drukować tylko 23 linie na raz. Dostarczałem pliki katalogu do tablicy i wiem, jak je wydrukować.
LIST=(`ls`)
len=${#LIST[*]}
i=0
while [ $i -lt $len ]; do
echo "$i: ${LIST[$i]}"
let i++
done
Próbuję tylko pozwolić na wydrukowanie 23 elementów jednocześnie, a następnie poprosić o wprowadzenie danych użytkownika, aby kontynuować,
read -n1 -rsp $"Press any key to continue n"
Następnie użytkownik wpisze numer pliku, którego chce użyć.
Jakieś pomysły?
Odpowiedzi:
3 dla odpowiedzi № 1Na to wygląda:
LIST=(`ls`)
len=${#LIST[*]}
i=1
while [ $i -lt $len ]
do
echo "$i: ${LIST[$i]}"
if [ `expr $i % 23` == 0 ]
then
read -n1 -rsp $"Press any key to continue n"
fi
let i++
done
tj. warunkujesz umieszczenie w:
if [ `expr $i % 23` == 0 ]
then
. . .
fi
również pamiętać i=1
przyczyna 0 % N
zawsze daje zero
2 dla odpowiedzi nr 2
Możesz użyć tego skryptu BASH:
n=22
arr=(*)
for ((i=0; i<=${#arr[@]}; i+=n)); do
echo "${arr[@]:$i:$n}"
read -n1 -p "Press any key to continue..."
done
0 dla odpowiedzi № 3
Po prostu podziel go na dwie pętle.
Zauważ też, nie używaj ls
w skryptach.
LIST=( * )
len="${#LIST[@]}"
for((i=0; i<$len; i+=23)); do
[[ $i > 1 ]] && read -n1 -rsp $"Press any key to continue n"
for((j=0, k=i; j<23 && k<$len; ++j, ++k)); do
echo "[$i + $j] $k: ${LIST[$k]}"
done
done
0 dla odpowiedzi nr 4
The printf
komenda może być użyta zamiast pętli tutaj.
tmp=( "${LINES[@]}" )
start=1
while (( ${#tmp[@]} -gt 0 )); do
printf "%sn" "${tmp[@]:0:23}" | nl -v $start
tmp=( "${tmp[@]:23}" )
((start+=23))
read -n1 -rsp $"Press any key to continue n"
done
tmp
jest używany, aby uniknąć zniszczenia LINES
niepotrzebnie. The printf
wraz z operatorem rozszerzenia podciągów tmp
służy do drukowania 23 linii na raz, przesyłanych strumieniowo
nl
do numerowania. The start
zmienna może być używana do numerowania linii w sposób ciągły, zamiast drukowania każdej partii jako linii 1–23.