UNIX komut kabuğu. Kabuk dilleri (sh, bash, ksh ve diğerleri)

  • 29.07.2019

=====================================================

LABORATUVAR ÇALIŞMASI No.1 (yürütme süresi - 3 saat)

Konu: "Girişkabuk

1. Kabuğa giriş

Kabuk, kullanıcı ile Unix çekirdeği arasındaki arabirimi sağlayan bir komut yorumlayıcısıdır (komut işlemcisi). Solaris, üç ana komut işlemcisi sunar:

    Varsayılan Bourne kabuğu / sbin / sh'dir

    C kabuğu - / bin / csh

    Korn Komut İşlemcisi - ./bin/ksh

Solaris, listelenenlere ek olarak ek mermiler sağlar:

    J kabuğu - / sbin / jsh

    Kısıtlanmış Korn l - / usr /bin / rsh

    T kabuğu - / usr / bin / tcsh

    GNU Bourne Yeniden - / usr / bin / bash

    Z kabuğu - usr / bin / zsh

Kabuğun seçimi kişisel bir tercih meselesidir.

2. Çalıştırma komutları

Unix'teki herhangi bir komut, çalıştırılan programın (komut) adından, seçeneklerden (anahtarlar) ve programa aktarılan argümanlardan oluşur. Komut satırı ayırıcısı boşluklar veya sekmelerdir.

Misal

$ / bin / ping –t 10 192.168.2.13

tartışma

kabuk istemi

Çalıştırılabilir dosyanın yolu programı başlatırken belirtilmezse, işletim sistemi PATH değişkeninde belirtilen dizinleri sırayla tarar. Görüntülenen dizinde bu isimde bir program varsa, yürütmek için başlatılır. PATH değişkeninde belirtilmediği sürece mevcut çalışma dizini programlar aranırken aranmaz.

! Güvenlik nedenleriyle, yöneticinin kullanıcının mevcut dizinini ve ev (kişisel) dizinlerini PATH değişkenine eklemesi önerilmez.

Örnekleri

Programı tam yol ile çalıştırmak

$ / usr/ yerel/ çöp Kutusu/ benim_ program

Bir programı bir üst (üst) dizinden çalıştırmak

$ ../ yerel/ çöp Kutusu/ benim_ program

Mevcut dizinden bir program çalıştırma

$ ./ benim_ program

3. Kabuktaki özel karakterler

Bazı kabuk karakterlerinin özel anlamları vardır.

3.1. Dosya adı oluşturma şablonları

? (soru işareti)ilk nokta dışında herhangi bir karakterle eşleşir;

(köşeli parantez)bir karakter grubu tanımlayın (gruptan bir karakter seçilir);

- (Eksi işareti")geçerli karakterlerin aralığını tanımlar;

! (ünlem işareti)sonraki karakter grubunu reddeder;

* (yıldız işareti)ilk nokta dışında herhangi bir sayıda karakterle eşleşir.

3.2. G / Ç yeniden yönlendirme karakterleri

< - giriş yeniden yönlendirme;

>, >> - çıktı yeniden yönlendirme;

2>, 2>> - hata mesajlarının yeniden yönlendirilmesi;

| - konveyör.

3.3. İkame sembolleri

$ değişken_adıq - değişken ikame;

$ (komut)veya "komut" -komut ikamesi;

~ bir tilde ikamesidir.

4. Ara

Dosyaları ve dizinleri hızlı bir şekilde bulmak için, daha derin bir komut için whereis komutunu kullanın, find komutunu kullanın (belirtilen gereksinimleri karşılayan dosyaları arayın;).

5. Metin düzenleyici vi

Vi metin düzenleyici, herhangi bir Unix'te bulunan çok yönlü bir düzenleyicidir. Metin dosyalarını düzenlemeye ek olarak vi, komut satırı düzenlemesi için de kullanılabilir.

Vi editörünün 3 çalışma modu vardır (şekle bakın).

Vi düzenleyiciye girme

Vi'den çıkılıyor

İlk konumdaki ”~” (tilde) simgesi boş (var olmayan) dosya satırlarını gösterir.

Ana mod, komutların bir dizi tuşa basılarak girildiği komut modudur (ekranda hiçbir şekilde görüntülenmezler).

Komut modunda metin içinde hareket etmek oklar ve tuşlar kullanılarak gerçekleştirilir. (sola), (aşağı), (yukarı), (sağa).

Bazı vi komutları tabloda listelenmiştir.

Mevcut satırı sil

Mevcut satırı panoya kopyala

İmlecin Y hareketi

İmleç işaretli karakterleri tamponla

Alta yeni bir satır ekle

Üste yeni bir satır ekle

İmleçten sonra ekleme

Mevcut satırdan sonra ekleme

İmleçten önce ekle

Geçerli satırın önüne ekle

Bir karakteri klavye karakteriyle değiştirme

Panodan metin yapıştırma

. (nokta)

Yürütülen son komutu tekrarlayın

Son komutu geri al

Mevcut satırdaki tüm değişiklikleri geri al

İmlecin üstündeki bir karakteri silme

Giriş modunda, klavyede yazılan tüm karakterler metne eklenir.

Son satır modunda, girdiğiniz komut ekranın son satırında görüntülenir.

6. Yardım

Unix, komutların amacını, sözdizimini, kullanım örneklerini vb. İçeren elektronik bir kılavuza sahiptir. Kılavuz, man komutuyla çağrılır:

7. Temel kabuk komutları

dSÖ- aktif kullanıcılar hakkındaki bilgilerin görüntülenmesi;

eko- terminale mesaj çıkışı;

afiş- büyük harflerle terminale mesaj çıkışı;

adam- çevrimiçi yardım sistemini aramak;

tarih - güncel tarihin görüntülenmesi;

yazmak- başka bir kullanıcının terminaline mesajlar göndermek;

mesg- diğer kullanıcılardan gelen mesajların görüntülenmesi izni / yasağı;

posta- posta gönderme / alma;

haberler- sistemin haberleri ile tanışma;

pwd- geçerli çalışma dizininin mutlak yol adını çıktılar;

cD- çalışma dizininin değiştirilmesi;

ls- dizinin içeriği hakkındaki bilgilerin görüntülenmesi;

mkdir- bir dizin oluşturmak;

rmdir- bir dizinin silinmesi;

dokunma- dosyanın zaman damgasını güncelleme;

cp- dosyalar kopyalanıyor;

kedi- dosyaların içeriğini birleştirmek ve görüntülemek;

daha- dosya içeriğinin sayfa sayfa görüntülenmesi.

mv - bir dosyanın taşınması veya yeniden adlandırılması;

rm- bir dosyanın silinmesi;

takma ad- bir takma ad oluşturma;

tr- karakter dönüşümü;

çıkış- akımın tamamlanması kabuk-a;

tişört- boru hattı sonuçlarının kesilmesi;

kesmek - bir satırdan alan seçimi;

grep- kalıba göre arama;

pr- belirli bir formatta standart çıktıya dosya çıktısı;

çeşit- sıralama;

baş- dosyanın ilk satırlarının çıktısı;

kuyruk- dosyanın son satırlarının çıktısı;

tuvalet- karakter, kelime ve satır sayısını saymak;

okumak, eko - değişkenlerin değerlerini okuma ve görüntüleme;

Ölçek - bir ifadenin değerinin değerlendirilmesi;

ifade, İzin Vermek- aritmetik ifadelerin hesaplanması;

8. Kabuk-programlar

Kabuk, bir komut dizisini bir dosyaya kaydetmenize ve ardından yürütmenize izin verir. Bir dosyayı yürütmek üzere bir kabuk programı ile çalıştırmak için, yürütme hakkını erişim haklarına eklemeniz gerekir:

$ chmod + x program_file_name

Kabuk programlarında dallanma operatörler kullanılarak düzenlenir:

eğer-ise-değilse

Döngü operatörleri:

EGZERSİZLER

1. Aşağıdaki komutlardan hangisi ekranda bir karşılama mesajı gösterecektir? Ne değildir? Neden?

$ echo merhaba

$ Echo merhaba

$ echo MERHABA, DÜNYA

$ afiş merhaba

$ BANNER MERHABA, DÜNYA

2. Komutları kullanarak birkaç satırdan bir mesaj çıktısı alın ekove afiş.

3. Tarihi iki satırda yazın: ilk gün, ay, yıl, ikinci geçerli zamanda, çıktıya bir yorum sağlayın.

4. Komutu kullanarak yazmak, konsola bir mesaj gönderin. Aynı anda birden fazla terminale mesaj gönderin.

5. Komutu kullanarak mesg, terminalinize mesajlara izin verilip verilmediğini belirleyin. Mesajları reddet. Birisi size mesaj göndermeye çalışırsa sistem nasıl tepki verir?

6. Adınızı tanımlayın EV-dizin.

7. Komutları kullanarak / export / home ile başlayarak dizin alt ağacına göz atın cd, lsve pwd.

8 .. EV-dizin alt dizinler gibi:

meyveler çiçekler

elma armut üzüm gül menekşe karahindiba

koyu yeşil

9. içinde olmak EV-dizin, tek bir komut satırı kullanarak aşağıdaki alt dizinleri oluşturun:

A / B / C / D

10. içinde olmak EV-dizin, dizinin tüm alt dizinlerini sil A.

11. İçinde olmak EV-directory, bir dosya oluştur macintosh mevcut dizinde elmave dizinlerde birden çok dosya karanlıkve yeşil... Dizine girin fdüşürür... Dizinde olmak fdüşürür, tüm alt dizinleri kopyala fruitsiçlerindeki dosyalarla birlikte özel olarak oluşturulmuş bir dizine sepet.

12. Katalogda yer almak fdüşürür, dizini sil fruits.

13. Dosyayı okuyun .profilkomutları kullanmak kedive daha.

14. Oluşturun EV-dizin metin dosyası dosyamkomutu kullanarak birden çok satır kedi.Bir metin dosyası oluşturun MyFile,aynı satırları ona yazarak. Kaç dosya aldın? Neden?

15. Görev 2.2'de oluşturulan dosyanın içeriğini görüntüleyin dosyam... Dosyayı kopyalayın dosyamdosyalamak mikopi.Her iki dosyanın içeriğini görüntüleyin.

16. Dosyayı taşıyın mikopikataloğa Çiçekler.

17. İçinde olmak EV-directory, bir bağlantı oluştur mybağlantıdosya başına mikopidizinde bulunur Çiçekler... Bağlantı dosyasını görüntüleyin.

18. Dosyaya bir satır ekleyin benimbağlantı. Dosyalardan hangisi benimbağlantıbenimkopyabenimdosya değişti? Neden?

19. Hangi komutu kullanarak bağlantı sayısını belirleyebilirsiniz? Dosyalar için bağlantı sayısını belirleyin benimbağlantıbenimkopyabenimdosya.

Dosyayı silin mikopi... Bağlantı dosyasına ne oldu? Dosyalar için bağlantı sayısını belirleyin benimbağlantıbenimdosya.

20. Bir takma ad oluşturun dirgeçerli dizinin içeriğini genişletilmiş biçimde yazdırır.

21. Oturumunuzu sonlandırın ve yeniden kaydolun. Takma ad çalışıyor mu dir? Takma adın oturumlar arasında "kaybolmasını" önlemek için ne yapılmalıdır?

22. Bir takma ad oluşturun nokta, çalışma dizininde nokta ile başlayan dosyaların bir listesini yazdırır.

23. Komutu kullanarak dokunma, yeni bir dizinde aynı anda aşağıdaki adlara sahip dosyalar oluşturun:

Şablon a* 5 dosya eşleşti;

Şablon * a4 dosyaya karşılık geldi;

Şablon ??.? 3 dosyaya karşılık geldi;

Şablon * aa* eşleşen 2 dosya;

Şablon ??? 1 dosya eşleşti.

24. Aşağıdakileri yapmak için hangi komutu girmelisiniz:

a) noktayla başlayarak tüm dosyaların adlarını yazdırın;

b) ile biten tüm dosyaların adlarını yazdırın ".Txt";

c) kelimesini içeren tüm dosyaların adlarını görüntüleyin "Benim";

25. Bir dosyadaki tüm küçük harfleri büyük harflerle, diğerinde - tümü büyük harfleri küçük olanlarla değiştirin. Dosyadan yinelenen boşlukları çıkarın.

26. adlı bir dosya oluşturun * ... Yalnızca bu dosyayı silin. Dosya adları oluşturmak için karakterleri kullanırken dikkatli olun!

27. Adında boşluk olan bir dosya oluşturun. Böyle bir dosyayı nasıl silebilirim?

28. Komutu kullanma kediorijinal içeriği aynı dosyanın sonuna ekleyerek dosyanın içeriğini iki katına çıkarın. Dizine git Çiçekler... Dosyaya ekle spisokdizin içeriklerinin listesi Çiçekler.Dosya içeriğini görüntüleyin

29. Komutla okumaya çalışın kedivar olmayan dosya. Sistemin tepkisi nedir? Hata mesajlarını bir dosyaya yönlendirerek aynısını yapın hatam... Ekranda ne görüyorsunuz? Dosyayı görüntüleyin hatam.

30. Yalnızca şu anda çalışma dizininizde bulunan dosyaların adlarını ve izinlerini listelemek için bir boru hattı oluşturun.

31. Oluşturulan boru hattını, liste bir dosyaya kaydedilecek şekilde değiştirin spisokSenin EV-dizin ve listedeki yalnızca dosya sayısı görüntülendi.

32. Dosyanın içeriğini görüntüleyin / etc / passwdkullanıcı adı alanına göre sıralanmıştır.

33. Bir takma ad oluşturun günlükaçık, sistemde oturum açan kullanıcıların adlarının alfabetik bir listesini görüntüleyecektir.

33. Komutları kullanarak güncel tarihi ekranda büyük harflerle görüntüleyin tarihve afiş.

34. Değişkene atayın BENKayıt adınız. Başka birini çalıştır kabuk... Bu değişkeni görüyor musunuz? Onu daha önce görmek için ne yapılması gerekiyor? kabuk? Değişkenin değerini değiştirin BENoluşturulmuş kabuk... Baştan çık kabuk. Orijinalde bu değişkenin değerini görün kabuk... Sonucu açıklayın.

35. Yaz kabuk-program bilgikullanıcının bir ad, adres, tarih, ay ve doğum yılı girmesini ve bu bilgileri ters sırada görüntülemesini isteyen

36. Yaz kabuk-Bir numara girmenizi isteyen bir program, girilen sayıyı bir değişkene kaydedin Yve bir mesaj yazdırın "Y, 7'den büyüktür",eğer değer Y7'den fazla ve "Ydeğil daha büyük -den 7” aksi takdirde.

37. Aşağıdaki istatistikleri ekrana yazdıran bir kabuk programı yazın:

a) adınız;

b) başlatıldığı argümanların sayısı;

c) argümanlarının her birini ve argümanın uzunluğunu karakter olarak yazdırır;

38. Yaz kabuk- komut satırındaki bağımsız değişken sayısını belirleyen ve bağımsız değişken sayısı üç değilse veya sayıları üçse bağımsız değişkenlerin kendisi bir hata mesajı veren bir program.

39. Yaz kabuk-Kullanıcı kimliğini girmek için bir davetiye çıkaracak, kimliği sistemde kullanılanlarla uyumluluk açısından kontrol edecek ve tam adı görüntüleyecek bir program EV-directory veya geçersiz bir tanımlayıcı olması durumunda bir hata mesajı verir.

40. Bir kabuk programı yazın merhabakomut satırı argümanlarına aşağıdaki yanıtı sağlar:

Argüman "-D"- program komutu yürütecek tarih;

Argüman "-L"- program mevcut dizinin içeriğini gösterecektir;

    komut satırında herhangi bir argüman veya yanlış argüman yoksa, program seçenekleri hakkında yardım gösterecektir.

41. Bir program yazın kelimelerbu, kullanıcıdan bir kelime girene kadar her seferinde bir kelime girmesini ister son... Girdiğiniz tüm kelimeleri ezberleyin. Bir kelimeyi yazdıktan sonra songirilen tüm kelimeleri görüntüleyin.

42. Mevcut çalışma dizininin tam nitelikli yol adını içerecek şekilde sistem istemini değiştirin. .

43. Bir program yazın virüskendi çalıştırılabilir kopyasını farklı bir adla oluşturur ve sonra kendini siler.

44. Bir program yazın virüs2 , komut dili programları için geçerli dizinde arama yapan ve sözcükleri görüntülemek için bir komut ekleyen Enfekte!”.

45. Bir program yazın virüs3 , bulduğu komut dili programlarına diğer programları etkilemek için kendi kodunu ekler.

46. \u200b\u200bBir program yazın virüs4 Virüsünüzü, bulaşma üzerine bulaşan kod bulaşan programdan kaldırılacak şekilde değiştirerek.

47. Bir program yazın antivirüsbu, virüsünüzün bulaştığı tüm kabuk programlarını bulacaktır.

48. Geliştirilen programı, yalnızca belirtilen dizinde virüslü programları bulmakla kalmayacak, aynı zamanda virüslü sürümü yeni bir dosyaya sona kaydederek onları "iyileştirecek" . virve böyle bir dosyadan yürütme özniteliğinin kaldırılması.

49. Bir program yazın virüs5 hangisi:

a) yalnızca kullanıcı komutu girmişse, geçerli dizindeki ve alt dizinlerindeki kabuk programlarına bir virüs bulaştırır ls;

b) bir takım gibi davranır ls, işinin terminalinde hiçbir şey vermeden.

50. Programlara dayalı bir virüs6 programı yazın virüs2 -virüs5 geliştirdiğiniz program tarafından bulaşan kodu tespit edilemeyenler antivirüsve enfeksiyon değişkenin herhangi bir değerinde meydana gelir PATH.

51. Bir program yazın süpervirüsBir önceki görevde geliştirilen virüsün başlatılması dosyalarınıza bulaşan ve sisteme her giriş yaptığınızda, yoldaşlarınızın dosyalarına bulaşma girişiminde bulunulmaktadır. Program süpervirüs ilk çalıştırmadan sonra kendini siler.

52. Bir program yazın süper antivirüs, belirtilen dizindeki ve alt dizinlerindeki tüm dosyaları algılayan ve tamamen "iyileştiren" (karşılık gelen seçenek belirtilmişse) tüm gelişmiş virüslerden.

    dilek (UNIX komut kabuğu) - Bu terimin başka anlamları var, bkz. Wish. Wish (Pencereleme Kabuğu), X Pencere Sistemi ve Mac OS X için komut dosyası oluşturulmuş veya etkileşimli bir UNIX kabuğudur. Kullanıcılara bileşenleri kontrol etme yeteneği sağlar ...

    Komut kabuğu - İşletim sistemi kabuğu (İngiliz kabuk kabuğundan) - sistem işlevleriyle kullanıcı etkileşimi için bir arabirim sağlayan işletim sistemi (OS) komut yorumlayıcısı. Genel olarak, iki tür arayüze sahip mermiler vardır ... Wikipedia

    UNIX kabuğu

    Unix kabuğu - UNIX komut kabuğu (İngilizce Unix kabuğu, genellikle sadece "kabuk" veya "sh"), Unix Sürüm 7'de görünen, Bourne kabuğuna dayanan uyumlu kabuklar ailesinin işletim sistemlerinde kullanılan komut yorumlayıcısı. İçindekiler 1 ... ... Wikipedia

    Unix Kabuğu - UNIX komut kabuğu (İngilizce Unix kabuğu, genellikle sadece "kabuk" veya "sh"), Unix Sürüm 7'de görünen, Bourne kabuğuna dayanan uyumlu kabuklar ailesinin işletim sistemlerinde kullanılan komut yorumlayıcısı. İçindekiler 1 ... ... Wikipedia

    Komut satırı - Komut satırı yorumlayıcı isteği buraya yeniden yönlendirilir. "Komut satırı yorumlayıcısı" konusunda ayrı bir makaleye ihtiyaç vardır. Kabuk görünümü (eng. Co ... Wikipedia

    UNIX Sistem V - System V'in birçok torunu ... Wikipedia

    Unix Sistem V - 1989 işletim sisteminin sürümlerinden biri olan System V AT T UNIX System V'nin birçok nesli. Sürüm 1, 2, 3 ve 4'ün 4 ana sürümü piyasaya sürüldü.Sistem V Sürüm 4 (SVR4) en başarılı ve popülerdi ve ... ... Wikipedia

    UNIX - UNIX sistemlerinin aile ağacı UNIX (unix'i okuyun) taşınabilir, çok görevli ve çok kullanıcılı bir aile ...

    Unix - UNIX sistemleri soy ağacı UNIX (unix okunabilir) taşınabilir, çok görevli ve çok kullanıcılı işletim sistemleri grubu. İlk UNIX sistemi 1969'da AT T'nin Bell Labs bölümü tarafından geliştirildi. O zamandan beri ... Wikipedia

Kitabın

  • Kabuk betikleri. Linux, OS X ve Unix. Liderlik, Taylor Dave. Kabuk komut dosyaları, bilgisayarların ilk günlerinden beri sistem yöneticilerinin ve programcıların rutin görevleri otomatikleştirmelerine yardımcı oluyor. İlk piyasaya sürüldüğünden beri ... 1217 UAH için satın al (sadece Ukrayna)
  • Kabuk betikleri. Linux, OS X ve Unix, Taylor Dave, Perry Brandon. Kabuk komut dosyaları, bilgisayarların ilk günlerinden beri sistem yöneticilerinin ve programcıların rutin görevleri otomatikleştirmelerine yardımcı olmuştur. İlkinin yayınlanmasından bu yana ...

Elbette neredeyse tüm Habr okuyucuları sh ve bash kabuklarını biliyor. Ayrıca çoğumuz zsh ve tcsh hakkında bir şeyler duymuşuzdur. Ancak, mevcut görünümlerin listesi burada bitmiyor. Koşullu olarak üç gruba ayrılabilirler:

  • Bourne kabuğu klonları (bash, zsh)
  • C kabuğu (csh, tcsh)
  • Popüler programlama dillerine (psh, ipython, scsh) dayalı
  • Egzotik, özel ve her şey
Bunların en ilginci tartışılacak.

Bu makalenin amacı, mevcut tüm komut kabuklarını gözden geçirmek veya sınıflandırmak değildi. Okuyucunun ufkunu genişletmek için bu alandaki bazı ilginç ürünlerden bahsetmek istiyorum. Memnun olurum. bununla birini konuyu daha ayrıntılı incelemeye veya hatta başka bir konuya geçmeye teşvik edersem.
İlk olarak kısaca ne olduğu hakkında. Komut kabuğu veya komut yorumlayıcı, kullanıcıya komutları tek tek girdiği veya bir komut listesinden oluşan komut dosyalarını çalıştırdığı bir komut satırı arabirimi sağlayan bir uygulamadır. Sözlü olarak ve gayri resmi metinlerde buna İngiliz kabuğundan "kabuk" denir.

En yaygın olanı, Bourne kabuğundan (Bourne kabuğu) inen POSIX uyumlu kabuklardır, öyleyse onunla başlayalım.

Bourne kabuğu ve klonları

Bourne kabuğu, çalıştırılabilir dosya: sh... Yaratıcısı Stephen Bourne'un adını taşıyan bir komut kabuğu. Operatörlerin çoğu kendisi tarafından Algol 68 dilinden ödünç alındı. Varsayılan kabuk olduğu UNIX işletim sisteminin 7. sürümünde yayınlandı. Şimdiye kadar, Unix benzeri sistemlerin büyük çoğunluğunda / bin / sh, sh uyumlu bir kabuğa sembolik veya sabit bir bağlantı var.

Bourne yine kabuk, çalıştırılabilir dosya: bash... Adı "Bourne yeniden doğdu" olarak tercüme edilebilir. Muhtemelen bugün en popüler kabuk. Linux için fiili standart. Üzerinde durmayacağım çünkü internette bash hakkında birçok iyi makale var. Örneğin burada ve orada.

Z kabuğu, çalıştırılabilir dosya: zsh... Ücretsiz modern sh uyumlu kabuk. Çoğunlukla etkileşimli çalışma açısından bash'a göre birçok avantajı vardır. Habré'de onun hakkında yazdılar ve
Ek olarak, bu gruba giren epeyce mermi vardır: Korn kabuğu (ksh) ve Almquist kabuğu (kül) vb, ancak bunların üzerinde ayrıntılı olarak durmayacağız.

C kabuğu

C kabuğu, çalıştırılabilir dosya: csh Vi yazarı Bill Joy tarafından geliştirilmiş bir komut kabuğu. Csh betik dili, adından da anlaşılacağı gibi C diline dayanıyordu. o zaman, 1978'de, BSD UNIX geliştiricileri ve kullanıcıları arasında en popüler programlama diliydi. Şu anda, daha popüler ücretsiz csh uygulaması tcsh'dir.

TENEX C Kabuğu, çalıştırılabilir dosya: tcsh... Otomatik tamamlama ilk kez tcsh'de göründü. Bu, FreeBSD için varsayılan kabuktur. Bununla ilgili daha fazlasını okuyabilirsiniz.
Sözdizimindeki farklılığı açıkça göstermek için, csh ve sh uyumlu komut yorumlayıcı için aynı şeyi yapan birkaç komut dosyası örneği vereceğim.

Koşullu yapı:

İkinin ilk 10 kuvvetini hesaplayan döngü:

#! / bin / sh i \u003d 2 j \u003d 1 while [$ j -le 10]; do echo "2 **" $ j \u003d $ i i \u003d "ifade $ i" * "2` j \u003d" ifade $ j + 1` bitti #! / bin / csh set i \u003d 2 set j \u003d 1 while ($ j<= 10) echo "2 **" $j = $i @ i *= 2 @ j++ end

Bununla birlikte, bash, zsh ve tcsh'nin son sürümleri tarafından desteklenen özelliklerin listesi çok benzer ve belirli bir kabuğun seçimi çoğunlukla bir zevk meselesidir. Daha az yaygın olan mermilerde durum böyle değildir. Burada farklılıklar daha önemlidir.

Popüler programlama dillerine dayalı komut kabukları.

Perl Kabuğu, çalıştırılabilir dosya: psh... Bahsi geçen paketleyicilerin özelliklerini Perl'in gücüyle birleştiren bir paketleyici. Çünkü psh perl ile yazılmıştır, hatta Windows üzerinde çalışabilir. Psh kullanmanın bazı örnekleri:
ls | s / y / k / # Normal ifadelerle değiştirme ls | (print ++ $ i, ": $ _";) q # Hızlı filtreler. Küme parantezlerinin içinde, $ _'ın bir satır çıktı içerdiği bir perl ifadesi. netstat | ($ _\u003e 2;) g # grep filtreleri. Yalnızca parantez içindeki ifadenin doğru komutu\u003e [\u003d FOO] döndürdüğü satırlar çıkarılır. # Açık dosya tanımlayıcı komutu ile yeniden yönlendir komutu\u003e dosya # Bash komutundaki 2\u003e dosya ile eşdeğerdir. Çıktıyı ve hata akışını grep foo lib / ** / * dosyasına yönlendirir. Pm # Kullanım **, geçerli dizin ve tüm alt dizinler anlamına gelir

Scsh, çalıştırılabilir dosya scsh... Komut dosyası dili olarak Şema 48'i kullanan bir açık kaynak komut yorumlayıcısı. Diğer kabuklar için standart işlevleri desteklemez (komut geçmişi, komut satırında metin düzenleme, yol / komut tamamlama). Komut dosyası oluşturma önerilir, ancak etkileşimli çalışma için önerilmez. Fonksiyonel programlama severlerin beğenisine olabilir. Aşağıda, PATH ortam değişkenindeki dizinlerde bulunan tüm yürütülebilir dosyaların adlarını görüntüleyen örnek bir komut dosyası verilmiştir.
#! / usr / local / bin / scsh -s! # (tanımla (yürütülebilir dosyalar) (with-cwd dir (filtre dosyası yürütülebilir mi? (dizin-dosyaları dizini #t)))) x) (yeni satır)) (her bir writeln için (append-map çalıştırılabilirleri ((infix-splitter ":") (getenv "PATH"))))

IPython... Python programlama dili için bir dizi ek özelliğe sahip etkileşimli bir kabuktur. IPython, bir sistem kabuğu görevi görecek özel bir profile sahiptir. Bu modu başlatmanın yolu, anladığım kadarıyla sürüme bağlı, ancak makinemde şöyle görünüyor:
ipython3 --profile \u003d pysh

IPython hakkında Rusça da dahil olmak üzere çok şey yazıldı (makalenin sonundaki bağlantılar). Bir komut kabuğu olarak kullanmak açısından ana özelliklerini listelemeye çalışacağım:

  • Çapraz platform. Windows versiyonu bile var
  • Komut dosyası dili olarak Python 2.x veya 3.x, gelişmiş iç gözlem
  • Python kodu, dosya adları ve sistem komutları için otomatik tamamlama.
  • Komut geçmişi ve buna dayalı makrolar
  • Dizinde gezinmeyi, yer imlerini ve çok daha fazlasını hızlandıran bir mekanizma
Gördüğünüz gibi, interaktif yetenekleri açısından IPython en az bash kadar iyidir. Komut dosyalarına gelince, IPython, python'u bash'den daha iyi bilenler için uygun olacaktır. Aslında, IPython'daki komut dosyaları, yalnızca basitleştirilmiş sistem komutları çağrısında saf python'dan farklı olacaktır. Bazı python ve sistem komutları entegrasyonu örnekleri vereceğim:
# Dpkg günlük dosyalarının toplam boyutunu hesaplamak istediğimizi varsayalım: Giriş: cd / var / log / / var / log Giriş: log_files \u003d! Ls -l dpkg.log * Giriş: log_files Çıkışı: "-rw-r - r-- 1 kök kök 1824 Kasım 3 16:41 dpkg.log "Giriş: log_files içindeki satır için: ....: size + \u003d int (line.split ()) ....: In: size Out: 1330009 #. .. veya sırayla bir düzine ana bilgisayara ping atma Giriş: aralık içindeki i için (100,110): ....:! ping -c 1 192.168.0. $ i ....:
Dinlenme
Tabii ki, bu popüler derilerin bile tam listesi değil. Yukarıdaki kategorilere ek olarak, sh ile uyumlu olmayan ve mevcut PL'leri kopyalamayan kendi sözdizimini de kullanmaktadır. Bir örnek, dost canlısı etkileşimli kabuktur (balık). Ama son olarak, size ondan değil, daha spesifik bir uyku kabuğundan bahsetmek istiyorum.

Sleep Dummy Shell, çalıştırılabilir dosya: uyku kabuğu... Açıkçası, sleepshell'e komut işlemcisi denemez. komutları işleyemez. Ve genel olarak, standart çıktıya periyodik olarak yıldız işaretleri "*" yazmak dışında herhangi bir şeyi nasıl yapacağını bilmez. Ancak, tam olarak bir komut kabuğu olarak kullanılır ve nedeni şudur: Diyelim ki, Linux veya Unix çalıştıran sunucumuz aracılığıyla birine ssh tünelleri yapma yeteneği vermek istiyoruz. Ssh tünelleme hakkında daha fazla bilgi edinin. Ancak sunucumuzun komut satırına ve dosya sistemine erişmek için buna ihtiyacımız yok. Uyku kabuğu bunun için. Sunucuda bunun için kabuk olarak bir hesap oluşturuyoruz, sleepshell'i kuruyoruz. Hesap sahibi bağlantı noktalarını bağlayıp iletebilecek ancak komutları yürütemeyecektir.

Bu kadar. Umarım ilginçtir. Makalenin metni ile ilgili her türlü yorum ve tavsiyeden memnun olacağım.

İlgili Bağlantılar
www.faqs.org/faqs/unix-faq/shell/shell-differences - kabuk farklılıkları ve benzerliklerinin özet tablosu
www.mariovaldez.net/software/sleepshell - Uyku Kukla Kabuğu
ipython.org/ipython-doc/dev/interactive/shell.html - Sistem kabuğu olarak IPython
www.opennet.ru/base/dev/ipython_sysadmin.txt.html - Sistem yöneticisi aracı olarak IPython kabuğu

Kabuk komut dili (çeviride - kabuk, kabuk) aslında çok yüksek seviyeli bir programlama dilidir. Bu dilde, kullanıcı bilgisayarı kontrol eder. Genellikle, oturum açtıktan sonra kabukla etkileşime girmeye başlarsınız. Kabuğun komutları almaya hazır olduğuna dair bir gösterge, ekranda verdiği bilgi istemidir. En basit durumda, bu bir dolardır ("$"). Kabuk gerekli değildir ve tek komut dili (mobil sistemler için standart olan POSIX altında standartlaştırılmış olmasına rağmen). Örneğin, cshell dili oldukça popülerdir, ayrıca kshell, bashell ve diğerleri de vardır. Dahası, her kullanıcı kendi komut dilini oluşturabilir. Farklı komut dilleriyle işletim sisteminin bir örneği üzerinde aynı anda çalışabilir. kabuk, birçok UNIX komutundan biridir. Yani, "kabuk" komut kümesi "sh" komutunu içerir - "kabuk" yorumlayıcısını çağırır. İlk "kabuk", oturum açtığınızda otomatik olarak çağrılır ve bir yönlendirici görüntüler. Bundan sonra, "kabuğun" kendisi de dahil olmak üzere, çalıştırma için herhangi bir komutu yeniden çağırabilirsiniz, bu da sizin için eskisinin içinde yeni bir kabuk yaratacaktır. Örneğin, düzenleyicide "dosya_1" dosyasını hazırlarsanız:

Echo Merhaba!

o zaman "echo" komutunu içeren bir düz metin dosyası olur ve çalıştırıldığında ekranda sağında yazılan her şeyi görüntüler. "File_1" dosyasını "chmod 755 file_1" komutuyla çalıştırılabilir yapabilirsiniz. Ancak, açıkça "sh" ("kabuk") komutunu çağırarak çalıştırılabilir:

Sh dosya_1

Sh< file1

Dosya aynı zamanda geçerli "kabuk" örneğinde de çalıştırılabilir. Bunun için belirli bir komut var "." (nokta), yani

Dosya_1

UNIX çok kullanıcılı bir sistem olduğundan, bir kişisel bilgisayarda paralel olarak, örneğin 12 ekranda (ekrandan ekrana geçiş ALT / işlev tuşu), her ekranda yeni (veya aynı) bir kullanıcının komutuyla çalışabilirsiniz. kabuk. Ayrıca X-Window grafik modunda çok sayıda pencere açabilirsiniz ve her pencere kendi komut kabuğuna sahip kendi kullanıcısına sahip olabilir ... Kabuk dilinin temel öğesi komuttur.

Komut yapıları:

Kabuk komutları genellikle şu biçimi alır:

<имя команды> <флаги> <аргумент(ы)>

Örneğin:

Ls -ls / usr / bin

Burada ls, bir dizinin içeriğini görüntüleyen komutun adıdır, -ls bayraklardır ("-" bir bayrak işaretidir, l uzun bir biçimdir, s "bloklardaki dosyalar hakkındadır), / usr / bin, komutun yürütüldüğü bir dizindir. Bu komut bloklar halinde her dosyanın boyutu hakkında bilgi eklerken, / usr / bin dizininin içeriğini ekranda uzun bir biçimde görüntüleyecektir. Ne yazık ki, bu komut yapısı her zaman korunmaz. Bayraklardan önce her zaman bir eksi konulmaz, bayraklar her zaman tek kelimede değildir. Farklı biçimlere sahip komutlar arasında cc - C derleyicisini çağırma, tar - arşivlerle çalışma, dd - dönüştürme içeren bir dosyayı kopyalama, dosyaları bulma - bulma ve bir dizi başka "popüler" komutlar bulunur. Kural olarak, ilk kelime kabuk tarafından bir komut olarak yorumlanır.

ilk sözcüğün kodu, kabuk tarafından bir (birleştirme) komutu olarak çözülecek ve bu komut, geçerli dizinde "cat" (ikinci sözcük) adlı bir dosya gösterecektir. Komut Yeniden Yönlendirme UNIX OS'de standart giriş (giriş) - "stdin" terminal klavyesinden yapılır ve standart çıkış (çıkış) - "stdout" terminal ekranına yönlendirilir. Ayrıca standart bir teşhis mesajları dosyası da vardır - "stderr", biraz sonra tartışılacaktır. Standart girdi ve çıktı ile çalışabilen komuta FİLTRE denir. Kullanıcı, girişi ve çıkışı diğer dosyalara (cihazlara) yönlendirmek için uygun araçlara sahiptir. "\u003e" Ve "\u003e\u003e" sembolleri çıktı yeniden yönlendirmesini gösterir. ls\u003e file_1 "ls" komutu, geçerli dizindeki dosyaların bir listesini oluşturacak ve onu "file_1" dosyasına yerleştirecektir (ekrana yazdırılmak yerine). Daha önce "dosya_1" dosyası varsa, yenisiyle üzerine yazılacaktır.

Pwd \u003e\u003e dosya_1

pwd komutu mevcut dizinin tam adını oluşturacak ve bunu "file_1" dosyasının sonuna yerleştirecektir, yani Boş değilse dosyaya "\u003e\u003e" eklenir. Semboller "<" и "<<" обозначают перенаправление ввода.

Wc -l

dosya_1'deki satır sayısını sayacak ve görüntüleyecektir.

Ed dosya_2<

düzenleyiciyi kullanarak doğrudan terminalden "dosya_2" dosyasını oluşturacaktır. Girişin sonu, sağdaki karakter tarafından belirlenir "<<" (т. е. "!"). То есть ввод будет закончен, когда первым в очередной строке будет "!". Можно сочетать перенаправления. Так

Wc -l dosya_4

Wc -l\u003e dosya_4

aynı şekilde gerçekleştirilir: "dosya_3" dosyasındaki satır sayısı sayılır ve sonuç "dosya_4" dosyasına yerleştirilir. Bir komutun standart çıktısını diğerinin standart girdisiyle birleştiren bir araç, KONVEYÖR olarak adlandırılır ve dikey çubuk "|" ile gösterilir.

Ls | wc -l

geçerli dizindeki dosyaların listesi, dizin satırlarının sayısını gösterecek olan "wc" komutunun girişine gönderilecektir. İlk ve son hariç tümü filtre olduğunda ikiden fazla komut bir ardışık düzen ile birleştirilebilir:

Cat file_1 | grep -h sonucu | sırala | cat -b\u003e dosya_2

"File_1" ("cat") dosyasındaki bu ardışık düzen, "sonuç" ("grep") kelimesini içeren tüm satırları seçecek, ortaya çıkan satırları sıralayacak ("sırala") ve ardından numaralandıracak ("cat -b") ve sonucu şu şekilde çıkaracaktır: dosya "dosya_2". UNIX aygıtları özel dosyalar ile temsil edildiğinden, yönlendirmelerde kullanılabilirler. Özel dosyalar "/ dev" dizininde bulunur. Örneğin, "lp" yazdırmaktır; "konsol" - konsol; "ttyi" i-inci terminaldir; "boş" sahte (boş) bir dosyadır (aygıt). Sonra, örneğin,

Ls\u003e / dev / lp

mevcut dizinin içeriğini ve dosya_1 dosyasını yazdıracak< /dev/null обнулит файл "file_1".

Dosyayı sırala_1 | tee / dev / lp | kuyruk -20

Bu durumda, "dosya_1" dosyası sıralanacak ve yazdırmaya gönderilecek ve son 20 satır da ekranda görüntülenecektir. Çıkış yönlendirmesine geri dönelim. Standart dosyalar numaralandırılmıştır:

0 - stdin, 1 - stdout 2 - stderr. Ekranda bir hata mesajı görüntülenmesini istemiyorsanız, bunu ekrandan belirlediğiniz dosyaya yeniden yönlendirebilirsiniz (hatta onu "boş cihaz" dosyasına - / dev / null yeniden yönlendirerek "atabilirsiniz"). Örneğin, komutu yürütürken

Cat dosya_1 dosya_2

"dosya_1" ve "dosya_2" dosyalarının içeriğini ekranda görüntülemesi gereken, size örneğin aşağıdakileri verecektir

111111 222222 cat: f2: Böyle bir dosya veya dizin yok

111111 222222, "dosya_1" dosyasının içeriğidir ve "dosya_2" dosyası eksiktir, bu dosya hakkında "cat" komutunun varsayılan olarak standart tanı dosyasına rapor ettiği, tıpkı ekran tarafından sunulan standart çıktı gibi. Ekranda böyle bir mesaj istemiyorsanız, belirlediğiniz dosyaya yeniden yönlendirebilirsiniz:

Cat dosya_1 dosya_2 2\u003e f-err

hata mesajları ("2\u003e" yeniden yönlendirme ile belirtildiği gibi) "f-err" dosyasına gönderilecektir. Bu arada, tüm bilgileri tek bir "ff" dosyasına gönderebilirsiniz, bu durumda yapıyı kullanarak

Cat dosya_1 dosya_2 \u003e\u003e ff 2\u003e ff

Yalnızca standart dosyalardan hangisinin yeniden yönlendirileceğini değil, aynı zamanda hangi standart dosyaya yeniden yönlendirileceğini de belirtebilirsiniz.

Cat dosya_1 dosya_2 2 \u003e\u003e ff 1\u003e & 2

Burada, önce "stderr" (ekleme modunda) "ff" dosyasına yeniden yönlendirilir ve ardından standart çıktı "stderr" e yeniden yönlendirilir, bu noktada bu "ff" dosyasıdır. Yani sonuç bir öncekine benzer olacaktır. "1\u003e & 2" yapısı - yeniden yönlendirilecek standart dosyanın numarasına ek olarak, önüne "&" koymanız gerektiği anlamına gelir; tüm yapı boşluksuz yazılmıştır.<- закрывает стандартный ввод. >- standart çıktıyı kapatır. Komut dosyaları. Bir metin dosyasının komut olarak kullanılması için birkaç olasılık vardır. Düzenleyicinin, aşağıdaki biçimde bir satır içeren "cmd" adlı bir dosya oluşturmasına izin verin:

Tarih; pwd; ls

Kabuğu "sh" ile gösterilen bir komut olarak çağırabilir ve "cmd" dosyasını ona bir argüman veya yeniden yönlendirilmiş bir girdi olarak iletebilirsiniz;

$ sh cmd

$ sh

Bu komutlardan herhangi birinin yürütülmesinin bir sonucu olarak, tarih, ardından geçerli dizinin adı ve ardından dizinin içeriği görüntülenecektir. Bir toplu iş dosyasıyla çalışmanın daha ilginç ve kullanışlı bir yolu, onu yürütülebilir bir dosyaya dönüştürmektir. sadece güvenlik kodunu değiştirerek elde edilen bir komut yapın. Bunu yapmak için, bu dosyanın yürütülmesine izin vermelisiniz. Örneğin,

Chmod 711 cmd

güvenlik kodunu "rwx__x__x" yapacak. Sonra basit bir arama

aynı üç komutu çalıştıracak. İçeriğe sahip dosya varsa sonuç aynı olacaktır

Tarih; pwd; ls

başka bir satıra geçiş de komut dizisinde bir ayırıcı olduğundan, tarih pwd ls biçiminde gösterilir. Böylece çalıştırılabilir dosyalar sadece derleme ve montaj sonucunda elde edilen dosyalar değil, aynı zamanda kabuk dilinde yazılmış dosyalar olabilir. Kabuk yorumlayıcı kullanılarak yorumlama modunda yürütülürler.

Toplu iş dosyalarında hata ayıklama

SHELL, toplu iş dosyalarında hata ayıklamak için iki mekanizma kullanır. Birincisi: set -v, toplu iş dosyasının satırlarını okurken yazdırır. Bu mod, sözdizimi hatalarını ararken kullanılır. Kullanmak için, toplu iş dosyasını değiştirmenize gerek yoktur, örneğin: sh -v proc ... burada proc, toplu iş dosyasının adıdır. -V anahtarı, sonraki komutların yürütülmesini engelleyen -n anahtarı ile birlikte kullanılabilir (set -n komutu, EOF dosyasının sonuna kadar terminali kilitler). Set -x komutu, çalıştırıldıkça komutları verir ve program satırları terminale yazdırılır ve değişkenlerin yerine değerleri değiştirilir. -X ve -v anahtarlarını iptal etmek için set komutunu kullanabilirsiniz - ve bunu ayarlamak için karşılık gelen değeri makro değişkenine atayın. ÇEVRE KABUĞU (DEĞİŞKENLER VE PARAMETRELER) Kabuk dilinde, komut dosyaları yazabilir ve çalıştırılabilir hale getirmek için "chmod" komutunu kullanabilirsiniz. Bundan sonra, diğer UNIX komutlarından farklı değiller.

Kabuk değişkenleri

Kabuk değişkeni adı, bir harfle başlayan bir harf, sayı ve alt çizgi dizisidir. Kabuk değişkeni değeri bir karakter dizesidir. Kabukta yalnızca iki tür veri olması gerçeği: Bir yandan bir karakter dizisi ve bir metin dosyası, daha önce hiç programlamamış olan son kullanıcıları dahil etmeyi kolaylaştırırken, diğer yandan önemli ölçüde alışkın olan birçok programcının bazı dahili protestolarına neden olur. daha fazla çeşitlilik ve daha fazla esneklik demektir. Bununla birlikte, çok yetenekli programcıların, kabuğun "oyunun kurallarına" aşina olduklarında, üzerine C'dekinden çok daha hızlı program yazdıklarını, ancak özellikle ilginç olan, bazı durumlarda bu programların C'de uygulananlardan daha hızlı çalıştığını gözlemlemek ilginçtir. Değişken adı, geleneksel tanımlayıcı kavramına benzer, örn. ad, bir harf veya alt çizgiyle başlayan bir dizi harf, sayı ve alt çizgi olabilir. "\u003d" Atama operatörü, değişkenlere değer atamak için kullanılabilir.

Var_1 \u003d 13 - "13" bir sayı değil, iki basamaklı bir dizedir. var_2 \u003d "UNIX OS" - dizede boşluk olduğundan burada çift tırnak ("") gereklidir.

Kabuk değişkenlerine değer atamanın başka yolları da mümkündür. Örneğin, bir kayıt

DAT \u003d "tarih"

ilk olarak "tarih" komutunun çalıştırılmasına neden olur (geri işaretler, ekteki komutun önce yürütülmesi gerektiğini gösterir) ve yürütmenin sonucu, standart çıktıya vermek yerine, bu durumda değişkenin değeri olarak atanır " DAT ". Ayrıca, diyalog modunda (klavye) ekranından değişken değerini alan "oku" komutunu kullanarak bir değişkene bir değer atayabilirsiniz. Genellikle komut dosyasındaki "oku" komutundan önce "echo" komutu gelir, bu da ekranda bazı mesajları önceden görüntülemenizi sağlar. Örneğin:

Echo -n "Üç basamaklı bir sayı girin:" x oku

Toplu iş dosyasının bu parçasını çalıştırırken, mesajı görüntüledikten sonra

Üç basamaklı bir sayı girin:

tercüman duracak ve klavyeden bir değer girilmesini bekleyecektir. Girerseniz, "753" deyin, bu "x" değişkeninin değeri olur. Bir "oku" komutu aynı anda birkaç değişken için değerleri okuyabilir (atayabilir). "Oku" bölümünde girilenden daha fazla değişken varsa (boşluklarla ayrılmış), geri kalanına boş bir dize atanır. "Oku" komutundaki değişkenlerden daha fazla geçirilen değer varsa, fazlalıklar yok sayılır. Bir kabuk değişkenine atıfta bulunurken, adın önüne "$" sembolünü koymalısınız. Böylece echo $ var_2 echo var_2 komutları görüntülenecektir

UNIX OS var_2 Kaçış

Kabukta kullanılan kaçış tekniklerine daha yakından bakalım. Kaçış olarak çift tırnak (""), tek tırnak ("") ve ters eğik çizgi (\\) kullanılır. Eylemleri örneklerden anlaşılır: Bir satıra birkaç ödev yazabilirsiniz.

X \u003d 22 y \u003d 33 z \u003d $ x A \u003d "$ x" B \u003d "$ x" C \u003d \\ $ x D \u003d "$ x + $ y + $ z" E \u003d "$ x + $ y + $ z "F \u003d $ x \\ + \\ $ y \\ + \\ $ z

(G \u003d $ x + $ y ataması boşluklar nedeniyle başarısız olur) Sonra

Yankı A \u003d $ A B \u003d $ B C \u003d $ C yankı D \u003d $ D E \u003d $ E F \u003d $ F eval yankısı değerlendirildi A \u003d $ A eval yankısı değerlendirildi B \u003d $ B eval yankısı değerlendirildi C \u003d $ C

Ekranda görüntülenecek

A \u003d 22 B \u003d $ x C \u003d $ x D \u003d 22 + 33 + 22 E \u003d $ x + $ y + $ z F \u003d 22 + 33 + 22 değerlendirildi A \u003d 22 değerlendirildi B \u003d 22 değerlendirildi C \u003d 22

Burada, çıkış satır beslemelerine ilişkin birkaç örnek daha verilmiştir. "String" değişkenine "dizi" değerinin atanmasına izin verin 2x3: abc def Fazladan boşlukların atanmasını önlemek için, dizinin ikinci satırının bir sonraki satırın ilk konumundan başladığına dikkat edin: string \u003d "abc def" Sonra, "echo" komutunda değişkeni yazmanın üç çeşidi vardır echo $ string echo "$ string" echo "$ string" sırasıyla üç farklı sonuç verecektir: abc def $ string abc def ve komut dizisi echo "str_1 str_2"\u003e file_1 echo "str_1 str_2"\u003e file_2 cat file_1 file_2, dosya_1 sıralı olarak aynı dosyaları verecektir ve dosya_2: str_1 str_2 str_1 str_2 Ayrıca bir ters eğik çizginin (\\) yalnızca aşağıdaki karakterden kaçmakla kalmadığını, bu da özel karakterlerin yalnızca kendilerini temsil eden karakterler olarak kullanılmasına izin vermediğini (aynı zamanda kendisinden de kaçabilir - \\\\), aynı zamanda bir komut dosyasında, ters eğik çizgi "satırları bir satırda birleştirmenize (bir satırın sonundan kaçış) izin verir. Örneğin, daha önce verilen komut satırı örneği:

Cat file_1 | grep -h sonucu | sırala | cat -b\u003e dosya_2

bir toplu iş dosyasına yazılabilir, diyelim ki

Cat file_1 | grep -h \\ sonuç | sırala | cat -b\u003e dosya_2

Bu arada, boru sembolü ayrıca bir komut satırı devam etkisi sağlar. Bu durumda daha güzel bir sonuç verebilir, örneğin:

Cat file_1 | grep -h sonucu | sırala | cat -b\u003e dosya_2

Kabuk değişkenleriyle manipülasyon Kabuk değişkenleri genellikle dizge olarak ele alınmasına rağmen, yani "35" bir sayı değil, "3" ve "5" olmak üzere iki karakterden oluşan bir dizedir, bazı durumlarda örneğin tamsayı olarak farklı yorumlanır. "İfade" komutunun çeşitli seçenekleri vardır. Bazılarını örneklerle açıklayalım: Bir toplu iş dosyasının yürütülmesi:

X \u003d 7 y \u003d 2 a \u003d "ifade $ x + $ y`; echo a \u003d $ a a \u003d "expr $ a + 1`; echo a \u003d $ a b \u003d "ifade $ y - $ x`; echo b \u003d $ b c \u003d "ifade $ x" * "$ y`; echo c \u003d $ c d \u003d "ifade $ x / $ y`; echo d \u003d $ d e \u003d "ifade $ x% $ y`; echo e \u003d $ e

gösterecek

A \u003d 9 a \u003d 10 b \u003d -5 c \u003d 14 d \u003d 3 e \u003d 1

Çarpma işleminden ("*") kaçınılmalıdır, çünkü kabukta bu simge özel bir karakter olarak algılanır, yani bu yerde herhangi bir karakter dizisi değiştirilebilir. "İfade" komutu ile, sadece (tamsayı) aritmetik işlemler değil, aynı zamanda dize işlemleri de mümkündür:

A \u003d "ifade" kokteyl ":" horoz "`; echo $ A B \u003d "ifade" kokteyl ":" kuyruk "`; echo $ B C \u003d "ifade" kokteyl ":" pişir "`; echo $ C D \u003d "ifade" horoz ":" kokteyl "`; echo $ D

Dizelerdeki eşleşen karakterlerin sayısını gösteren (baştan itibaren) sayılar görüntülenecektir. Satırların ikincisi birincisinden daha uzun olamaz:

4 0 0 0

Değişkenleri Dışa Aktarmak UNIX bir süreç kavramına sahiptir. İşlem, yürütülmek üzere herhangi bir komut başlatıldığında ortaya çıkar. Örneğin, "p" yazarken "p" süreci üretilir. Sırayla, "p" diğer süreçleri ortaya çıkarabilir. "p" nin, karşılık gelen süreçleri sırayla oluşturan "p1" ve "p2" yi çağırdığını varsayalım. Her işlemin kendi ortamı vardır - bir dizi değişken kullanılabilir. Örneğin, "p" çalıştırılmadan önce, bazı değişkenlerin zaten tanımlanmış olduğu bir ortam zaten vardı. "P" yi çalıştırmak yeni bir ortamı doğurur; "p1" ve "p2" zaten onun içinde ortaya çıkar. Değişkenler, bulundukları sürece yereldir. Onlara değerler atandıkları yerde bildirilirler.Onları diğer ortaya çıkan süreçler için kullanılabilir kılmak için, bunları "export" yerleşik komutunu kullanarak açıkça geçirmeniz gerekir.

Seçenekler

Parametreler toplu iş dosyasına aktarılabilir. Kabuk konumsal parametreleri kullanır (yani, göründükleri sıra esastır). Komut dosyasında, parametrelere karşılık gelen değişkenler (kabuk değişkenlerine benzer) "$" karakteriyle başlar ve ardından 0'dan 9'a kadar olan rakamlardan biri şu şekildedir: "örnek-1" "horoz" ve "kuyruk" parametreleriyle çağrılsın. Bu parametreler, "1" ve "2" standart adları altında yeni ortama girer. "0" adlı (standart) bir değişken, çağrılan hesaplamanın adını tutacaktır. Parametrelere erişirken, rakamın önüne bir dolar simgesi "$" yerleştirilir (değişkenlere erişirken olduğu gibi): $ 0, bu komut dosyasının adına karşılık gelir; $ 1 sırayla ilk parametredir; $ 2 saniye parametresi vb. Parametrelerin geçirilebileceği değişkenlerin sayısı bir basamakla sınırlı olduğundan, yani 9. ("0", daha önce belirtildiği gibi, özel bir anlama sahiptir), daha sonra daha fazla parametreyi aktarmak için özel "shift" komutu kullanılır. "Set" komutu, parametrelere özel bir yaklaşım sağlar. Örneğin, pasaj

Önce yankı olan bir b ayarlayın \u003d 1 dolar saniye \u003d 2 dolar üçüncü \u003d 3 dolar

gösterecek

Birinci \u003d ikinci \u003d b üçüncü \u003d c

şunlar. "set" komutu parametre değerlerini ayarlar. Bu çok uygun olabilir. Örneğin, "tarih" komutu geçerli tarihi görüntüler, beş kelimeden oluşan "Pzt Mayıs 01 12:15:10 2000" deyin, ardından

`Tarih` yankısını ayarla $ 1 $ 3 $ 5

gösterecek

Pzt 01 2000

"Set" komutu ayrıca bir programın yürütülmesini kontrol etmenize de izin verir, örneğin: set -v kabuk tarafından terminale okunan satırları görüntüler. set + v önceki modu iptal eder. set -x komutları çalıştırmadan önce terminale yazdırır. set + x önceki modu iptal eder. Parametre olmadan "set" komutu, terminalin yazılım ortamının durumunu gösterir.

Kabuk ikameleri

Komut dosyalarında bulunan komutların doğrudan yorumlanmasına ve yürütülmesine başlamadan önce, kabuk çeşitli türlerdeki değişiklikleri gerçekleştirir: 1. SONUÇLARIN DEĞİŞTİRİLMESİ. Arka tırnak işaretleri içine alınan tüm komutlar çalıştırılır ve sonuç yerine geçer. 2. PARAMETRE VE DEĞİŞKENLERİN DEĞERLERİNİN YERİNE DEĞİŞTİRİLMESİ. Yani, "$" ile başlayan sözcükler, değişkenlerin ve parametrelerin karşılık gelen değerleriyle değiştirilir. 3. MEKANLARIN YORUMLANMASI. Kaçan boşluklar göz ardı edilir. 4. DOSYA ADLARININ OLUŞTURULMASI. Kelimeler özel karakterlerin ("*", "?", "") Varlığı açısından kontrol edilir ve karşılık gelen nesiller gerçekleştirilir. Yazılım ortamı Her işlemin içinde çalıştığı bir ortam vardır. Kabuk bir dizi ortam değişkeni kullanır. "Set" komutunu parametresiz yazarsanız, ekranda oturum açma sırasında oluşturulan (ve "kalıtım yoluyla" tüm yeni işlemlerinize aktarılan) bir dizi standart değişken ve ayrıca süreçleriniz tarafından oluşturulan ve dışa aktarılan değişkenler hakkında bilgiler görüntülenir. Görüntülenen bilgilerin belirli türü ve içeriği, büyük ölçüde hangi UNIX sürümünün kullanıldığına ve sistemin nasıl kurulduğuna bağlıdır.

Set komutunun parametreler olmadan çalıştırılmasının sonucu (tamamlanmadı):

HOME \u003d / root PATH \u003d / usr / local / bin: / usr / bin: / bin:.: / Usr / bin / X11: IFS \u003d LOGNAME \u003d sae MAIL \u003d / var / spool / mail / sae PWD \u003d / home / sae / STUDY / SHELL PS1 \u003d $ (PWD): "" PS2 \u003d\u003e KABUK \u003d / bin / bash

Değişkenlerin değerleri hakkında yorum yapalım. HOME \u003d / root, kullanıcının oturum açtıktan sonra kendini içinde bulduğu ana dizinin adıdır. Yani kullanıcı adını ve şifreyi doğru yazdıktan sonra kendimi "/ root" dizininde bulacağım. PATH \u003d / bin: / usr / bin:.: / Usr / local / bin: / usr / bin / X11 - Bu değişken, "kabuğun" bir komut ararken aradığı dosyaların sırasını belirtir. Dosya adları burada iki nokta üst üste ile ayrılır. Görüntüleme sırası, yoldaki adların sırasına karşılık gelir. Ancak başlangıçta arama sözde yerleşik komutlar arasında gerçekleşir. Yerleşik komutlar, "echo", "cd", "pwd", "date" gibi en sık kullanılan komutları içerir. Bundan sonra, sistem "sh", "cp", "mv", "ls" vb. Komutları içerebilen "/ bin" dizinine bakar. Sonra "cat", "cc", "expr", "nroff", "man" ve diğer komutları içeren "/ usr / bin" dizini. Ayrıca arama, yazdığınız komutların büyük olasılıkla bulunduğu mevcut dizinde ("." Veya "boş" için başka bir atama, yani "") gerçekleşir. Komut satırını yazıp bastıktan sonra "kabuk" (gerekli değişiklikleri yaptıktan sonra) komutla eşleşen adı tanır ve onu PATH'de listelenen dizinlerde arar. Komut bu dizinlerin dışına yerleştirilirse bulunmayacaktır. Aynı ada sahip birkaç komut varsa, ilk görüntülenen dizinde bulunan komut çağrılacaktır. PATH, diğer değişkenler gibi, dizinleri ekleyerek, yeniden düzenleyerek veya hariç tutarak kolayca değiştirilebilir. IFS \u003d (Dahili Alan Ayırıcı) kelimeleri (alanları) ayırmak için kullanılan karakterleri listeler. Bunlar "boşluk", "çizelgeleme" ve "satır besleme" dir, bu nedenle burada atamanın solunda hiçbir şey görünmez ve iki satır dolu. LOGNAME \u003d root - oturum açma adı (kullanıcı "adı"). MAIL \u003d / var / spool / mail / root (e-posta) postasının alındığı dosyanın adıdır. PWD \u003d / root - geçerli dizinin adı PS1 \u003d $ (PWD): "" - promter türü. Bu durumda, bilgi istemi geçerli dizinin adını iki nokta üst üste ve boşlukla gösterecektir. Yani "/ root:" olacaktır. PS2 \u003d\u003e - bu yönlendirici (burada "\u003e") tamamlanmamış bir komutu girmeye (sonraki satırda) devam etmek için bir davet olarak kullanılır. Örneğin, açılış parantezini "(" yazın ve sonraki satırda bu yönlendiriciyi göreceksiniz. Daha sonra ne yapacağınızı bilmiyorsanız, ")" kapanış parantezini yazın ve kaybolacaktır. SHELL \u003d / bin / sh - Bu değişken, kullanıcının kullandığı kabuğu belirtir. Bu durumda standart kabuk ("sh") kullanılır. Kaynak ortam, oturum açıldığında "/ etc / rc" ve "/etc/.profile" gibi dosyalar kullanılarak otomatik olarak kurulur. Ortamı basitçe değiştirmenin bir yolu (örneğin, komut arama yolu, promter türü, kabuk tipi, ekran rengi, vb.), Bu bilgiyi ana dizininize özel bir dosya ".profile" ($ (HOME) /) içine yerleştirmektir. profili) ortam değişkenlerine istenen değerleri atayarak. Yani, bu dosyayı editöre çağırın ve ne isterseniz yazın). Daha sonra her oturum açtığınızda, bu dosya otomatik olarak yeni bir ortamı çalıştıracak ve kuracaktır. Bu dosya HOME dizininizde (oturum açma dizini) bulunmalıdır. Bir noktayla başlayan dosya adlarının genellikle özel bir duruma sahip olduğuna dikkat edin. Bu nedenle, ekranda basit bir "ls" komutuyla görüntülenmezler - bu komutu "-a" bayrağıyla çağırmalısınız. Bu arada "rm *" komutu ile ayrım gözetmeksizin yok edilmiyorlar. Kabuğun kendisi otomatik olarak aşağıdaki değişkenlere (parametrelere) değerler atar :? son komutun döndürdüğü değer; $ işlem numarası; ! arka plan işlem numarası;

  1. kabuğa aktarılan konumsal parametrelerin sayısı;
  • parametrelerin listesi tek satırda;

@ bir kelime koleksiyonu olarak bir parametre listesi; - kabuğa geçen bayraklar. Bu değişkenlere atıfta bulunurken (yani, onları bir komut dosyasında - bir kabuk programında kullanırken), "$" dan önce koyun. Özel bir değişken "$$", değeri bu hesaplamayı gerçekleştiren işlemin sayısına karşılık gelen benzersiz dosyalar yaratmada önemli bir rol oynar. Bilgisayar tarafından gerçekleştirilen her yeni hesaplama, sırayla otomatik olarak numaralandırılan bir veya daha fazla işlemi başlatır. Bu nedenle, işlem numarasını dosya adı olarak kullanarak, her yeni dosyanın yeni bir ada sahip olacağından emin olabilirsiniz (mevcut olanın üzerine yazmayacaktır). Avantaj aynı zamanda dosyaları bu şekilde adlandırmanın ana dezavantajıdır. Dosyalara hangi isimlerin verileceği bilinmemektedir. Ve eğer bu süreç çerçevesinde bir dosyayı "bakmadan", yani $$ kullanarak ona erişerek bulabilirseniz, bu tür dosyalar kolayca kaybolabilir. Bu, programlarda hata ayıklarken ek sorunlar yaratır. Tercümanın çağrılması Kullanıcının sisteme kaydını takiben (oturum açma komutu kullanılarak), SHELL dilinin yorumlayıcısı aranır. Kullanıcı kayıt kılavuzu bir .profile dosyası içeriyorsa, yorumlayıcı bu dosyayı uçbirimden en az bir komut alınmadan önce yürütür (.profile dosyasının komutlar içerdiği varsayılır). Çağrıldığında, aşağıdaki anahtarlar belirtilebilir: -c dize Komutlar, belirtilen dizeden okunur. -s Komutlar standart girdi dosyasından okunur. Tercüman mesajları standart tanı dosyasına yazılır. -i Etkileşimli mod. "0" parametresinin ilk karakteri bir - ise, komutlar .profile dosyasından okunur.

YAZILIM YAPILARI \u003d\u003d\u003d

Herhangi bir programlama dilinde olduğu gibi, kabuk metni yorumlar içerebilir. Bunun için "#" sembolü kullanılır. Bu sembolün solundaki satırda (komut dosyasında) olan her şey yorumlayıcı tarafından bir yorum olarak yorumlanır. Örneğin,

# Bu bir yorumdur.

Herhangi bir prosedürel programlama dilinde olduğu gibi, kabuk dilinin operatörleri vardır. Bir dizi operatör, komut yürütme sırasını kontrol etmenize izin verir. Bu tür operatörlerde, genellikle hesaplamaların devamının yönünü belirleyen durumu kontrol etmek gerekir.

Test ("") komutu

Test komutu, bazı koşulların karşılandığını doğrular. Bu (yerleşik) komut, kabuk seçimi ve döngü deyimleri oluşturmak için kullanılır. Olası iki komut biçimi:

Test koşulu

[durum]

ikinci seçeneği kullanacağız, yani Koşuldan önce "test" kelimesini yazmak yerine, koşulu, programcıların daha aşina olduğu parantez içine alacağız. Aslında, kabuk bu komutu, "test" komutuna karşılık gelen kelime olarak "[" açma parantezinden tanıyacaktır. Parantezler ve içerdikleri durum arasında boşluklar olmalıdır. Değerler ve karşılaştırma veya işlem karakteri arasında boşluklar olmalıdır Kabuk, farklı "tipler" koşullarını kullanır. DOSYALARI DENETLEME KOŞULLARI: -f dosya dosyası "dosya" normal bir dosyadır; -d dosya dosyası "dosya" - dizin; -c dosya "dosya" özel bir dosyadır; -r dosyasının "dosya" dosyasını okuma izni vardır; -w dosyası "dosya" dosyasına yazma iznine sahiptir; -s dosya dosyası "dosya" boş değil.

SATIR KONTROL KOŞULLARI: str1 \u003d str2 dizeleri "str1" ve "str2" eşleşir; str1! \u003d str2 dizeleri "str1" ve "str2" eşleşmiyor; -n str1 string "str1" var (boş değil); -z str1 dizesi "str1" mevcut değil (boş). Örnekler.

X \u003d "kim kimdir"; ihracat x; ["kim kimdir" \u003d "$ x"]; echo $? 0 x \u003d abc; ihracat x; [abc \u003d "$ x"]; echo $? 0 x \u003d abc; ihracat x; [-n "x $"]; echo $? 0 x \u003d ""; ihracat x; [-n "x $"]; echo $? bir

Ek olarak, bir koşul yerine kullanılabilecek iki standart koşul değeri vardır (parantez gerekmez). TAM SAYILARIN KARŞILAŞTIRILMASI İÇİN KOŞULLAR: x -eq y "x" "y" ye eşittir, x -ne y "x" "y" ye eşit değildir, x -gt y "x" "y" den büyüktür, x -ge y "x" büyüktür veya "y" ye eşit, x -lt y "x" "y" den küçük, x -le y "x" "y" den küçük veya eşit. KARMAŞIK KOŞULLAR: Tipik mantıksal işlemlerin yardımıyla uygulanır :! (not) çıkış kodunun değerini tersine çevirir. -o (veya) mantıksal OR ile eşleşir. -a (ve) mantıksal AND ile eşleşir.

Koşullu "eğer" ifadesi

Genel olarak, "if" ifadesinin yapısı vardır

Koşul varsa, listeleyin

Burada "elif", "else if" için bir kısaltmadır, tam olanla birlikte kullanılabilir, yani herhangi bir sayıda "if" ifadesinin (ve diğer ifadelerin) yuvalanmasına izin verilir. Elbette, her durumdaki "liste" bu bağlamda anlamlı ve geçerli olmalıdır. Bu operatörün en kesik yapısı

Koşul ise fi'yi listeleyin

koşul yerine getirilmişse (kural olarak, bir com, tamamlama kodu "0" alınır, ardından "liste" çalıştırılır, aksi takdirde atlanır. Örnekler. "if-1" yazılsın

[1 $ - 2 $]

sonra pwd else echo $ 0: Merhaba!

O zaman if-1 12 11'i aramak / home / sae / STUDY / SHELL verecek ve if-1 12 13 if-1 verecek: Merhaba!

Operatörü ara ("vaka")

"Case" seçim ifadesi şu yapıya sahiptir:

Durum dizesi

desen) komut listesi ;; desen) komut listesi ;; ... desen) komut listesi ;;

Burada "case", "in" ve "esac" hizmet sözcükleridir. "Dize" (tek bir karakter olabilir) "desen" ile karşılaştırılır. Ardından seçilen satırın "komut listesi" yürütülür. Seçim satırlarının sonunda sıra dışı görünüyorlar ";;", ancak buraya ";" yazın. bir hata olur. Her alternatif için birkaç komut çalıştırılabilir. Bu komutlar tek satırda yazılırsa, ";" komut ayırıcı olarak kullanılacaktır. Genellikle seçimin son satırı "*" desenine sahiptir ve "durumda" yapıda "herhangi bir değer" anlamına gelir. Bu dizge, değişkenin değeri (burada $ z) önceden yazılmış kalıpların hiçbiriyle ")" ile ayrılmış değilse seçilir. Değerler, yazıldıkları sırayla görüntülenir.

Numaralandırılmış döngü operatörü ("for")

"For" döngü operatörü şu yapıya sahiptir:

İsim için

"for" un döngünün türünü belirleyen bir işlev sözcüğü olduğu, "do" ve "done" döngü gövdesini vurgulayan işlev sözcükleridir. "Lsort" komutunun bir toplu iş dosyasıyla temsil edilmesini sağlayın

Dosya_1 dosya_2 dosya_3 içindeki i için proc_sort $ i yaptım

Bu örnekte, "i" adı bir döngü parametresi olarak işlev görür. Bu ad, sıralı olarak listelenen değerlere (i \u003d dosya_1, i \u003d dosya_2, i \u003d dosya_3) atanan bir kabuk değişkeni olarak düşünülebilir ve "proc_sort" komutu bir döngüde yürütülür. Genellikle "i in * için" formu kullanılır, bu "geçerli dizindeki tüm dosyalar için" anlamına gelir. "Proc_sort" da bir toplu iş dosyasıyla temsil edilsin

Kedi $ 1 | sırala | tee / dev / lp\u003e $ (1) _sorted

şunlar. belirtilen dosyalar sırayla sıralanır, sıralama sonuçları yazdırılır ("/ dev / lp") ve file_1_sorted file_2_sorted ve file_3_sorted dosyalarına gönderilir

Gerçek koşullu döngü operatörü ("while")

Aynı zamanda hesaplamalar da sağlayan "while" yapısı, parametre değerlerinin tam listesi önceden bilinmediğinde veya bu listenin bir döngüdeki hesaplamalar sonucunda elde edilmesi gerektiğinde tercih edilir. "While" döngü operatörü şu yapıya sahiptir:

Durum iken

"while" gerçek koşullu döngü türünü tanımlayan bir işlev kelimesi olduğunda yapılan komutların listesi. Döngünün gövdesindeki komutların listesi ("yap" ve "tamamlandı" arasında), koşul doğru kalana kadar (yani, döngünün gövdesindeki son komutun tamamlama kodu "0" olur) veya döngü özel komutlarla (döngü içerisinden kesintiye uğratılmaz) tekrarlanır ( "ara", "devam et" veya "çık"). Döngüye ilk kez girerken koşul karşılanmalıdır. "Break [n]" komutu döngüden çıkmanıza izin verir. "N" eksikse, "break 1" ile eşdeğerdir. "n", çıkılacak iç içe döngülerin sayısını belirtir, örneğin, "ara 3" - üç iç içe döngüden çıkış. "Kes" komutundan farklı olarak, "devam et [n]" komutu yalnızca mevcut döngünün yürütülmesini sonlandırır ve döngünün BAŞLANGICINA geri döner. Bir parametre ile de olabilir. Örneğin, "devam 2", ikinci (derinlikten sayılıyorsa) yuvalanmış döngünün başlangıcına çıkmak anlamına gelir. "Exit [n]" komutu, "0" veya "n" dönüş koduyla ("n" parametresi belirtilmişse) prosedürden tamamen çıkmanıza izin verir. Bu komut sadece döngülerde kullanılamaz. Doğrusal bir komut dizisinde bile, (mevcut) hesaplamayı belirli bir noktada durdurmak için hata ayıklamada yararlı olabilir.

Yanlış koşullu döngü operatörü ("kadar")

"Until" döngü operatörü şu yapıya sahiptir:

Koşula kadar

yapılacak komutların listesi, burada "until" yanlış koşullu döngü türünü tanımlayan bir işlev sözcüğüdür. Döngünün gövdesindeki komutların listesi ("yap" ve "tamamlandı" arasında), koşul yanlış kalana veya döngü içeriden özel komutlarla ("kes", "devam et" veya "çıkış") kesilene kadar tekrarlanır. Döngüye ilk kez girerken koşul karşılanmamalıdır. "While" operatöründen farkı, döngü koşulunun yanlışlık için kontrol edilmesidir (döngü gövdesinin son komutunun sıfır olmayan bir sonlandırma kodu için), döngü gövdesi komutlarının her birinden (ilk! Dahil!) Sonra kontrol edilir. Misal.

Yanlış yapana kadar

x oku, eğer [$ x \u003d 5] o zaman yeterli yankı yap; break else yankı biraz daha fi

Burada sonsuz döngülü bir program kelimelerin girilmesini (ekranda "biraz daha" ifadesini tekrarlayarak) "5" girilene kadar bekler. Bundan sonra, "yeterli" verilir ve "kır" komutu döngü yürütmesini sonlandırır.

Boş operatör

Boş bir ifadenin biçimi vardır

:

Hiçbir şey yapmamak. "0" değerini döndürür. "

Kabuk işlevleri

Bu işlev, daha sonra çalıştırılmak üzere bir kabuk komutları listesi hazırlamanıza olanak tanır. İşlev açıklaması şöyle görünür:

İsim () (komut listesi)

daha sonra işlev adıyla çağrılır. Fonksiyon yeni bir süreç yaratmaz. İlgili sürecin ortamında çalışır. Bir işlevin argümanları onun konumsal parametreleri haline gelir; işlevin adı boş parametresidir. İşlevin yürütülmesi, "dönüş [n]" operatörü tarafından kesintiye uğratılabilir, burada (isteğe bağlı) "n" dönüş kodudur.

Kesinti işleme ("tuzak")

Bazen programın çalışmasını kesintiye karşı korumak gerekir. Çoğu zaman, sinyallere karşılık gelen aşağıdaki kesintilerle karşılaşmanız gerekir: 0 yorumlayıcıdan çıkış, 1 kapatma (uzak abonenin bağlantısını kesme), 2 , 9 imha (yakalanmadı), 15 infazın sonu. Kesintilere karşı koruma sağlamak için, şu biçimde bir "tuzak" komutu vardır:

Tuzak "komut listesi" sinyalleri

Sistem, sinyalleri "sinyaller" içinde bir boşlukta listelenen kesintilerle karşılaşırsa, "komut listesi" yürütülür, bundan sonra (komut listesinde "çıkış" komutu yürütülmemişse), kontrol kesme noktasına geri döner ve komut dosyasının yürütülmesine devam eder. Örneğin, bir toplu iş dosyasının yürütülmesini kesintiye uğratmadan önce "/ tmp" içindeki dosyaları silmeniz gerekiyorsa, bu "trap" komutuyla yapılabilir:

Tuzak "rm / tmp / *; çıkış 1" 1 2 15

dosyadaki diğer komutlardan önce gelen. Burada, dosyaları sildikten sonra toplu iş dosyasından "çıkış" gerçekleştirilecektir.

Ek açıklama: Kabuk kavramı. Komut mermilerine genel bakış. Bash kabuğu. İşin özellikleri (komut geçmişi, operatör "!", Bir tuşa basarak yapılan işlemler ). Konsolda çoklu görev. Görevler. İş yönetimi. Midnight Commander ortam değişkenleri

Dersin seyri

1. Linux ve Unix dünyasında, bir bilgisayarda çalışmak ayrılmaz bir şekilde kavramla bağlantılıdır komut kabuğu - kullanıcının komutları girerek ve çalıştırarak sistemle etkileşime girmesine izin veren bir program. Her şeye rağmen, komut kabuğu düzenli bir programdır. Dosyada varsayılan kabuk olarak ayarlayarak bunu kanıtlayabilirsiniz. passwd kullanıcı için farklı bir program. Ancak sistemin onu bir kabuk olarak bilmesi için, mutlak dosya adını eklemeniz gerekir. / etc / shells.

Linux birkaç kabukla birlikte gelir, bileşimleri dağıtıma bağlı olarak değişebilir, ancak her zaman bulabilirsiniz:

Bourne Shell (sh) - en eski ve en yaygın komut kabuğu Unix sistemleri için. Kullanmayan bir Unix sistemi yoktur.

Bourne Again Shell (bash), genişletilmiş bir Bourne Kabuğudur. Pek çok hoş avantajı var, bu yüzden son zamanlarda bu kadar popüler hale geldi. Neredeyse tüm Linux dağıtımları için "varsayılan" kabuktur.

Ayrıca popüler görünümler:

csh - komut sistemi C programlama diline yakın olan bir kabuk

tcsh, komut sistemi Tcl programlama diline benzeyen bir kabuktur.

zsh muhtemelen en güçlü kabuktur. Sh (bourne kabuğu) 'nun bir uzantısıdır.

Linux varsayılan olarak bash kullandığından, bunun hakkında konuşacağız.

2. Komut kabuğu bash, başlangıçta Bourne Kabuğunun serbest muadili idi. Daha sonra yetenekleri büyüdüğünde bağımsız bir ürün olarak kabul edildi. Bash'in temel özellikleri şunlardır:

Tablo 1.1.
Fırsat Yorum Yap
1 Bir dizeyi düzenleme Yeniden yazmak yerine girilen komutu düzenleme yeteneği
2 Kanal organizasyonu Fırsat g / Ç yönlendirmeleri, gerçekleştirilen görevler arasında kanalların düzenlenmesi
3 Kullanım kolaylığı Komut takma adlarını, komut geçmişini, otomatik tamamlamayı kullanma
4 İş yönetimi Arka plan işleri oluşturma ve yönetme yeteneği
5 Özelleştirme esnekliği Her kullanıcı için ayrı ayrı oturum açmak için komut dosyaları kullanma, ortam değişkenleri

G / Ç yeniden yönlendirmesini ve boruları Ders 8'de daha sonra öğreneceğiz. Bu nedenle, bu noktayı atlayacağız. Ama bash içinde çalışmanın özellikleri, sağladığı avantajlar hakkında daha detaylı konuşalım.

Bash, kullanıcı tarafından yazılan tüm komutları otomatik olarak bir dosyaya yazar ~ / .bash_history... Geçmiş komutu, bu dosyayı yönetmek için kullanılır. tarih yerleşik komut bash. Yani, bu komuta karşılık gelen çalıştırılabilir bir dosya yoktur. Kendisi komut kabuğu tüm eylemleri gerçekleştirir. Parametre olmadan girilir, bu dosyada saklanan tüm komutları listeler ve cat ~ / .bash_history komutuyla aynıdır.

Komut geçmişi, yaygın olarak kullanılan komutlar kümesini basitleştirmek için mevcuttur. Komut geçmişi, tuşlarla liste boyunca kaydırılabilir <вверх> ve<вниз> .

Başka bir yol da komut satırına yazmaktır! ve komutu başlatın ve ... İlk harfleri yazılanlarla eşleşen geçmişten son komut çalıştırılacaktır. Örneğin:

$! / usr / usr / bin / perl ./ptest.pl Tamam $! xfonts bash :! xfonts: olay bulunamadı $

Ancak tarih henüz ihtiyacımız olan komutu içermiyorsa, girişi nasıl hızlandırabiliriz? Bu durumda anahtar bize yardımcı olacaktır. ... Komutun (veya dosya yolunun) ilk birkaç harfini yazdıktan sonra, ve Bash otomatik olarak komutunuzu (veya yol öğesini) tamamlayacaktır. Birkaç dosyanın uygun olduğu veya dosyalardan hiçbirinin uygun olmadığı durumda, sistem bip sesi çıkarır. Düğme tekrar basın, ardından birkaç dosya çıktığında - sistem bir liste görüntüler ve hiçbiri olmadığında - ses sinyalini tekrarlar

3. İlk dersten, Linux'un çoklu görev ortamı olduğunu hatırlamış olmalısınız. Ancak şimdiye kadar, çoklu görev özelliğinden hala yararlanamadınız. İlk bakışta, konsolun sistemin çoklu görev yeteneklerinin kullanımına izin vermediği ve sadece grafiksel bir ortamda aynı anda iki veya daha fazla programı çalıştırmanın mümkün olduğu görülüyor. Ama durum bu değil! Konsol da çoklu görev yapıyor.

İlk olarak, her birinde bir program açarak birden fazla konsol açabilirsiniz. Konsollar arasında geçiş tuşları kullanılarak yapılacaktır Ctrl + nerede x - konsol numarası.

Ve tek bir konsolda bile, iş yönetimi komutlarının yardımıyla çok görevli bir sistemden tam olarak yararlanabilirsiniz.

- bir işleme kesilmemiş bir sinyal gönderen bir tuş kombinasyonu sigstop... Kontrolü komut satırına aktarmak için işlemin yürütülmesini durdurur.

& komutu - komuttan sonraki & işareti, arka planda çalışmasına izin verir.

işler - Mevcut kabuk işlerini listeler.

bg<#j> - görev #j'yi arka plana koyar. Bundan önce, görev tuş kombinasyonu ile durdurulmalıdır. ... Şu anda tercümanın yalnızca bir görevi varsa, numara atlanabilir.

fg<#j> - #j işini ön planda yürütme moduna getirir. İş, bir tuş kombinasyonu ile durdurulmalıdır veya arka planda olun. Şu anda tercümanın yalnızca bir görevi varsa, numara atlanabilir.

$ man bash ^ Z + Durdurulan adam bash $ vim ^ Z vim + Durduruldu vim $ bg 1 + adam bash ve $ işler + Durdurulan adam bash + Durduruldu vim $ fg 2 + vim $ fg + man bash $

4. Ortam Değişkenleri - tercihlerinizi gösteren sistem bilgileri, örneğin metin düzeltici varsayılan, çalıştırılabilir dosyalar vb. için arama yolları ve ayrıca kullanıcı, sistem ve kabuk kimlik bilgileri kullanıcı adı, kabuk ve diğer programlar tarafından kullanılan Linux sürümü vb.

Kullanıcı tarafından yaygın olarak kullanılan değişkenler şunlardır:

PATH - değişken, sistemin yürütülebilir dosyaları araması gereken yolları içerir. göreceli yol onlara.

PWD - bu değişken, geçerli dizinin tam adını içerir.

HOME - değişken tam yolu içerir kullanıcının ana dizini.

HOSTNAME - değişken bilgisayarın adını içerir.

LOGNAME - içerir kullanıcı adı

SHELL - mevcut oturumda çalışan kabuğun adını içerir.

USER - içerir kullanıcı adıkimin oturumu şimdi açık.

Sistemde kurulu değişkenlerin listesi parametreler olmadan girilen dışa aktarma komutu ile görülebilir.

Bash kabuğunun kendi değişkenleri vardır. Yerel değişkenlerin sistem değişkenleri haline gelmeleri için aynı dışa aktarma komutu kullanılarak dışa aktarılmaları gerekir.Örneğin:

$ export declare -x HOME \u003d "/ home / gserg" declare -x HOSTNAME \u003d "WebMedia" bildirimi -x LANG \u003d "ru_RU.KOI8-R" declare -x LOGNAME \u003d "gserg" bildirimi -x PATH \u003d "/ bin: / usr / bin: / usr / local / bin: / home / gserg / bin "declare -x PWD \u003d" / home / gserg "declare -x SHELL \u003d" / bin / bash "beyan -x TERM \u003d" Eterm "bildirimi -x USER \u003d "gserg" $ EDITOR \u003d / bin / vim $ export EDITOR $ export declare -x EDITOR \u003d "/ bin / vim" declare -x HOME \u003d "/ home / gserg" declare -x HOSTNAME \u003d "WebMedia" bildirimi -x LANG \u003d "ru_RU.KOI8-R" beyan -x LOGNAME \u003d "gserg" beyan -x PATH \u003d "/ bin: / usr / bin: / usr / local / bin: / home / gserg / bin:" beyan - x PWD \u003d "/ home / gserg" beyan -x KABUK \u003d "/ bin / bash" beyan -x TERM \u003d "Eterm" -x KULLANICI \u003d "gserg" $

Takım ayarlanmadı sistem değişkenini kaldırır. Örneğin:

$ unset EDITOR $ export declare -x HOME \u003d "/ home / gserg" declare -x HOSTNAME \u003d "WebMedia" bildirimi -x LANG \u003d "ru_RU.KOI8-R" declare -x LOGNAME \u003d "gserg" declare -x PATH \u003d " / bin: / usr / bin: / usr / local / bin: / home / gserg / bin: "declare -x PWD \u003d" / home / gserg "declare -x SHELL \u003d" / bin / bash "beyan -x TERM \u003d "Eterm" beyan -x USER \u003d "gserg" $

5. Bugünün dersinde sizi biraz standart olmayan başka bir komut kabuğuyla tanıştıracağız Gece yarısı komutanı... Değil komut kabuğu her zamanki anlamda. Bu bir metin dosyası yöneticisidir - analog Norton Commander veya Irak. Gece yarısı komutanı mc komutu ile başlatılır. Yetenekleri hakkında konuşacağız.

Ekran Geceyarısı komutanı "a iki kısma ayrılmıştır. Neredeyse tüm ekran alanı, dizinlerin ve dosyaların bir listesini içeren iki panel tarafından işgal edilir. Varsayılan olarak, ekranın alt kısmındaki ikinci satır, normal kabuk komutlarını çalıştırabileceğiniz komut satırıdır ve alt satırda işlev tuşları için ipuçları ( F1-F10). En üstteki sembol satırı, çeşitli işlevleri gerçekleştirebileceğiniz bir menü içerir. Menüyü kullanmak için gerekli öğeye tıklayabilir veya tuşuna basabilirsiniz. F9 ve anahtarları kullanarak imleç kontrolü istenen öğeyi seçin.

Paneller Gece yarısı komutanı iki dizinin aynı anda görüntülenmesini sağlar. Panellerden biri aktiftir (kullanıcının içindeki dosyalar ve dizinlerle belirli eylemleri gerçekleştirebilmesi anlamında). Etkin panelde, dosyalardan veya dizinden birinin adı vurgulanır ve üst satırdaki panel başlığı vurgulanır. Başlığın adı, o anda görüntülenen dizinin adıyla aynıdır. Hemen hemen tüm işlemler aktif panelde gerçekleştirilir. Transfer gibi bazı işlemler veya dosyaları kopyala pasif bir paneli kopyalamak, taşımak vb. için bir yer olarak kullanın.

Şimdi birlikte çalışmanıza yardımcı olacak temel klavye kısayollarından bahsedelim. Geceyarısı komutanı "ohm.

aktif paneli değiştirmek için tuşları kullanın veya +

dosyayı işaretlemek için veya +

tıklayın yardım için

dosya görüntüleyiciyi arayacak

üzerinden dosyayı düzenleyeceksin

dosyayı kopyalamanıza izin verir.

bir dosyayı taşı veya yeniden adlandır

dizin oluştur

Anahtar dosyayı ve / veya dizini kaldıracak

, daha önce de belirtildiği gibi, menüye erişimi açar.

- çıkmanıza izin verecek Gece yarısı komutanı.

işaretçiyi dosya listesinin başlangıcına taşır,

- ters - listenin sonuna.

ve göstergenin konumunu sırasıyla bir sayfa yukarı ve aşağı değiştirin.

Anahtar <*> ek klavyede, dosya seçimini tersine çevirmenize izin verir (dizinleri etkilemez)

Anahtar <+> ek klavyede, dosyaları maskeyle işaretler ve <-> dosyaların işaretini maskeyle kaldırın.

+ - dizin içeriğini güncelleyin (diskten veya ağdan yeniden okuyarak)

+ - sağ ve sol panelleri değiştirin.

+ - panelleri çıkarın / iade edin.

İşi yapmak için klavye kısayolları en uygun araç olsa da Geceyarısı komutanı "ohm olabildiğince hızlı ve rahat bir şekilde, yeni başlayanların hepsini aynı anda öğrenmeleri oldukça zordur. Bu boşluğu doldurmak ve klavye kısayollarının eksik olduğu diğer özellikleri eklemek için, Gece yarısı komutanı bir menüye sahiptir (çağıran F9).

Menü öğelerden oluşur: Sol Panel, Dosya, Komut, Seçenekler, Sağ Panel.

"Sol / Sağ Panel" - bu menü öğeleri tamamen aynıdır. Aralarındaki tek fark, gerçekleştirilen eylemlerin sol veya sağ panele yönlendirilecek olmasıdır.

"Liste biçimi" - dosya / dizin listesinin görüntüleneceği görünümü seçebileceğiniz bir iletişim kutusu açar. Standart, kısa ve genişletilmiş biçimler arasından seçim yapın. Ancak bu penceredeki kullanıcı, "Kullanıcı tanımlı" radyo düğmesini seçerek panel görünümünü kendisine uygun şekilde tanımlayabilir.

"Hızlı Görünüm" - paneli, bitişik panelde seçilen dosyaların otomatik görüntüleme moduna geçirir. Odak otomatik olarak karşı bölmeye geçer.

"Bilgi" - paneli, bitişik panelde vurgulanan dosya hakkındaki konum, erişim hakları ve sahip gibi bilgileri görüntüleyecek şekilde değiştirir, dosya sistemi ve bulunduğu cihaz, bu dosyayla ilişkili sabit bağlantıların sayısı ve dosyanın bulunduğu cihazla ilgili bilgiler,

"Odun" - çevirir Gece yarısı komutanı Windows'un gezgin moduna benzer bir moda. Komutun uygulandığı panelde "Odun", okları kullanarak gezinebileceğiniz bir dizin ağacı oluşturulur. imleç kontrolü, anahtarlar PageUp, PageDown, Home, End... Bitişik panel, ağaçta vurgulanan dizinin içeriğini görüntüler.

"Sıralama düzeni" - Ad, uzantı, düzenleme zamanı, erişim zamanı, öznitelik değişim zamanı, boyut, düğüm (dosyanın bulunduğu yer) gibi listedeki dosya ve dizinlerin sıralanmasının gerçekleştirileceği bir öznitelik seçebileceğiniz bir iletişim kutusu açar. Dosyaları kategorize etmeden bırakabilir, büyük / küçük harfe duyarlı olarak veya ters sırada sıralayabilirsiniz.

"Filtrele" - iletişim kutusuna girilen normal ifadeyi kullanarak panelde görüntülenecek dosya adlarını seçmenize olanak sağlar.

"FTP bağlantısı" - bu komutu kullanarak, protokolü kullanarak uzak (veya hatta yerel) bir bilgisayarla bağlantı kurabilirsiniz. ftp... Yalnızca uzak sunucunun adresi girilirse, Gece yarısı komutanı anonim bir bağlantı kurmaya çalışacak. Düğümü tanımlamak için kullanılan tam satır şu şekildedir:

ftp: kullanıcı adı: parola @ sunucu_adresi: bağlantı noktası / dizin_sunucu

Bir bağlantı kurduktan sonra ile çalışın uzak dosya sistemi yerel bir dosya sistemiyle çalışmaya benzer şekilde gerçekleşir.

"Kabuk bağlantısı" - protokolü kullanarak bir ağ bağlantısı açmanıza izin verir BALIK (Kabuk üzerinden FIle transferi - kabuk yoluyla dosya aktarımı). BALIK protokolleri kullanır RSH (Uzak Kabuk - uzak kabuk) veya SSH (Güvenli Kabuk - korumalı kabuk, analog RSH, ancak iletilen verilerin şifrelenmesi desteği ile). Kullanıcının uzak ana bilgisayarı belirtebileceği tam satır şudur:

sh: kullanıcı_adı @ sunucu_adresi: seçenekler / dizin_sunucu

Parametre kullanıcı adı, seçenekler ve directory_on_server isteğe bağlı. Eğer kullanıcı adı belirtilmemişse Gece yarısı komutanı yerel bilgisayarda kullanılan kullanıcı adı ile uzaktaki sistemde oturum açmayı deneyecek.

"Revize Et" - tuş kombinasyonunun analogu + - Geçerli paneldeki dosya ve dizin listesinin güncellemesini, bunları diskten veya ağ üzerinden yeniden okuyarak çağırır.

"Dosya" - Menüde, dosya ve dizinleri işlemek için temel işlevler sağlayan bir bölüm, örneğin:

"Kullanıcı menüsü" - kullanıcı tarafından ayarlanan menüyü aramanızı sağlar. Anahtar tarafından da çağrılır .

"Dosyayı görüntüle" - basılarak gerçekleştirilen işlevin analogu ... Vurgulanan dosyayı görüntülemenizi (veya dizine gitmenizi) sağlar. Metin biçimleri, arşiv, Winword DOC, Linux çalıştırılabilirleri gibi birçok biçimi destekler.

"Dosya görüntüleniyor ..." - önceki öğeyle aynıdır, ancak vurgulanan dosyayı etkilemez, ancak adı ve yolu iletişim kutusuna girilecek dosyayı.

"Ekibi Görüntüle" - bir komutu çalıştırmanıza ve görüntülemenize izin verir standart çıkış dosya görüntüleme modunda.

"Düzenleme" - dosyayı düzenlemek için açar. Basit yerleşik metin düzeltici yapılandırma dosyalarını, programların kaynak kodlarını vb. düzenlemek için yeterli yerleşik işlevler setine ve yerleşik otomatik sözdizimi vurgulama düzenlemeyi daha rahat ve düzenlenmiş metinleri daha okunaklı hale getirir.

"Kopyala" - dosyayı aktif panelden pasif olana kopyalar. Tarafından çağrılan işlevin bir analogu ... Varsayılan olarak, aktif panelde vurgulanan dosyanın (veya dosya grubunun) kopyalanmış olduğu kabul edilir ve hedef, pasif panelde açılan dizindir. Bu, bu komut çağırıldıktan sonra açılan iletişim kutusundaki alan değerleri düzeltilerek değiştirilebilir.

"Erişim hakları" - iletişim kutusundaki bir dosyaya (veya bir dosya grubuna) erişim haklarını değiştirmenize olanak sağlar.

"Sembolik bağlantı" - sembolik bir bağlantı oluşturur. Varsayılan olarak, adreslenebilir dosya aktif panelde vurgulanan dosyadır ve oluşturulan bağlantı aynı ada sahip olacak ve pasif panelde açılan dizinde yer alacaktır. Kullanıcı bunu açılış diyalog kutusunda değiştirebilir.

"Sahip / Grup" - dosyanın / dizinin ait olduğu sahibi ve / veya grubu değiştirir.

"Haklar (genişletilmiş)" - dosyanın ve sahibinin ve / veya grubunun erişim haklarını aynı anda değiştirmenize olanak sağlar. Erişim hakları, sahip, grup ve tüm kullanıcılar için üç rwx dizisi olarak temsil edilir.

"Adını değiştirmek" - bir dosyayı yeniden adlandırmanıza / taşımanıza olanak verir. Tarafından çağrılan işlevin bir analogu ... Varsayılan olarak, etkin panelde vurgulanan dosya (veya dosya grubu) taşınmış / yeniden adlandırılmış kabul edilir ve hedef, pasif panelde açılan dizindir. Bu, bu komut çağırıldıktan sonra açılan iletişim kutusundaki alan değerleri düzeltilerek değiştirilebilir.

"Dizin oluştur" - bir dizin oluşturur. Tarafından çağrılan işlevin bir analogu ... Varsayılan olarak dizin, aktif panelde açık olan dizinde oluşturulur. Bu, açılan iletişim kutusunda oluşturulmakta olan dizinin tam yolunu belirterek değiştirilebilir.

"Kaldırma" - bir dosya / dosya grubunu / dizini siler. Tarafından çağrılan işlevin bir analogu .

"Dizini değiştir" - mevcut dizini değiştirir. Bash kabuğunun cd komutuna benzer. İletişim kutusuna gerekli dizin girilir.

"Grubu işaretle" - Etkin panelde açılan dizinde bir grup dosyayı maskeye göre işaretler. İle çağrılan işlevin analogu <+> ek klavyede.




Bilgisayar yardım sitesi

© Telif Hakkı 2020,
rzdoro.ru - Bilgisayar yardım sitesi

  • Kategoriler
  • Dizüstü bilgisayarlar
  • Windows 8
  • Ses videosu
  • Aygıtlar
  • Miscellanea
  • Linux
  • internet
  • Microsoft Office