Wpis z mikrobloga

#!/bin/bash

LOCATION=~/test/
DATE=$(date +'%d-%m_%H:%M')
FILENAME=Screenshot+$DATE
LASTNUMBER=XX
FILENAME=d--a

MAX () {
if [ $1 -gt $2 ]
then
echo $1
else
echo $2
fi
}

record=0

ls ${LOCATION} |
while read file;
do
# isolate number, from file name
number=${file:${#filename}}
number=${number::${#lastnumber}}
record=$(MAX $number $record)
echo "current record: $record"
done

echo "biggest number: $record"

output:
current record: 01
current record: 02
current record: 03
current record: 04
current record: 05
current record: 06
current record: 07
current record: 08
current record: 09
current record: 10
current record: 11
biggest number: 0

ktos mi powie co tu sie odwala?
Mam pliki w formacie:
d--a01.png
d--a02.png
.
.
.

i chce znaleść dupę z największym numerem na koncu
#programowanie #bash #linux #naukaprogramowania
  • 24
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

via Wykop Mobilny (Android)
  • 2
@RedveKoronny: pozatym zamiast pętli po ls lepiej robić mapfile i pętlę po liście

mapfile -t files < <(find "$location" -type file)
for file in "${files[@]}"; do
:
done
  • Odpowiedz
@RedveKoronny: zrobiłeś tam | (pipe), więc cała jego zawartość - u Ciebie pętla - została wykonana w podpowłoce i tam zmienna się zmieniała normalnie. Natomiast po "done" wylazłeś z tej powłoki, i tam zmienna record jest nieznana, stąd pokazuje się zero.
  • Odpowiedz
via Wykop Mobilny (Android)
  • 2
@RedveKoronny: trzeba czytać dokumentujące, a nie sarkać, że coś jest głupie ( ͡° ͜ʖ ͡°)
W pipe każda komenda to inny proces i w zależności czy masz ustawiony lastpipe czy nie to albo pierwszą albo ostnia komenda w pipe będzie się wykonywać w pierwotnej powłoce.
  • Odpowiedz