Tarihsel olarak, testkomut ilk önce vardı (en azından 1979'da Unix Yedinci Baskı'ya kadar ). Bu operatörler kullanılır =ve !=dizeleri karşılaştırmak ve -eq, -ne, -ltsayıları karşılaştırma vb. Örneğin test 0 = 00, yanlıştır, ancak test 0 -eq 00doğrudur. Bu sözdizimi seçildi neden bilmiyorum ama kullanmaktan kaçının olabilir <ve >kabuk yönlendirme operatörler olarak çözümlenen ederdik. testKomut birkaç yıl sonra başka bir sözdizimi var: [ … ]eşdeğerdir test ….
[[ … ]]Ki içinde koşullu sözdizimi, <ve >alıntı olmaksızın işleme olarak da kullanılabilir, ksh, daha sonra ilave edildi. Geriye dönük uyumluluğu korudu [ … ], bu yüzden aynı işleçleri kullandı, ancak dizeleri karşılaştırmak için <ve ekledi >(örneğin, [[ 9 > 10 ]]ancak [[ 9 -lt 10 ]]). Daha fazla bilgi için, bkz. Tek veya çift köşeli ayraç kullanma - bash
Aritmetik ifadeler de 1980'lerde bir zamanlar Korn kabuğundakitest komutadan sonra geldi . Unix çevrelerinde çok popüler olan C dilinin sözdizimini takip ettiler. Böylece C'nin operatörlerini kullandılar: eşitlik için, daha az veya eşit için, vb.==<=
Unix Seventh Edition'ın aritmetik ifadeleri yoktu, ancak karşılaştırma işleçleri de dahil olmak üzere tamsayı işlemleri için C benzeri bir sözdizimi uygulayan exprkomuta sahipti. Bir kabuk komut dosyası olarak, karakterler <ve >vardı mesela, kabuğundan onları korumak için teklif edilecek if expr 1 \< 2; …eşdeğerdir if test 1 -lt 2; …. Kabuğa aritmetik ifadelerin eklenmesi, expreskimiş olanların çoğunu kullandı , bu yüzden bugün iyi bilinmemektedir.
Bir sh komut dosyasında genellikle bir tamsayı değeri hesaplamak ve [ … ]tamsayıları karşılaştırmak için aritmetik ifadeler kullanırsınız .
if [ "$((x + y))" -lt "$z" ]; then …
Ksh, bash veya zsh komut dosyalarında ((…))her ikisi için de kullanabilirsiniz .
if ((x + y < z)); then …
[[ … ]]Eğer tamsayılar başka şeyler karıştığı conditionals kullanmak istiyorsanız formu yararlıdır.
= != < <= > >=dizeleri karşılaştırır .1 -eq 01but1 != 01and8 -lt 42but8 > 42