Hangi kabuğu kullanmayı planladığından bahsetmiyorsun, bu yüzden kabuklarda oldukça standart şeyler olsa da bash farz edeceğim.
Dosya Argümanları
Argümanlara değişkenler aracılığıyla erişilebilir $1
- $n
( $0
programı çalıştırmak için kullanılan komutu döndürür). Diyelim ki cat
aralarında sınırlayıcı olan az sayıda dosya içeren bir komut dosyası var :
#!/usr/bin/env bash
#
# Parameters:
# 1: string delimiter between arguments 2-n
# 2-n: file(s) to cat out
for arg in ${@:2} # $@ is the array of arguments, ${@:2} slices it starting at 2.
do
cat $arg
echo $1
done
Bu durumda, bir dosya adını cat'a aktarıyoruz. Ancak, dosyadaki verileri dönüştürmek istiyorsanız (açıkça yazıp yeniden yazmadan), dosya içeriğini bir değişkende de saklayabilirsiniz:
file_contents=$(cat $filename)
[...do some stuff...]
echo $file_contents >> $new_filename
Stdin'den oku
Stdin'den okuduğumda, kabukların çoğu oldukça standart bir read
yapıya sahip olsa da, istemlerin nasıl belirtildiği konusunda farklılıklar vardır (en azından).
Bash adam sayfası yerleşikleri bir oldukça özlü açıklaması var read
, ama ben tercih Bash Hackerlar sayfasını.
basitçe:
read var_name
Birden Çok Değişken
Birden fazla değişken ayarlamak için, sadece şunlara birden fazla parametre adı sağlayın read
:
read var1 var2 var3
read
daha sonra stdin'den bir kelimeyi her değişkene yerleştirir, kalan tüm kelimeleri son değişkene atar.
λ read var1 var2 var3
thing1 thing2 thing3 thing4 thing5
λ echo $var1; echo $var2; echo $var3
thing1
thing2
thing3 thing4 thing5
Değişkenlerden daha az kelime girilirse, kalan değişkenler boştur (önceden ayarlanmış olsa bile):
λ read var1 var2 var3
thing1 thing2
λ echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
istemleri
Bilgi -p
istemi için sık sık bayrak kullanıyorum :
read -p "Enter filename: " filename
Not: ZSH ve KSH (ve belki diğerleri) bilgi istemleri için farklı bir sözdizimi kullanır:
read "filename?Enter filename: " # Everything following the '?' is the prompt
Varsayılan değerler
Bu gerçekten bir read
oyun değil , ama ben çok fazla kullanıyorum read
. Örneğin:
read -p "Y/[N]: " reply
reply=${reply:-N}
Temel olarak, değişken (cevap) varsa, kendini döndür, ancak boşsa, aşağıdaki parametreyi ("N") geri getir.