← man/system_admin
getopt — man getopt — 80×24
ugur@toprak:~/man/system_admin$man getopt
Bölüm 1 Sistem Yönetimi

getopt

komut seçeneklerini ayrıştır

Sözdizimi

      args=`getopt secenek_dizesi $*` ; errcode=$?; set -- $args

Açıklama

getopt aracı, kabuk (shell) yordamları tarafından kolayca ayrıştırılabilmesi amacıyla komut satırlarındaki seçenekleri parçalara ayırmak ve geçerli seçenekleri kontrol etmek için kullanılır. secenek_dizesi (optstring), tanınan seçenek harflerinin bir dizesidir (bkz. getopt(3)); bir harfi iki nokta üst üste işareti takip ediyorsa, bu seçeneğin kendisinden boşlukla ayrılmış veya ayrılmamış olabilen bir argüman alması beklenir. Özel seçenek ‘--’ seçeneklerin sonunu sınırlamak için kullanılır. getopt aracı seçeneklerin sonundaki argümanlara ‘--’ yerleştirir veya açıkça kullanıldığında bunu tanır. Kabuk argümanları ($1 $2 ...) her seçeneğin önünde bir ‘-’ olacak ve her seçenek kendi kabuk argümanı içinde bulunacak şekilde sıfırlanır; her seçenek argümanı da kendi kabuk argümanı içinde yer alır.

Çıkış Durumu

getopt aracı, secenek_dizesi içinde yer almayan bir seçenek harfiyle karşılaştığında standart hata çıktısına (stderr) bir hata mesajı yazdırır ve >0 durum koduyla çıkar.

Örnekler

     Aşağıdaki kod parçası, -a ve -b seçeneklerini alabilen ve bir argüman gerektiren -o seçeneğini kabul eden bir komutun argümanlarının nasıl işlenebileceğini gösterir.

	   args=`getopt abo: $*`
	   # getopt abo: "$@" kullanmamalısınız, çünkü bu işlem argümanları
	   # aşağıdaki set komutunun yaptığından farklı şekilde ayrıştıracaktır.
	   if [ $? -ne 0 ]; then
		   echo 'Kullanım: ...'
		   exit 2
	   fi
	   set -- $args
	   # set komutunu ters tırnaklı getopt ile doğrudan kullanamazsınız,
	   # çünkü getopt'tan dönen çıkış kodu, tanım gereği sıfır olan set'in
	   # çıkış koduyla gölgelenecektir.
	   while :; do
		   case "$1" in
		   -a|-b)
			   echo "bayrak $1 ayarlandı"; sflags="${1#-}$sflags"
			   shift
			   ;;
		   -o)
			   echo "oarg değeri: '$2'"; oarg="$2"
			   shift; shift
			   ;;
		   --)
			   shift; break
			   ;;
		   esac
	   done
	   echo "tek karakterlik bayraklar: '$sflags'"
	   echo "oarg değeri: '$oarg'"

     Bu kod, aşağıdakilerden herhangi birini eşdeğer olarak kabul edecektir:

	   cmd -aoarg file1 file2
	   cmd -a -o arg file1 file2
	   cmd -oarg -a file1 file2
	   cmd -a -oarg -- file1 file2

Ayrıca Bakınız

getopts(1), sh(1), getopt(3)

Geçmiş

Bell Labs kılavuz sayfasından yola çıkılarak Henry Spencer tarafından yazılmıştır. Davranışının Bell sürümü ile aynı olduğu düşünülmektedir. Örnek, FreeBSD sürüm 3.2 ve 4.0'da değiştirilmiştir.

Hatalar

getopt(3) hangi hatalara sahipse onlar geçerlidir.

Boşluk karakterleri veya yerleşik kabuk özel karakterleri (shell metacharacters) içeren argümanlar genellikle bozulmadan korunamaz; bunu düzeltmek kolay görünse de öyle değildir. getopt'u veya bu kılavuz sayfasındaki örneği düzeltmeye çalışan kişiler, bu dosyanın FreeBSD'deki geçmişini kontrol etmelidir.

Geçersiz bir seçeneğe yönelik hata mesajının, getopt'un çağrıldığı kabuk yordamı yerine doğrudan getopt'tan geldiği tanımlanır; bunu düzeltmek de zordur.

Kabuk seçeneklerinin değerlerini bozmadan argümanları ayarlamak için set komutunu kullanmanın tam olarak en iyi yolu, bir kabuk sürümünden diğerine değişiklik gösterir.

Her kabuk betiği (shellscript), argümanları az çok doğru bir şekilde ayrıştırmak için karmaşık kodlar barındırmak zorundadır (burada sunulan örnek gibi). getopt benzeri daha iyi bir araç, karmaşıklığın büyük bir kısmını araca taşıyarak istemci kabuk betiklerini daha basit tutabilir.

macOS 26.4 1 Ağustos 2015 macOS 26.4