21 Ocak 2021 Perşembe

bash kodlama - shift built-in komutu

Giriş
Açıklaması şöyle. Script'i çalıştırırken verilen parametreleri - yani positional parameters dizisini - sola kaydırır
$ help shift
shift: shift [n]
    Shift positional parameters.

    Rename the positional parameters $N+1,$N+2 ... to $1,$2 ...  If N is
    not given, it is assumed to be 1.

    Exit Status:
    Returns success unless N is negative or greater than $#.
Örnek
Elimizde şöyle bir scrip olsun.
$ cat argtest.bash 
#!/bin/bash

shift 2

echo "$*"
Çalıştıralım. Çıktı olarak şunu alırız. Positional parameters 2 defa sola kaydırıldığı için "$*" da etkilenir.
$ ./argtest.bash foo bar baz bam boo
baz bam boo
Örnek
Elimizde şöyle bir script olsun

- $# number of positional parameters anlamına gelir. 
- while döngüsü ile positional parameters olduğu müddetçe dönülür.
- $1 ile ilk positional parametre alınır. 
- shift ile positional parameters bir kere sola kaydırılır.
Yani aslında bu script her positional parametre ile bir iş yapar ve hepsini işleyince sonlanır
#!/bin/bash
#
while $# -gt 0 ; do
    file="$1"
    shift
    year="$( echo "$file" | cut -c 14-17)"
    mnth="$( echo "$file" | cut -c 18-19)"
    [[ -d $year/$mnth ]] || mkdir -p $year/$mnth
    echo mv "$file" $year/$mnth
done
Bu script'i çağırmak için şöyle yaparız. Böylece find ile bulunan her dosya, xargs'ın izin verdiği ölçüde topluca yukarıdaki script'e geçilir.
find . -maxdepth 1 -type f -name '*201*' -printf | \
    xargs -r the_script

Hiç yorum yok:

Yorum Gönder