18 Ağustos 2020 Salı

bash kodlama - read built-in komutu

Giriş
Açıklaması şöyle.
Read a line from the standard input and split it into fields.
Tek bir satır okur. Eğer birden fazla değişken verilirse satırı kelimelere böler.

Built-in olduğunu görmek için şöyle yaparız.
$ type read
read is a shell builtin
bash ve zsh Farkı
Açıklaması şöyle
BTW, there are lots more differences between read in bash vs zsh (and vs other shells). The POSIX standard only specifies the -r option; everything else is a nonstandard addition, and any similarity between different shells' extensions should be considered a happy accident.
Exit Status
Açıklaması şöyle. EOF olunca 0'dan farklı bir sonuç döner. Böylece while gibi döngüde kullanılabilir.
The exit status is zero, unless end-of-file is encountered
Örnek - while
Şöyle yaparız
while IFS= read -r line; do
  ...
done < text-file
Kullanım
Örnek
Değişkenin başına $ karakteri konulmaz. Şu kod yanlış.
read $input
Örnek
Şöyle yaparız.
echo "Are you there?"  
read input  

if [ $input == yes ]; then  
    echo "Hello!"  
elif [ $input == no ]]; then  
    echo "Are you sure?"  
else  
    echo "Please answer yes or no."  
fi  
Örnek
Dosyada satır satır okumak için şöyle yaparız.
f=myfile.dat

while read line; do
  echo $line
  ...
done < $f > newfile.dat
-a seçeneği
Şöyle yaparız.
IFS=, read -a fields <<< "1,2,3,4,5"
for i in "${fields[@]}"; do echo "$i"; done
-n seçeneği
Okunacak karakter sayısını belirtir
Örnek
Şöyle yaparız
echo "characters" | while IFS= read -d '' -n 1 a; do printf %s "$a-"; done
Çıktı olarak şunu alırız
c-h-a-r-a-c-t-e-r-s-
-p seçeneği
prompt anlamına gelir.
Örnek
Şöyle yaparız.
#!/bin/bash
read -p "Please enter a filename:" filename
-r seçeneği
Açıklaması şöyle.
-r    do not allow backslashes to escape any characters
Açıklaması şöyle
It's very rare that you would want to use read without -r.
Örnek
Dosyadaki her satır şöyle olsun.
file1.fastq.gz file2.fastq.gz foo
Şöyle yaparız.
while read -r file1 file2 trash; do
  something with "$file1" and "$file2"
done < /path/to/input_file
-s seçeneği
silent anlamına gelir. Açıklaması şöyle. Bu seçenek yerine "stty -echo" da kullanılabilir.
-s    do not echo input coming from a terminal
Örnek 
Şöyle yaparız.
read -p 'Password? ' -s password
echo Your password is "$password".


Hiç yorum yok:

Yorum Gönder