Asas pengaturcaraan dalam shell arahan shell. Bahasa Shell (sh, bash, ksh dan lain-lain)

Seperti yang dinyatakan di atas, untuk membina algoritma sewenang-wenangnya adalah perlu untuk mempunyai pengendali semakan keadaan. Shell bash menyokong pernyataan pemilihan jikakemudianlain dan kes, serta pengendali gelung untuk,sementara, sehingga, kerana ia bertukar menjadi bahasa yang berkuasa pengaturcaraan.

5.8.1 Operator jika Dan ujian(atau )

Reka bentuk pengendali bersyarat dalam bentuk yang sedikit dipermudahkan ia kelihatan seperti ini:

jika senarai1 maka senarai2 lagi senarai3 fi

di mana senarai1, senarai2 dan senarai3 ialah urutan perintah yang dipisahkan dengan koma dan berakhir dengan koma bertitik atau aksara baris baharu. Di samping itu, urutan ini boleh disertakan pendakap gigi: (senarai).

Operator jika menyemak nilai yang dikembalikan oleh arahan daripada senarai1. Jika terdapat beberapa arahan dalam senarai ini, maka nilai yang dikembalikan oleh arahan terakhir dalam senarai akan diperiksa. Jika nilai ini ialah 0, maka arahan dari senarai2; jika nilai ini bukan sifar, arahan daripada senarai3. Nilai yang dikembalikan oleh pengendali kompaun sedemikian jika, adalah sama dengan nilai yang dihasilkan oleh arahan terakhir dalam urutan yang sedang dilaksanakan.

Format arahan penuh jika mempunyai bentuk:

jika senarai maka senaraikan [ senarai elif kemudian senarai ] ... [ senarai lain ] fi

(di sini kurungan segi empat sama hanya bermakna bahawa apa yang terkandung di dalamnya tidak semestinya ada dalam operator).

Sebagai ungkapan yang datang serta-merta selepas itu jika atau elif, arahan yang kerap digunakan ujian, yang juga boleh dilambangkan dengan kurungan segi empat sama. Pasukan ujian menilai beberapa ungkapan dan mengembalikan 0 jika ungkapan itu benar dan 1 sebaliknya. Ungkapan dihantar ke program ujian sebagai hujah. Daripada menulis

ungkapan ujian,

Anda boleh melampirkan ungkapan dalam kurungan segi empat sama:

[ungkapan].

Sila ambil perhatian bahawa ujian dan [ ialah dua nama program yang sama, bukan beberapa penukaran ajaib yang dilakukan oleh shell bash(hanya sintaks [ memerlukan kurungan penutup dibekalkan). Perhatikan juga bahawa bukannya ujian dalam reka bentuk jika mana-mana program boleh digunakan.

Sebagai kesimpulan, kami memberi contoh menggunakan operator jika:

jika [ -e textmode2.htm ] ; kemudian

ls textmode*

lain

pwd

Mengenai pengendali ujian(atau […]) kita perlu mengadakan perbualan khas.

5.8.2 Operator ujian dan bersyarat

Ungkapan bersyarat yang digunakan dalam pernyataan ujian, adalah berdasarkan pengesahan atribut fail, perbandingan rentetan dan perbandingan aritmetik biasa. Ungkapan Kompleks dibina daripada operasi unari atau binari berikut (“bata asas”):

    Sebuah fail

Benar jika fail bernama fail wujud.

    B fail

Benar jika fail wujud dan sedang fail khas peranti blok.

    C fail

Benar jika fail wujud dan merupakan fail peranti aksara khas.

    D fail

Benar jika fail wujud dan merupakan direktori.

    E fail

Benar jika fail bernama fail wujud.

    F fail

Benar jika fail bernama fail wujud dan merupakan fail biasa.

    G fail

Benar jika fail bernama fail wujud dan bit perubahan kumpulannya ditetapkan.

    Fail H atau fail -L

Benar jika fail bernama fail wujud dan merupakan pautan simbolik.

    K fail

Benar jika fail bernama fail wujud dan bit "melekit"nya ditetapkan.

    fail P

Benar jika fail bernama fail wujud dan sedang bernama paip(FIFO).

    fail R

Benar jika fail bernama fail wujud dan telah membaca set kebenaran

    S fail

Benar jika fail bernama fail wujud dan saiznya lebih besar daripada sifar.

    Tfd

Benar jika deskriptor fail fd terbuka dan menunjuk ke terminal.

    fail U

Benar jika fail bernama fail wujud dan bit pengguna perubahannya ditetapkan.

    W fail

Benar jika fail bernama fail wujud dan mempunyai kebenaran menulis ditetapkan.

    fail X

Benar jika fail bernama fail wujud dan boleh dilaksanakan.

    O fail

Benar jika fail bernama fail wujud dan dimiliki oleh pengguna yang ditunjukkan oleh ID pengguna yang berkesan.

    G fail

Benar jika fail bernama fail wujud dan tergolong dalam kumpulan yang dikenal pasti oleh ID kumpulan berkesan.

    S fail

Benar jika fail bernama fail wujud dan merupakan soket.

    N fail

Benar jika fail bernama fail wujud dan telah berubah sejak kali terakhir dibaca.

    fail1 -nt fail2

Benar jika fail fail1 mempunyai masa pengubahsuaian yang lebih lewat daripada fail2.

    fail1 -ot fail2

Benar jika fail fail1 lebih tua daripada fail2.

    fail1 -ef fail2

Benar jika fail fail1 Dan fail2mempunyai peranti dan nombor inod yang sama(inod).

    Optname

Benar jika pilihan shell didayakan optname. Untuk penjelasan, lihat halaman lelaki bash.

    Rentetan Z

Benar jika panjang rentetan adalah sifar.

    N rentetan

Benar jika panjang rentetan itu bukan sifar.

    rentetan1 == rentetan2

Benar jika rentetannya sepadan. Sebaliknya == boleh digunakan = .

    rentetan1 != rentetan2

Benar jika rentetan tidak sepadan.

    rentetan1< string2

Benar jika talian rentetan1 secara leksikografi mendahului rentetan rentetan2(untuk tempat semasa).

    rentetan1 > rentetan2

Benar jika talian rentetan1 secara leksikografi datang selepas baris rentetan2(untuk tempat semasa).

    arg1 OP arg2

Di sini OP- eh maka salah satu operasi perbandingan aritmetik: -persamaan(sama dengan), -ne(tidak sama), -lt(kurang daripada), -le(kurang atau sama), -gt(lagi), -ge(lebih atau sama). Integer positif atau negatif boleh digunakan sebagai hujah.

Daripada ungkapan bersyarat asas ini anda boleh membina sekompleks yang anda suka menggunakan operasi logik biasa NEGASI, DAN dan ATAU:

    !(ungkapan)

Operator penolakan Boolean.

    ungkapan1 -suatu ungkapan2

Pengendali Boolean DAN(DAN). Betul jika kedua-dua ungkapan itu benar.

    ungkapan1 -o ungkapan2

Pengendali Boolean ATAU(ATAU). Benar jika salah satu daripada dua ungkapan itu benar.

Ungkapan bersyarat yang sama digunakan dalam operator sementara Dan sehingga, yang akan kita lihat di bawah.

5.8.3 Operator kes

Format operator kes ialah:

perkataan kes dalam [ [(] pola [ | pola ] ...) senarai ;; ]...esac

Pasukan kes pertama menghasilkan peluasan perkataan perkataan, dan cuba memadankan keputusan dengan setiap sampel corak satu demi satu. Selepas padanan pertama ditemui, tiada semakan lanjut dilakukan; senarai arahan mengikut corak yang dijumpai padanan dilaksanakan. Nilai yang dikembalikan oleh pengendali ialah 0 jika tiada padanan corak ditemui. Jika tidak, nilai yang dihasilkan oleh arahan terakhir dalam senarai yang sepadan dikembalikan.

Contoh berikut menggunakan pernyataan kes diambil daripada skrip sistem /etc/rc.d/rc.sysinit.

kes "$UTC" dalam

ya|benar)

CLOCKFLAGS="$CLOCKFLAGS -u";

CLOCKDEF="$CLOCKDEF (utc)";

tidak|palsu)

CLOCKFLAGS="$CLOCKFLAGS --localtime";

CLOCKDEF="$CLOCKDEF (masa tempatan)";

esac

Jika pembolehubah menilai kepada ya atau benar, maka pasangan pertama perintah akan dilaksanakan, dan jika nilainya tidak atau palsu, pasangan kedua akan dilaksanakan.

5.8.4 Operator pilih

Operator pilih membolehkan anda mengatur interaksi interaktif dengan pengguna. Ia mempunyai format berikut:

pilih nama [dalam perkataan; ] senarai buat ; selesai

Pertama dari templat perkataan senarai perkataan yang sepadan dengan corak dihasilkan. Set perkataan ini dikeluarkan kepada ralat standard, dengan setiap perkataan diikuti oleh nombor siri. Jika corak perkataan ditinggalkan, parameter kedudukan diperoleh dengan cara yang sama. Gesaan PS3 standard kemudiannya dikeluarkan dan cangkerang menunggu baris untuk dimasukkan pada input standard. Jika rentetan yang dimasukkan mengandungi nombor yang sepadan dengan salah satu perkataan yang dipaparkan, maka pembolehubah nama diberikan nilai yang sama dengan perkataan itu. Jika baris kosong dimasukkan, nombor dan perkataan yang sepadan akan dipaparkan semula. Jika sebarang nilai lain dimasukkan, pembolehubah nama ditugaskan nilai nol. Rentetan yang dimasukkan oleh pengguna disimpan dalam pembolehubah BALAS. Senarai arahan senarai dilaksanakan dengan nilai pembolehubah yang dipilih nama.

Berikut ialah skrip kecil:

#!/bin/sh

echo "OS yang manakah anda lebih suka?"

pilih var dalam "Linux" "Gnu Hurd" "BSD Percuma" "Lain-lain"; buat

rehat

selesai

echo "Anda akan memilih $var"

OS mana yang anda suka?
1) Linux
2) Gnu Hurd
3) BSD percuma
4) Lain-lain
#?

Tekan mana-mana daripada 4 nombor yang dicadangkan (1,2,3,4). Jika anda memasukkan 1, sebagai contoh, anda akan melihat mesej:

"Adakah anda akan memilih Linux"

5.8.5 Operator untuk

Operator untuk berfungsi sedikit berbeza daripada dalam bahasa pengaturcaraan biasa. Daripada menyebabkan nilai beberapa pembolehubah meningkat atau menurun sebanyak satu setiap kali ia melalui gelung, ia memberikan nilai seterusnya daripada senarai perkataan yang diberikan kepada pembolehubah setiap kali ia melalui gelung. Secara umum, reka bentuk kelihatan seperti ini:

untuk nama dalam perkataan senarai lakukan.

Peraturan untuk membina senarai arahan ( senarai) adalah sama seperti dalam operator jika.

Contoh.

Skrip berikut mencipta fail foo_1, foo_2 dan foo_3:

untuk a dalam 1 2 3 ; buat

selesai

sentuh foo_$a Secara umum untuk kenyataan

mempunyai format:

untuk nama [dalam perkataan; ] senarai buat ; selesai perkataan Pertama, perkataan itu diturunkan nama selaras dengan peraturan pendedahan ungkapan yang diberikan di atas. Kemudian pembolehubah nilai yang terhasil diberikan satu demi satu, dan setiap kali senarai arahan dilaksanakan ist . jika" dalam perkataan senarai" tiada, maka senarai arahan

dilaksanakan sekali untuk setiap parameter kedudukan yang ditentukan. Linux mempunyai program seq untuk, yang mengambil dua nombor sebagai hujah dan menghasilkan urutan semua nombor yang terletak di antara nombor yang diberikan. Dengan arahan ini anda boleh memaksa bash V untuk berfungsi dengan cara yang sama seperti operator yang serupa bekerja dalam bahasa pengaturcaraan konvensional. Untuk melakukan ini, tulis sahaja kitaran

dengan cara berikut:

untuk a dalam $(seq 1 10); buat

selesai

fail kucing_$a " Perintah ini memaparkan kandungan 10 fail:

file_1", ..., "file_10". 5.8.6 Operator Dan sementara

Operator sementara sehingga jika berfungsi seperti senarai2, hanya melaksanakan pengendali daripada senarai

gelung berterusan selagi syarat adalah benar dan dibatalkan jika syarat itu tidak benar. Reka bentuknya kelihatan seperti ini:

manakala senarai1 buat senarai2 selesai.

manakala [ -d mydirectory ] ; buat

ls -l mydirectory >> logfile

echo -- SEPARATOR -- >> logfile

selesai

tidur 60

Operator sehingga Program sedemikian akan log kandungan direktori "mydirectory" setiap minit selagi direktori itu wujud. sementara:

serupa dengan operator

sehingga senarai1 buat senarai2 selesai. senarai1 Perbezaannya ialah keputusan dikembalikan apabila melaksanakan senarai pernyataan senarai2, diambil dengan penafian: senarai1 dilaksanakan jika arahan terakhir dalam senarai

mengembalikan status keluar bukan sifar.

5.8.7 Fungsi

Sintaks bash Shell membolehkan pengguna membuat. Fungsi berkelakuan dan digunakan sama seperti arahan shell biasa, bermakna kita boleh membuat arahan baharu sendiri. Fungsi-fungsi tersebut dibina seperti berikut:

nama fungsi() (senarai)

Dan perkataan fungsi tidak perlu, nama mentakrifkan nama fungsi yang mana ia boleh diakses, dan badan fungsi itu terdiri daripada senarai arahan senarai, terletak di antara ( dan ). Senarai arahan ini dilaksanakan setiap kali nama nama dinyatakan sebagai nama arahan untuk dipanggil. Ambil perhatian bahawa fungsi boleh ditakrifkan secara rekursif, jadi ia dibenarkan untuk memanggil fungsi yang kita takrifkan dalam dirinya sendiri.

Fungsi dilaksanakan dalam konteks shell semasa: proses baharu tidak dimulakan untuk mentafsir fungsi (tidak seperti melaksanakan skrip shell).

Hujah

Apabila fungsi dipanggil untuk pelaksanaan, hujah fungsi menjadi parameter kedudukan(parameter kedudukan) untuk tempoh fungsi. Mereka dirujuk sebagai $n, Di mana n— nombor hujah yang ingin kami akses. Penomboran hujah bermula pada 1, jadi $1 - ini adalah hujah pertama. Kita juga boleh mendapatkan semua hujah sekaligus dengan $* , dan bilangan hujah yang menggunakan $# . Parameter kedudukan 0 tidak berubah.

Jika arahan terbina dalam berlaku dalam badan fungsi kembali, pelaksanaan fungsi terganggu dan kawalan dipindahkan ke arahan selepas panggilan fungsi. Apabila fungsi menyelesaikan pelaksanaan, parameter kedudukan dan parameter khas # nilai yang mereka ada sebelum fungsi dimulakan dikembalikan.

Pembolehubah setempat (tempatan)

Jika kita ingin mencipta parameter tempatan, anda boleh menggunakan kata kunci tempatan. Sintaks untuk menentukannya adalah sama seperti untuk parameter biasa, hanya definisi didahului oleh kata kunci tempatan: tempatan nama=nilai.

Berikut ialah contoh menentukan fungsi yang melaksanakan perintah yang disebutkan di atas Linux mempunyai program:

seq()

tempatan I=$1;

manakala [ $2 != $I ]; buat

echo -n "$I";

I=$(($I + 1))

selesai;

gema $2

Sila ambil perhatian pilihan -n pengendali bergema, ia membatalkan peralihan kepada baris baru. Walaupun ini tidak penting untuk tujuan yang kami fikirkan di sini, ia mungkin berguna untuk menggunakan fungsi untuk tujuan lain.

Fungsi pengiraan faktor fakta

Satu lagi contoh:

fakta()

jika [ $1 = 0 ]; kemudian

gema 1;

lain

echo $(($1 * $(fakta $(($1 - 1)))))

Ini ialah fungsi faktorial, contoh fungsi rekursif. Perhatikan pengembangan aritmetik dan penggantian arahan.

V. Kostromin (kos dan rus-linux dot net) - 5.8. Shell sebagai bahasa pengaturcaraan

    Sistem pengendalian Keluarga Linux, seperti mana-mana OS lain, memerlukan kehadiran antara muka interaksi antara komponen sistem komputer dan pengguna akhir, iaitu, kehadiran tahap perisian yang menyediakan input arahan dan parameter untuk mendapatkan hasil yang diinginkan. begitu peringkat program mendapat nama "cangkang" atau, dalam bahasa Inggeris - cangkerang.

Apakah cangkerang?

Cangkang perintah ( cangkerang) menyediakan interaksi antara pengguna dan persekitaran sistem pengendalian Linux. Dia pakar produk perisian, yang memastikan pelaksanaan perintah dan mendapatkan hasil pelaksanaannya, atau, secara ringkasnya, shell ialah program yang direka untuk memastikan pelaksanaan program lain atas permintaan pengguna. Contoh shell boleh, sebagai contoh, penterjemah arahan perintah.com sistem pengendalian MS DOS, atau shell bash bilik bedah Sistem Unix/Linux.

Semua cangkerang mempunyai fungsi dan sifat yang serupa, mengikut tujuan utamanya - untuk melaksanakan arahan pengguna dan memaparkan hasil pelaksanaannya:

Tafsiran baris arahan.

Akses kepada arahan dan hasil pelaksanaannya.

Sokongan untuk pembolehubah, aksara khas dan perkataan terpelihara.

Pemprosesan fail, operasi input dan output standard.

Pelaksanaan bahasa pengaturcaraan shell khas.

    Untuk sistem pengendalian keluarga Unix / Linux, adalah mungkin untuk menggunakan beberapa cangkerang berbeza yang berbeza dalam sifat dan kaedah interaksi dengan sistem. Cengkerang yang paling biasa ialah

sh- cangkerang Bourne , cangkerang klasik untuk OS Unix

bash cangkerang Bourne Lagi(GNU Bourne-Again SHEll). Mungkin shell yang paling biasa pada masa ini dalam persekitaran OS Linux.

ksh- cangkerang Korn, direka sebagai pembangunan cangkerang Bourne dengan sejarah baris arahan dan keupayaan untuk mengedit arahan.

csh- cangkerang C, menggunakan sintaks bahasa popular pengaturcaraan C

tcsh- versi shell C dengan penyuntingan baris arahan interaktif.

Beberapa cengkerang berbeza boleh dipasang pada sistem, dan setiap pengguna boleh menggunakan cangkerang lalai mereka sendiri. Semua ini, sudah tentu, dilakukan secara automatik semasa proses muat turun dan pendaftaran pengguna.

    Semasa proses pemuatan sistem pengendalian keluarga Linux, selepas memuatkan kernel sistem, sistem bertukar kepada mod interaktif - mod interaksi antara pengguna dan sistem pengendalian. Di Linux, proses pertama yang dilancarkan semasa boot ialah program init. di dalamnya, yang membaca kandungan fail konfigurasi /etc/inittab, menentukan senarai dan ciri terminal yang tersedia dalam sistem, dan memanggil program log masuk interaktif getty, yang menggesa anda untuk memasukkan nama pengguna anda. Selepas memasukkan nama pengguna dan kata laluan, program getty memanggil program log masuk, yang menyemak kesahihan akaun, menavigasi ke direktori rumah pengguna dan memindahkan kawalan ke program pelancaran awal session, yang biasanya merupakan program shell pengguna, jenis khusus yang ditentukan oleh kandungan fail /etc/passwd Untuk akaun ini. Sebagai contoh:

user1:x:508:511::/home/user1:/bin/sh
interbase:x:510:511::/home/interbase:/bin/csh
apb:x:511:513:apb:/home/apb:/bin/bash

Seperti yang dapat dilihat daripada kandungan fail /etc/passwd, untuk pengguna pengguna1 cangkerang akan dilancarkan sh(Bourne shell), untuk pengguna antara pangkalan- cangkerang csh(C shell) dan untuk pengguna apb- cangkerang bash(Bourne Lagi) Selepas shell bermula, command prompt dipaparkan pada skrin (biasanya dalam bentuk tanda dolar $ jika kerja dilakukan dalam konteks akaun pengguna biasa, atau paun # , jika shell digunakan di bawah akaun pengguna root ( akar).

Apabila keluar dari shell, kernel sistem mengembalikan kawalan kepada program di dalamnya, yang memulakan semula proses log masuk dan memaparkan gesaan nama pengguna pada terminal. Keluar dari shell boleh dilakukan dengan salah satu daripada dua cara:

Melalui pasukan keluar dilakukan oleh pengguna

Apabila proses shell menerima isyarat bunuh, dihantar oleh kernel, contohnya apabila sistem dibut semula.

Tafsiran baris arahan.

    Input pengguna sebagai tindak balas kepada gesaan shell biasanya dipanggil baris arahan atau pasukan. Perintah Linux ialah rentetan aksara nama perintah dan argumen, dipisahkan oleh ruang. Argumen menyediakan perintah dengan parameter tambahan yang menentukan kelakuannya. Selalunya digunakan sebagai hujah pilihan Dan nama fail dan direktori. Sebagai contoh, baris arahan

ls -l fail01 fail02

Mengandungi arahan ls, pilihan -l dan dua nama fail file01 file02.

Apabila menggunakan beberapa pilihan, mereka boleh digabungkan. Sebagai contoh, pilihan arahan berikut adalah sama:

Ls -l -d
ls -ld

Perintah yang merupakan sebahagian daripada shell dipanggil terbina dalam. Perintah sedemikian termasuk, sebagai contoh, cd, if, case, dll. Sememangnya, arahan terbina dalam mungkin berbeza untuk pelbagai pilihan cengkerang. Sebagai tambahan kepada arahan terbina dalam, adalah mungkin untuk menggunakan modul program, yang merupakan fail boleh laku yang berasingan, atau fail skrip atau senario- fail teks biasa yang mengandungi baris yang dilaksanakan secara berurutan dengan arahan shell. Beberapa skrip (skrip) boleh dilaksanakan proses Linux, seperti penjadual tugas cron. Penjadual tugas biasanya direka untuk perlaksanaan automatik tugas pentadbiran sistem berjadual. Tugasan cron ialah arahan atau skrip dan dilaksanakan secara automatik, tanpa sebarang campur tangan manusia, dan boleh dilaksanakan dalam konteks akaun pengguna yang berbeza. Dalam kes di mana tugas penjadual melibatkan pelaksanaan skrip, masalah timbul untuk memilih shell yang harus dilancarkan sebagai proses kanak-kanak cron untuk memproses arahan daripada fail skrip - selepas semua, shell boleh menjadi apa-apa, dan sintaks skrip, sebagai peraturan, memerlukan penggunaan shell khusus yang mana ia ditulis. Untuk menghapuskan masalah ini, dalam sistem pengendalian Linux adalah lazim untuk menunjukkan dalam baris pertama skrip jenis shell yang diperlukan untuk pelaksanaannya, dalam bentuk:

#!/bin/bash- untuk cangkang bash

#!/bin/sh- untuk cangkang sh

Tanda # ialah tanda komen dan watak yang mengikutinya tidak ditafsirkan sebagai arahan. Teknik ini membolehkan anda menentukan secara eksplisit shell mana yang harus digunakan untuk memproses kandungan fail berikutnya. Jika skrip tidak mengandungi entri yang mentakrifkan shell yang diperlukan secara eksplisit, maka tetapan daripada akaun dalam konteks yang ia dilaksanakan akan digunakan. skrip ini. Dalam kes ini, ada kemungkinan bahawa skrip ditulis untuk shell, sebagai contoh, tch akan dihantar ke shell untuk dilaksanakan bash, yang akan menjadikannya mustahil untuk dilaksanakan.

Apabila melaksanakan arahan atau skrip, gunakan pembolehubah persekitaran (dalam Bahasa Inggeris - persekitaran, nilai yang mencirikan persekitaran perisian di mana arahan dilaksanakan. Pembolehubah sedemikian mungkin mengandungi Tetapan umum sistem, parameter shell grafik atau arahan, laluan fail boleh laku dan sebagainya. Nilai pembolehubah persekitaran ditetapkan pada peringkat sistem (untuk semua pengguna) dan pada pengguna tertentu. Untuk menetapkan pembolehubah persekitaran pada peringkat sistem, kandungan fail digunakan:

/etc/profile- menetapkan pembolehubah hanya untuk cengkerang arahan. Boleh menjalankan sebarang skrip dalam cangkerang yang serasi dengan cangkerang Bourne.

/etc/bash.bashrc- menetapkan pembolehubah hanya untuk cengkerang interaktif. Ia juga menjalankan skrip bash.

/etc/environment- digunakan oleh modul PAM-env. Hanya pasangan boleh ditentukan dalam fail ini nama=nilai.

Setiap fail ini mempunyai aplikasinya sendiri, jadi anda harus berhati-hati memilih fail yang sesuai dengan tujuan anda. Contohnya, jika anda perlu menambah direktori tersuai ~/bin menjadi pembolehubah JALAN untuk semua pengguna, letakkan kod berikut dalam salah satu fail sistem permulaan persekitaran (/etc/profile atau /etc/bash.bashrc):

# Jika ID pengguna lebih besar daripada atau sama dengan 1000 dan terdapat direktori ~/bin dan ia

#belum ditambahkan sebelum ini pada pembolehubah PATH,

# eksport ~/bin ke $PATH.

Jika [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin)

Eksport PATH=$HOME/bin:$(PATH)

Biasanya di bilik bedah sistem Linux, ID Pengguna kurang daripada 1000 atau kurang daripada 500 digunakan untuk akaun perkhidmatan. Dalam contoh ini, pembolehubah persekitaran akan ditetapkan untuk semua pengguna tempatan sistem dengan ID 1000 atau lebih.

Jika anda perlu menukar persekitaran untuk pengguna tertentu, ubah suai kandungan persekitaran pengguna:

- ~/.bash_profile, ~/.bash_login dan sebagainya. - fail permulaan shell daripada direktori rumah pengguna.

- ~/.profil- fail permulaan profil pengguna. Digunakan oleh banyak shell untuk menentukan pembolehubah persekitaran.

~/.pam_environment- analog tersuai bagi fail /etc/environment, yang digunakan oleh modul PAM-env.

Sebagai contoh, untuk menambah direktori pengguna ~/bin ke laluan carian fail boleh laku yang ditentukan oleh pembolehubah JALAN, sebagai contoh, ke fail ~/.profil letakkan baris:

eksport PATH="$(PATH):/home/user/bin"

Untuk menetapkan pembolehubah persekitaran untuk aplikasi grafik, kandungan fail konfigurasi persekitaran grafik pengguna digunakan ~/.xinitrc

Lebih kerap, nilai pembolehubah persekitaran ditetapkan untuk sesi pengguna semasa. Contohnya, untuk menambah direktori tersuai ~/bin dalam laluan carian untuk fail boleh laku:

eksport PATH=~/bin:$PATH

Nilai pembolehubah baharu JALAN hanya akan bertahan sehingga sesi pengguna semasa tamat.

Untuk melihat nilai pembolehubah, anda boleh menggunakan arahan echo $variable, Sebagai contoh:

echo $PATH

Pada masa ini, shell yang paling biasa, seperti yang dinyatakan di atas, ialah bash. Ini disebabkan terutamanya oleh fakta bahawa shell bash ialah sh- serasi shell arahan, yang ditambah ciri yang berguna daripada kulit Korn ( ksh) dan cangkang C ( csh). Shell bash boleh menjalankan kebanyakan skrip yang ditulis di bawah bahasa pengaturcaraan shell tanpa sebarang pengubahsuaian sh dan cuba mendekati standard yang mungkin POSIX, yang membawa kepada banyak peningkatan, baik untuk pengaturcaraan dan penggunaan interaktif. Dalam pelaksanaan moden bash terdapat mod penyuntingan baris arahan, saiz sejarah arahan tanpa had, alat pengurusan tugas, keupayaan untuk menggunakan alias, senarai luas arahan terbina dalam, fungsi shell perintah, dsb. secara amnya, bash paling sesuai dengan keperluan pengguna biasa, yang menjadikannya paling banyak digunakan dalam persekitaran Linux.

Pada permulaan bash tanpa parameter baris arahan, shell bermula dalam mod interaktif, memaparkan gesaan arahan pada skrin. Cangkang interaktif biasanya membaca data dari terminal pengguna dan menulis data ke terminal yang sama, peranti standard Peranti input ialah papan kekunci, dan peranti output standard ialah paparan. Pengguna memasukkan arahan pada papan kekunci, dan hasil pelaksanaannya dipaparkan pada paparan.

Shell bahasa arahan (diterjemahkan sebagai shell, shell) sebenarnya adalah bahasa pengaturcaraan peringkat tinggi. Dalam bahasa ini, pengguna mengawal komputer. Biasanya, selepas log masuk, anda mula berinteraksi dengan shell arahan. Tanda bahawa cangkerang bersedia untuk menerima arahan ialah penggerak yang dipaparkan pada skrin. Dalam kes paling mudah ia adalah satu dolar (“$”). Shell tidak diperlukan dan satu-satunya bahasa arahan (walaupun ia adalah bahasa yang diseragamkan dalam rangka kerja POSIX, standard sistem mudah alih). Sebagai contoh, bahasa cshell agak popular; terdapat juga kshell, bashell dan lain-lain. Selain itu, setiap pengguna boleh membuat sendiri bahasa arahan. Boleh bekerja secara serentak dengan bahasa arahan yang berbeza pada satu contoh sistem pengendalian. shell adalah salah satu daripada banyak arahan UNIX. Iaitu, set arahan "shell" termasuk arahan "sh" - memanggil penterjemah "shell". "Shell" pertama dipanggil secara automatik apabila anda log masuk dan memaparkan pengaturcara. Selepas ini, anda boleh memanggil mana-mana arahan untuk pelaksanaan, termasuk "shell" itu sendiri, yang akan mencipta shell baru untuk anda di dalam yang lama. Jadi sebagai contoh, jika anda menyediakan fail "file_1" dalam editor:

Echo Hello!

maka ia akan menjadi normal fail teks, mengandungi arahan "gema", yang, apabila dilaksanakan, memaparkan semua yang ditulis di sebelah kanannya pada skrin. Anda boleh membuat fail "file_1" boleh laku menggunakan arahan "chmod 755 file_1". Tetapi ia boleh dilakukan dengan memanggil perintah "sh" ("shell") secara eksplisit:

Fail sh_1

Sh< file1

Fail juga boleh dilaksanakan dalam contoh shell semasa. Terdapat arahan khusus untuk ini "." (titik), i.e.

Fail_1

Memandangkan UNIX ialah sistem berbilang pengguna, anda juga boleh komputer peribadi berfungsi selari pada, katakan, 12 skrin (tukar dari skrin ke skrin ALT/kunci fungsi), mempunyai pada setiap skrin pengguna baharu (atau yang sama) dengan shell arahannya sendiri. Anda juga boleh membuka X-Window dalam mod grafik nombor besar windows, dan setiap tetingkap boleh mempunyai pengguna sendiri dengan shell arahan sendiri... Elemen teras bahasa shell ialah arahan.

Struktur perintah:

Perintah dalam shell biasanya mempunyai format berikut:

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

Sebagai contoh:

Ls -ls /usr/bin

Di mana ls ialah nama arahan yang mengeluarkan direktori kandungan, -ls - flags ("-" - tanda bendera, l - format panjang, s - volum fail dalam blok), /usr/bin - direktori yang arahan ini dilaksanakan akan memaparkan kandungan direktori dalam format panjang /usr/bin, akan menambah maklumat tentang saiz setiap fail dalam blok Malangnya, struktur arahan ini tidak selalu diikuti dengan tanda tolak, dan bendera tidak selalunya satu perkataan yang mempunyai format eksotik Perintah "running" sebagai cc - memanggil pengkompil bahasa C, tar - bekerja dengan arkib, dd - menyalin fail dengan penukaran, cari - mencari fail dan beberapa yang lain Sebagai peraturan, perkataan pertama diterima oleh shell. , sebagai satu pasukan. baris arahan

perkataan pertama akan dinyahsulit oleh shell sebagai arahan (concatenation), yang akan memaparkan fail yang dipanggil "cat" (perkataan kedua) yang terletak dalam direktori semasa. Pengalihan arahan Input standard (input) - "stdin" dalam OS UNIX dijalankan dari papan kekunci terminal, dan keluaran standard(output) - "stdout" diarahkan ke skrin terminal. Terdapat juga fail standard mesej diagnostik - "stderr", yang akan dibincangkan sedikit kemudian. Perintah yang boleh beroperasi pada input dan output standard dipanggil FILTER. Pengguna mempunyai cara yang mudah untuk mengalihkan input dan output ke fail lain (peranti). Simbol ">" dan ">>" menunjukkan pengalihan keluaran. ls >file_1 Perintah "ls" akan menjana senarai fail dalam direktori semasa dan meletakkannya dalam fail "file_1" (bukannya mencetaknya ke skrin). Jika fail "file_1" wujud sebelum ini, ia akan ditimpa oleh yang baharu.

Pwd >>fail_1

arahan pwd akan membentuk nama penuh direktori semasa dan meletakkannya di hujung fail "file_1", i.e. ">>" ditambahkan pada fail jika ia tidak kosong. Simbol"<" и "<<" обозначают перенаправление ввода.

Wc -l

akan mengira dan memaparkan bilangan baris dalam fail fail_1.

Ed fail_2<

akan mencipta fail "file_2" menggunakan editor, terus dari terminal. Penghujung input ditentukan oleh aksara di sebelah kanan "<<" (т. е. "!"). То есть ввод будет закончен, когда первым в очередной строке будет "!". Можно сочетать перенаправления. Так

Wc -l fail_4

Wc -l >file_4

dilakukan dengan cara yang sama: bilangan baris dalam fail "file_3" dikira dan hasilnya diletakkan dalam fail "file_4". Cara yang menggabungkan output standard satu perintah dengan input standard yang lain dipanggil PIPELINE dan ditunjukkan oleh bar menegak "|".

ls | wc -l

senarai fail dalam direktori semasa akan dihantar ke input arahan "wc", yang akan memaparkan bilangan baris dalam direktori. Saluran paip juga boleh menggabungkan lebih daripada dua arahan, apabila kesemuanya, mungkin kecuali yang pertama dan terakhir, adalah penapis:

Fail kucing_1 | grep -h hasil | menyusun | cat -b > file_2

Saluran paip dari fail "file_1" ("cat") akan memilih semua baris yang mengandungi perkataan "hasil" ("grep"), mengisih ("isih") baris yang terhasil, dan kemudian nombor ("cat -b") dan cetak hasilnya dalam fail "file_2". Oleh kerana peranti UNIX diwakili oleh fail khas, ia boleh digunakan dalam ubah hala. Fail khas terletak dalam direktori "/dev". Sebagai contoh, "lp" - cetak; "konsol" - konsol; "ttyi" - terminal ke-i; "null" ialah fail (peranti) dummy (kosong). Kemudian, sebagai contoh,

Ls > /dev/lp

akan mencetak kandungan direktori semasa, dan file_1< /dev/null обнулит файл "file_1".

Isih fail_1 | tee /dev/lp | ekor -20

Dalam kes ini, fail "file_1" akan diisih dan dicetak, dan 20 baris terakhir juga akan dicetak pada skrin. Mari kembali ke pengalihan keluaran. Fail standard diberi nombor:

0 - stdin, 1 - stdout 2 - stderr. Jika anda tidak mahu mempunyai mesej ralat pada skrin, anda boleh mengubah hala dari skrin ke fail yang anda tentukan (atau membuangnya sepenuhnya dengan mengubah hala ke fail "peranti kosong" - /dev/null). Sebagai contoh, semasa melaksanakan arahan

Fail kucing_1 fail_2

yang sepatutnya memaparkan kandungan fail "file_1" dan "file_2" secara berurutan pada skrin, ia akan memberi anda, sebagai contoh, perkara berikut

111111 222222 cat: f2: Tiada fail atau direktori sedemikian

di mana 111111 222222 ialah kandungan fail "file_1" dan fail "file_2" tiada, yang arahan "kucing" dilaporkan kepada fail diagnostik standard, secara lalai, seperti output standard yang diwakili oleh skrin. Jika anda tidak mahu mesej sedemikian pada skrin, anda boleh mengubah hala ke fail yang anda tentukan:

Fail kucing_1 fail_2 2>f-err

mesej ralat akan dihantar (seperti yang ditunjukkan oleh pengalihan "2>") ke fail "f-err". Dengan cara ini, anda boleh menghantar semua maklumat ke satu fail "ff" dengan menggunakan dalam kes ini reka bentuk

Cat file_1 file_2 >>ff 2>ff

Anda boleh menentukan bukan sahaja fail standard yang hendak diubah, tetapi juga fail standard yang hendak diubah hala.

Cat file_1 file_2 2>>ff 1>&2

Di sini, "stderr" pertama dialihkan (dalam mod tambah) ke fail "ff", dan kemudian output standard dialihkan ke "stderr", yang pada ketika ini ialah fail "ff". Iaitu, hasilnya akan serupa dengan yang sebelumnya. Pembinaan "1>&2" bermaksud bahawa sebagai tambahan kepada bilangan fail standard untuk diubah hala, anda mesti meletakkan "&" di hadapan; keseluruhan struktur ditulis tanpa ruang.<- закрывает стандартный ввод. >- menutup keluaran standard. Fail perintah. Terdapat beberapa pilihan untuk membenarkan fail teks digunakan sebagai arahan. Mari gunakan editor untuk mencipta fail yang dipanggil "cmd" yang mengandungi satu baris seperti ini:

Tarikh; pwd; ls

Anda boleh memanggil shell sebagai arahan, ditandakan "sh", dan menghantarnya fail "cmd" sebagai hujah atau sebagai input diubah hala, i.e.

$ sh cmd

$sh

Hasil daripada melaksanakan mana-mana arahan ini ialah tarikh, kemudian nama direktori semasa, dan kemudian kandungan direktori. Pilihan yang lebih menarik dan mudah untuk bekerja dengan fail kelompok ialah mengubahnya menjadi fail boleh laku, i.e. hanya jadikan ia arahan, yang dicapai dengan menukar kod keselamatan. Untuk melakukan ini, anda mesti membenarkan pelaksanaan fail ini. Sebagai contoh,

Chmod 711 cmd

akan membuat kod keselamatan "rwx__x__x". Kemudian panggilan ringkas

akan melaksanakan tiga arahan yang sama. Hasilnya akan sama jika fail dengan kandungan

Tarikh; pwd; ls

diwakili dalam bentuk: tarikh pwd ls kerana peralihan ke baris lain juga merupakan pemisah dalam urutan arahan. Oleh itu, fail boleh laku boleh bukan sahaja fail yang diperoleh hasil daripada penyusunan dan pemasangan, tetapi juga fail yang ditulis dalam bahasa shell. Ia dilaksanakan dalam mod tafsiran menggunakan penterjemah shell

Menyahpepijat fail kelompok

SHELL menggunakan dua mekanisme untuk menyahpepijat fail kelompok. Yang pertama ialah: set -v mencetak garisan fail kelompok semasa anda membacanya. Mod ini digunakan semasa mencari ralat sintaks. Untuk menggunakannya, anda tidak perlu mengubah suai fail arahan, contohnya: sh -v proc... di sini proc ialah nama fail arahan. Suis -v boleh digunakan bersama dengan suis -n, yang menghalang pelaksanaan perintah berikutnya (perintah set -n menyekat terminal sehingga bendera EOF dimasukkan). Arahan set -x memaparkan arahan semasa ia dilaksanakan, dan baris atur cara dikeluarkan ke terminal dan nilainya digantikan sebagai ganti pembolehubah. Untuk membatalkan suis -x dan -v, anda boleh menggunakan arahan yang ditetapkan - dan untuk memasang, tetapkan nilai yang sepadan kepada pembolehubah makro. PERSEKITARAN SHELL (PEMBOLEH UBAH DAN PARAMETER) Dalam bahasa shell, anda boleh menulis fail kelompok dan menggunakan arahan "chmod" untuk menjadikannya boleh laku. Selepas ini, mereka tidak berbeza dengan arahan OS UNIX yang lain.

Pembolehubah shell

Nama pembolehubah shell ialah urutan huruf, nombor dan garis bawah bermula dengan huruf. Nilai pembolehubah shell ialah rentetan aksara. Hakikat bahawa terdapat hanya dua jenis data dalam cangkerang: rentetan aksara dan fail teks, di satu pihak, memudahkan untuk melibatkan pengguna akhir dalam pengaturcaraan yang tidak pernah melakukan pengaturcaraan sebelum ini, dan sebaliknya, menyebabkan protes dalaman tertentu di kalangan ramai pengaturcara yang terbiasa dengan kepelbagaian yang lebih ketara dan lebih fleksibiliti cara linguistik. Walau bagaimanapun, adalah menarik untuk melihat bagaimana pengaturcara yang berkelayakan tinggi, setelah membiasakan diri dengan "peraturan permainan" shell, menulis program di dalamnya berkali-kali lebih cepat daripada dalam C, tetapi, apa yang menarik, dalam beberapa kes program ini berjalan lebih cepat daripada yang dilaksanakan dalam C. Nama pembolehubah adalah serupa dengan idea tradisional pengecam, i.e. nama boleh menjadi urutan huruf, nombor dan garis bawah, bermula dengan huruf atau garis bawah. Pengendali tugasan "=" boleh digunakan untuk menetapkan nilai kepada pembolehubah.

Var_1=13 - "13" bukan nombor, tetapi rentetan dua digit. var_2="UNIX OS" - Petikan berganda (" ") diperlukan di sini kerana terdapat ruang dalam rentetan.

Cara lain untuk memberikan nilai kepada pembolehubah shell juga mungkin. Sebagai contoh, rakaman

DAT=`tarikh`

menyebabkan arahan "tarikh" dilaksanakan terlebih dahulu (tanda belakang menunjukkan bahawa arahan yang dilampirkan mesti dilaksanakan dahulu), dan hasil pelaksanaannya, bukannya output kepada output standard, ditetapkan sebagai nilai pembolehubah, dalam kes ini " DAT". Anda juga boleh menetapkan nilai kepada pembolehubah menggunakan arahan "baca", yang memastikan bahawa nilai pembolehubah diterima daripada paparan (papan kekunci) dalam mod dialog. Biasanya arahan "baca" dalam fail kelompok didahului dengan arahan "gema", yang membolehkan anda pra-memaparkan beberapa mesej pada skrin. Sebagai contoh:

Echo -n "Masukkan nombor tiga digit:" baca x

Apabila melaksanakan bahagian fail arahan ini, selepas mesej dipaparkan

Masukkan nombor tiga digit:

jurubahasa akan berhenti dan menunggu nilai untuk dimasukkan dari papan kekunci. Jika anda memasukkan, sebut, "753" maka ini akan menjadi nilai pembolehubah "x". Satu arahan "baca" boleh membaca (menetapkan) nilai kepada beberapa pembolehubah sekaligus. Jika terdapat lebih banyak pembolehubah dalam "baca" daripada yang dimasukkan (dipisahkan oleh ruang), yang selebihnya diberikan rentetan kosong. Jika terdapat lebih banyak nilai yang dihantar daripada pembolehubah dalam perintah "baca", maka yang tambahan diabaikan. Apabila mengakses pembolehubah shell, anda mesti mendahului nama dengan simbol "$". Jadi arahan echo $var_2 echo var_2 akan dipaparkan pada skrin

UNIX OS var_2 Melarikan diri

Mari kita lihat lebih dekat teknik melarikan diri yang digunakan dalam cangkerang. Petikan berganda (" "), petikan tunggal (" "), dan garis miring ke belakang (\) digunakan sebagai peranti melarikan diri. Tindakan mereka jelas daripada contoh: Anda boleh menulis beberapa tugasan dalam satu baris.

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

(tugasan G=$x+$y akan gagal kerana ruang) Kemudian

Gema A = $A B = $B C = $C gema D = $D E = $E F = $F gema eval dinilai A = $A gema eval dinilai B = $B gema eval dinilai C = $C

Akan dipaparkan pada skrin

A = 22 B = $x C = $x D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22 dinilai A = 22 dinilai B = 22 dinilai C = 22

Mari berikan beberapa lagi contoh yang berkaitan dengan suapan talian melarikan diri. Biarkan pembolehubah "rentetan" diberikan nilai "array" 2x3: abc def Ambil perhatian bahawa untuk mengelakkan pemberian ruang tambahan, baris kedua tatasusunan bermula dari kedudukan pertama baris berikut: string="abc def" Kemudian terdapat tiga pilihan untuk menulis pembolehubah dalam perintah gema "echo" $string echo "$string" echo "$string" masing-masing akan memberikan tiga hasil yang berbeza: abc def $string abc def dan urutan perintah echo "str_1 str_2" > file_1 echo "str_1 str_2" > file_2 cat file_1 file_2 akan diberikan secara berurutan fail yang sama file_1 dan file_2: str_1 str_2 str_1 str_2 Perhatikan juga bahawa garis miring ke belakang (\) bukan sahaja terlepas daripada aksara yang mengikutinya, yang membolehkan anda menggunakan Simbol khas sama seperti aksara yang mewakili diri mereka sendiri (ia juga boleh melarikan diri sendiri - \\), tetapi dalam fail arahan, garis miring ke belakang membolehkan anda menggabungkan baris menjadi satu (melarikan diri dari hujung baris Contohnya, contoh baris arahan yang diberikan sebelum ini:

Fail kucing_1 | grep -h hasil | menyusun | cat -b > file_2

boleh ditulis dalam fail kelompok, katakan seperti

Fail kucing_1 | grep -h\hasil | menyusun | cat -b > file_2

Dengan cara ini, simbol penghantar juga memberikan kesan meneruskan baris arahan. Dalam kes ini ia mungkin memberikan hasil yang lebih baik, seperti ini:

Fail kucing_1 | grep -h hasil | menyusun | cat -b > file_2

Manipulasi dengan pembolehubah shell Walaupun fakta bahawa pembolehubah shell secara amnya dianggap sebagai rentetan, iaitu "35" bukan nombor, tetapi rentetan dua aksara "3" dan "5", dalam beberapa kes ia boleh ditafsirkan secara berbeza, contohnya sebagai integer. Perintah "expr" mempunyai pelbagai keupayaan. Mari kita gambarkan beberapa dengan contoh: Melaksanakan fail kelompok:

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

akan dipaparkan pada skrin

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

Operasi pendaraban ("*") mesti dilepaskan, kerana dalam cangkerang ikon ini dianggap sebagai aksara khas, bermakna mana-mana jujukan aksara boleh digantikan di tempat ini. Dengan arahan "expr", bukan sahaja operasi aritmetik (integer) boleh dilakukan, tetapi juga rentetan:

A=`expr "cocktail" : "cock"` ; echo $A B=`expr "cocktail" : "tail"` ; echo $B C=`expr "cocktail" : "cook"` ; echo $C D=`expr "cock" : "cocktail"` ; bergema $D

Nombor akan dipaparkan pada skrin yang menunjukkan bilangan aksara yang sepadan dalam rantaian (dari awal). Baris kedua tidak boleh lebih panjang daripada yang pertama:

4 0 0 0

Mengeksport pembolehubah UNIX OS mempunyai konsep proses. Proses berlaku apabila arahan dilaksanakan. Contohnya, apabila menaip "p" pada papan kekunci "proses "p" dihasilkan. Sebaliknya, "p" boleh melahirkan proses lain. Mari kita anggap bahawa "p" memanggil "p1" dan "p2", yang secara berurutan menghasilkan proses yang sepadan. Setiap proses mempunyai persekitarannya sendiri - a set pembolehubah yang tersedia untuknya Contohnya, sebelum melancarkan "p" sudah ada persekitaran di mana beberapa pembolehubah telah ditakrifkan "p" menjana persekitaran baharu "p1" dan "p2" akan dijana di dalamnya. Pembolehubah adalah setempat kepada proses di mana ia diisytiharkan, iaitu di mana ia diberikan nilai Agar ia tersedia untuk proses yang dihasilkan, ia mesti dihantar secara eksplisit untuk ini, perintah "eksport". digunakan.

Pilihan

Parameter boleh dihantar ke fail arahan. Cangkang menggunakan parameter kedudukan (iaitu, susunan yang ia muncul adalah penting). Dalam fail arahan, pembolehubah yang sepadan dengan parameter (serupa dengan pembolehubah shell) bermula dengan simbol "$", diikuti dengan salah satu nombor dari 0 hingga 9: Biarkan "examp-1" dipanggil dengan parameter "cock" dan "ekor". Parameter ini jatuh ke dalam persekitaran baharu di bawah nama standard"1" dan "2". Pembolehubah (standard) bernama "0" akan menyimpan nama pengiraan yang dipanggil. Apabila mengakses parameter, nombor didahului oleh simbol dolar "$" (seperti semasa mengakses pembolehubah): $0 sepadan dengan nama fail arahan ini; $1 ialah parameter pertama mengikut urutan; Parameter $2 saat, dsb. Oleh kerana bilangan pembolehubah yang mana parameter boleh diluluskan adalah terhad kepada satu digit, i.e. ke-9 (“0”, seperti yang telah dinyatakan, mempunyai makna istimewa), kemudian untuk penghantaran lebih parameter, arahan khas "shift" digunakan. Perintah "set" menyediakan pendekatan unik kepada parameter. Contohnya, serpihan

Tetapkan b dengan gema pertama=$1 saat=$2 ketiga=$3

akan dipaparkan pada skrin

Pertama=a kedua=b ketiga=c

mereka. arahan "set" menetapkan nilai parameter. Ini boleh menjadi sangat mudah. Sebagai contoh, arahan "tarikh" dipaparkan tarikh semasa, sebut "Isnin 01 Mei 12:15:10 2000", terdiri daripada lima perkataan, kemudian

Tetapkan `tarikh` gema $1 $3 $5

akan dipaparkan pada skrin

Isnin 01 2000

Perintah "set" juga membolehkan anda mengawal pelaksanaan program, contohnya: set -v baris adalah output ke terminal, dibaca oleh shell. set +v membatalkan mod sebelumnya. set -x mencetak arahan ke terminal sebelum pelaksanaan. set +x membatalkan mod sebelumnya. Perintah "set" tanpa parameter memaparkan keadaan persekitaran perisian ke terminal.

Penggantian cangkang

Sebelum mentafsir dan melaksanakan arahan secara langsung yang terkandung dalam fail kelompok, shell melaksanakan jenis lain penggantian: 1. PENGGANTIAN KEPUTUSAN. Semua arahan yang disertakan dalam petikan belakang dilaksanakan dan hasilnya digantikan di tempatnya. 2. PENGGANTIAN NILAI PARAMETER DAN PEMBOLEH UBAH. Iaitu, perkataan yang bermula dengan "$" digantikan dengan nilai pembolehubah dan parameter yang sepadan. 3. MENAFSIRAN JURANG. Ruang yang terlepas diabaikan. 4. PENJANAAN NAMA FAIL. Perkataan disemak untuk kehadiran aksara khas ("*", "?","") dan generasi yang sepadan dilakukan. Persekitaran Perisian Setiap proses mempunyai persekitaran di mana ia berjalan. Shell menggunakan beberapa pembolehubah persekitaran ini. Jika anda menaip arahan "set" tanpa parameter, skrin akan memaparkan maklumat tentang beberapa pembolehubah standard yang dibuat semasa log masuk (dan kemudian diteruskan kepada semua proses baharu anda "diwarisi"), serta pembolehubah yang dibuat dan dieksport oleh proses anda . Jenis dan kandungan khusus output maklumat bergantung pada sebahagian besar versi UNIX yang digunakan dan cara sistem dipasang.

Hasil pelaksanaan tetapkan arahan tanpa parameter (tidak lengkap):

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

Mari kita ulas tentang nilai pembolehubah. HOME=/root ialah nama direktori rumah tempat pengguna berakhir selepas log masuk. Iaitu, setelah memasukkan nama dan kata laluan dengan betul, saya akan mendapati diri saya dalam direktori "/root". PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 - pembolehubah ini menentukan urutan fail yang dicari oleh shell untuk mencari arahan. Nama fail dipisahkan di sini dengan titik bertindih. Urutan tontonan sepadan dengan susunan nama dalam denai. Tetapi pada mulanya carian berlaku di antara apa yang dipanggil arahan terbina dalam. Arahan terbina dalam termasuk perintah yang paling biasa digunakan, seperti "echo", "cd", "pwd", "date". Selepas ini, sistem melihat melalui direktori "/bin", yang mungkin mengandungi arahan "sh", "cp", "mv", "ls", dll. Kemudian direktori "/usr/bin" dengan arahan "cat", "ss", "expr", "nroff", "man" dan lain-lain lagi. Seterusnya, carian berlaku dalam direktori semasa (".", atau sebutan lain "kosong", iaitu ""), di mana kemungkinan besar arahan yang anda tulis terletak. Selepas menaip baris arahan dan menekan "shell" (selepas melakukan penggantian yang diperlukan) mengenali nama yang sepadan dengan arahan dan mencarinya dalam direktori yang disenaraikan dalam PATH. Jika arahan diletakkan di luar direktori ini, ia tidak akan ditemui. Jika terdapat beberapa arahan dengan nama yang sama, yang terletak dalam direktori yang dilihat dahulu akan dipanggil. PATH, seperti pembolehubah lain, boleh ditukar dengan mudah dengan menambah, menyusun semula atau memadam direktori. IFS= (Pemisah Medan Dalaman) menyenaraikan aksara yang berfungsi untuk memisahkan perkataan (medan). Ini ialah "ruang", "tab" dan "suapan baris", jadi di sini tiada apa yang kelihatan di sebelah kiri tugasan dan dua baris diduduki. LOGNAME=root - nama log masuk (“nama pengguna”). MAIL=/var/spool/mail/root - nama fail di mana mel (e-mel) diterima. PWD=/root - nama direktori semasa PS1=$(PWD): " " - jenis direktori. Dalam kes ini, penggerak akan memaparkan nama direktori semasa diikuti dengan titik bertindih dan ruang. Iaitu, akan ada "/root: ". PS2 => - gesaan ini (di sini ">") digunakan sebagai jemputan untuk terus memasukkan (dalam baris seterusnya) arahan yang belum selesai. Sebagai contoh, taip kurungan pembukaan "(" dan selepas menekan V baris seterusnya anda akan melihat penggerak ini. Jika anda tidak tahu apa yang perlu dilakukan seterusnya, taip kurungan penutup ")" dan ia akan hilang. SHELL=/bin/sh - Pembolehubah ini menentukan shell yang digunakan oleh pengguna. Dalam kes ini ia digunakan cangkerang standard("sh"). Persekitaran awal dipasang secara automatik apabila log masuk menggunakan fail seperti "/etc/rc" dan "/etc/.profile". Satu cara untuk menukar persekitaran (contohnya, laluan carian perintah, jenis program, jenis shell, warna skrin, dll.) adalah dengan meletakkan maklumat ini dalam direktori utama anda dalam fail ".profile" khusus ($(HOME)/ . profil), memberikan nilai yang diperlukan pembolehubah persekitaran. Iaitu, panggil fail ini ke dalam editor dan tulis apa sahaja yang anda mahu). Kemudian, setiap kali anda log masuk, fail ini akan dilaksanakan secara automatik dan memasang persekitaran baharu. Fail ini WAJIB diletakkan dalam anda Direktori HOME(direktori kemasukan). Perlu diingat bahawa nama fail yang bermula dengan titik biasanya mempunyai status istimewa. Oleh itu, ia tidak dipaparkan pada skrin dengan arahan "ls" yang mudah - anda mesti memanggil arahan ini dengan bendera "-a". By the way, mereka tidak dimusnahkan sewenang-wenangnya oleh arahan "rm *". saya sendiri jurubahasa cangkerang secara automatik memberikan nilai kepada pembolehubah berikut (parameter): ? nilai yang dikembalikan oleh arahan terakhir; $ nombor proses; ! nombor proses latar belakang;

  1. bilangan parameter kedudukan yang dihantar ke shell;
  • senarai parameter sebagai satu baris;

@ senarai parameter, sebagai satu set perkataan; - bendera dihantar ke cangkang. Apabila mengakses pembolehubah ini (iaitu, apabila menggunakannya dalam fail arahan - program shell), anda harus meletakkan "$" di hadapan. Peranan penting dalam mencipta fail unik dimainkan oleh pembolehubah khas "$$", yang nilainya sepadan dengan bilangan proses yang melakukan pengiraan ini. Setiap pengiraan baru yang dilakukan oleh komputer memulakan satu atau lebih proses yang menerima nombor secara automatik mengikut urutan. Oleh itu, menggunakan nombor proses sebagai nama fail, anda boleh memastikan bahawa setiap fail baharu akan mempunyai nama baharu (tidak akan ditulis menggantikan yang sedia ada). Kelebihannya juga merupakan kelemahan utama kaedah penamaan fail ini. Tidak diketahui nama apa yang akan diberikan kepada fail tersebut. Dan, jika dalam rangka proses ini anda boleh mencari fail "tanpa melihat," iaitu, dengan mengaksesnya menggunakan $$, maka fail tersebut boleh hilang dengan mudah. Ini mencipta masalah tambahan semasa menyahpepijat program. Memanggil jurubahasa Selepas mendaftarkan pengguna dalam sistem (menggunakan arahan log masuk), penterjemah bahasa SHELL dipanggil. Jika direktori pendaftaran pengguna mengandungi fail .profile, maka sebelum sekurang-kurangnya satu arahan diterima daripada terminal, jurubahasa melaksanakan fail ini (diandaikan bahawa fail .profile mengandungi arahan). Apabila memanggil, kekunci berikut boleh ditentukan: -c string Perintah dibaca daripada rentetan yang diberikan. -s Perintah dibaca daripada input standard. Mesej jurubahasa ditulis ke fail diagnostik standard. -i Mod pengendalian interaktif. Jika aksara pertama parameter "0" ialah tanda -, maka arahan dibaca daripada fail .profile.

STRUKTUR PROGRAM===

Seperti dalam mana-mana bahasa pengaturcaraan, teks shell boleh mengandungi komen. Simbol "#" digunakan untuk ini. Semua yang ada pada baris (dalam fail arahan) di sebelah kiri aksara ini dilihat oleh penterjemah sebagai ulasan. Sebagai contoh,

# Ini adalah komen.

Seperti mana-mana bahasa pengaturcaraan prosedur, bahasa shell mempunyai pengendali. Sebilangan operator membenarkan anda mengawal urutan pelaksanaan arahan. Dalam pengendali sedemikian, selalunya perlu menyemak keadaan, yang menentukan arah pengiraan diteruskan.

Perintah Test("")

Perintah ujian menyemak bahawa syarat tertentu dipenuhi. Pernyataan pilihan dan gelung bahasa Shell dijana menggunakan arahan (terbina dalam) ini. Dua format arahan yang mungkin:

Keadaan ujian

[ syarat ]

kami akan menggunakan pilihan kedua, i.e. Daripada menulis perkataan "ujian" sebelum syarat, kami akan menyertakan syarat dalam kurungan, yang lebih biasa untuk pengaturcara. Malah, shell akan mengenali arahan ini dengan kurungan pembukaan "[" sebagai perkataan yang sepadan dengan arahan "ujian". Mesti ada ruang antara kurungan dan keadaan yang terkandung di dalamnya. Juga mesti ada ruang antara nilai dan simbol perbandingan atau operasi Cangkang menggunakan keadaan pelbagai "jenis". SYARAT MENYEMAK FAIL: -f fail fail "fail" ialah fail biasa; -d fail fail "fail" - direktori; -с fail fail "fail" ialah fail khas; -r fail mempunyai kebenaran untuk membaca fail "fail"; -w fail mempunyai kebenaran untuk menulis ke fail "fail"; -s fail fail "fail" tidak kosong.

SYARAT UNTUK MENGUJI STRING: str1 = str2 rentetan "str1" dan "str2" sepadan; str1 != str2 rentetan "str1" dan "str2" tidak sama; -n str1 rentetan "str1" wujud (tidak kosong); -z str1 rentetan "str1" tidak wujud (kosong). Contoh.

X="siapa siapa"; eksport x; [ "siapa siapa" = "$x" ]; echo $? 0 x=abc ; eksport x ; [ abc = "$x" ] ; echo $? 0 x=abc ; eksport x ; [ -n "$x" ] ; echo $? 0 x="" ; eksport x ; [ -n "$x" ] ; echo $? 1

Selain itu, terdapat dua nilai syarat standard yang boleh digunakan sebagai ganti keadaan (tiada kurungan diperlukan untuk ini). SYARAT UNTUK MEMBANDING INTEGER: x -eq y "x" sama dengan "y", x -ne y "x" tidak sama dengan "y", x -gt y "x" lebih besar daripada "y", x - ge y "x" lebih besar daripada atau sama dengan "y", x -lt y "x" kurang daripada "y", x -le y "x" kurang daripada atau sama dengan "y". SYARAT KOMPLEKS: Dilaksanakan menggunakan operasi logik standard: ! (tidak) membalikkan nilai kod keluar. -o (atau) sepadan dengan logik "ATAU". -a (dan) sepadan dengan logik "DAN".

Pernyataan bersyarat "jika"

Secara umum, pernyataan "jika" mempunyai struktur

Jika syarat maka senaraikan

Di sini "elif" versi dipendekkan "else if" boleh digunakan bersama dengan versi penuh, i.e. lampiran dibenarkan sebarang nombor pernyataan "jika" (serta pernyataan lain). Sudah tentu, "senarai" dalam setiap kes mestilah bermakna dan boleh diterima dalam konteks yang diberikan. Struktur yang paling dipotong bagi operator ini

Jika syarat maka senaraikan fi

jika syarat dipenuhi (biasanya di sinilah kod penyelesaian "0" diterima), maka "senarai" dilaksanakan, jika tidak, ia dilangkau Contoh: Biarkan "jika-1" ditulis

Jika [ $1 -gt $2 ]

kemudian pwd else echo $0: Hello!

Kemudian memanggil if-1 12 11 akan menghasilkan /home/sae/STUDY/SHELL dan if-1 12 13 akan menghasilkan if-1: Hello!

Operator panggilan ("kes")

Operator pemilihan "kes" mempunyai struktur:

Rentetan kes masuk

templat) senarai arahan;; templat) senarai arahan;; ... templat) senarai arahan;;

Di sini "case", "in" dan "esac" ialah perkataan fungsi. "Rentetan" (ini boleh menjadi satu aksara) dibandingkan dengan "corak". "Senarai arahan" baris yang dipilih kemudiannya dilaksanakan. ";;" di hujung baris pilihan kelihatan luar biasa, tetapi tulis ";" ia akan menjadi satu kesilapan. Berbilang arahan boleh dilaksanakan untuk setiap alternatif. Jika arahan ini ditulis pada satu baris, maka simbol ";" akan digunakan sebagai pemisah arahan. Biasanya baris terakhir pemilihan mempunyai corak "*", yang dalam struktur "kes" bermaksud "sebarang nilai". Baris ini dipilih jika nilai pembolehubah (di sini $z) tidak sepadan dengan mana-mana corak yang ditulis sebelum ini yang dibatasi oleh kurungan ")". Nilai dilihat mengikut susunan yang ditulis.

Pengendali gelung terhitung ("untuk")

Pengendali gelung "untuk" mempunyai struktur:

Untuk nama

senarai perintah yang dilakukan dengan "untuk" ialah kata bantu yang mentakrifkan jenis gelung, "buat" dan "selesai" ialah kata bantu yang menyerlahkan badan gelung. Biarkan arahan "lsort" diwakili oleh fail kelompok

Untuk i dalam file_1 file_2 file_3 lakukan proc_sort $i done

Dalam contoh ini, nama "i" bertindak sebagai parameter gelung. Nama ini boleh dianggap sebagai pembolehubah shell yang nilai yang disenaraikan ditetapkan secara berurutan (i=file_1, i=file_2, i=file_3), dan arahan "proc_sort" dilaksanakan dalam gelung. Borang "untuk i dalam *" sering digunakan, bermaksud "untuk semua fail dalam direktori semasa". Biarkan "proc_sort" pula diwakili oleh fail kelompok

Kucing $1 | menyusun | tee /dev/lp > $(1)_sorted

mereka. fail yang ditentukan diisih secara berurutan, hasil pengisihan dicetak ("/dev/lp") dan dihantar ke fail file_1_sorted file_2_sorted dan file_3_sorted

Penyataan gelung dengan keadaan benar ("semasa")

Struktur "semasa", yang juga melakukan pengiraan, adalah lebih baik apabila senarai tepat nilai parameter tidak diketahui terlebih dahulu atau senarai ini mesti diperolehi hasil pengiraan dalam gelung. Pernyataan gelung "semasa" mempunyai struktur:

Manakala syarat

lakukan senarai arahan yang dilakukan di mana "semasa" ialah kata bantu yang menentukan jenis gelung dengan keadaan sebenar. Senarai arahan dalam badan gelung (antara "buat" dan "selesai") diulang sehingga keadaan kekal benar (iaitu, kod penyiapan perintah terakhir dalam badan gelung ialah "0") atau gelung tidak terganggu dari dalam dengan arahan khas ( "break", "teruskan" atau "keluar"). Apabila anda mula-mula memasuki gelung, syarat mestilah benar. Perintah "break [n]" membolehkan anda keluar dari gelung. Jika "n" tiada, maka ia bersamaan dengan "break 1". "n" menunjukkan bilangan gelung bersarang dari mana untuk keluar, sebagai contoh, "break 3" - keluar dari tiga gelung bersarang. Berbeza dengan arahan "break", arahan "continue [n]" hanya menghentikan pelaksanaan gelung semasa dan kembali ke PERMULAAN gelung. Ia juga boleh dengan parameter. Sebagai contoh, "terus 2" bermaksud keluar ke permulaan gelung bersarang kedua (mengira dari kedalaman). Perintah "keluar [n]" membolehkan anda keluar dari prosedur sama sekali dengan kod pulangan "0" atau "n" (jika parameter "n" ditentukan). Perintah ini boleh digunakan dalam lebih daripada gelung. Walaupun dalam urutan linear arahan, ia boleh berguna dalam penyahpepijatan untuk menghentikan pengiraan (semasa) pada titik tertentu.

Penyataan gelung dengan keadaan palsu ("sehingga")

Operator gelung "sehingga" mempunyai struktur:

Sehingga syarat

lakukan senarai arahan yang dilakukan di mana "sehingga" ialah kata bantu yang menentukan jenis gelung dengan keadaan palsu. Senarai arahan dalam badan gelung (antara "buat" dan "selesai") diulang sehingga keadaan kekal palsu atau gelung diganggu dari dalam oleh arahan khas ("putus", "teruskan" atau "keluar" ). Kali pertama anda memasuki gelung, syarat itu tidak sepatutnya benar. Perbezaan daripada pengendali "semasa" ialah keadaan gelung disemak untuk kepalsuan (untuk kod keluar bukan sifar bagi arahan terakhir badan gelung) dan disemak SELEPAS setiap (termasuk yang pertama!) pelaksanaan perintah dalam badan gelung. Contoh.

Sehingga palsu lakukan

baca x jika [ $x = 5 ] kemudian bergema cukup ; break else bergema lagi fi

Berikut adalah program dengan gelung tidak berkesudahan menunggu perkataan untuk dimasukkan (mengulang frasa "beberapa lagi" pada skrin) sehingga "5" dimasukkan. Selepas ini, "cukup" dikeluarkan dan arahan "break" berhenti melaksanakan gelung.

Operator kosong

Penyataan kosong mempunyai format

:

Tidak melakukan apa-apa. Mengembalikan nilai "0".

Berfungsi dalam shell

Fungsi ini membolehkan anda menyediakan senarai arahan shell untuk pelaksanaan seterusnya. Penerangan fungsi kelihatan seperti:

Nama() (senarai arahan)

selepas itu fungsi dipanggil dengan nama. Apabila fungsi itu dilaksanakan, tiada proses baharu dibuat. Ia berjalan dalam persekitaran proses yang sepadan. Argumen fungsi menjadi parameter kedudukannya; nama fungsi ialah parameter sifarnya. Anda boleh mengganggu pelaksanaan fungsi menggunakan pengendali "kembali [n]", di mana (pilihan) "n" ialah kod pemulangan.

Pengendalian gangguan ("perangkap")

Mungkin perlu untuk melindungi pelaksanaan program daripada gangguan. Selalunya anda menghadapi gangguan berikut yang sepadan dengan isyarat: 0 keluar dari penterjemah, 1 tutup telefon (pemutus sambungan pelanggan jauh), 2 gangguan dari , 9 pemusnahan (tidak dipintas), 15 akhir pelaksanaan. Untuk melindungi daripada gangguan, terdapat perintah "perangkap", yang mempunyai format:

Memerangkap isyarat "senarai arahan".

Jika gangguan berlaku dalam sistem, yang isyaratnya disenaraikan dipisahkan oleh ruang dalam "isyarat", maka "senarai arahan" akan dilaksanakan, selepas itu (jika arahan "keluar" tidak dilaksanakan dalam senarai arahan) kawalan akan kembali ke titik gangguan dan pelaksanaan fail arahan akan diteruskan. Sebagai contoh, jika sebelum mengganggu pelaksanaan fail arahan adalah perlu untuk memadam fail dalam "/tmp", maka ini boleh dilakukan dengan arahan "perangkap":

Perangkap "rm /tmp/* ; keluar 1" 1 2 15

yang mendahului arahan lain dalam fail. Di sini, selepas memadam fail, fail arahan akan keluar.

  • Tutorial

Mengapa dan untuk siapa artikel itu?

Pada mulanya, ini adalah peringatan untuk pelajar yang mula bekerja dengan sistem seperti Unix. Dalam erti kata lain, artikel itu bertujuan untuk mereka yang tidak mempunyai pengalaman sebelumnya bekerja dengan baris arahan Unix, tetapi atas satu sebab atau yang lain ingin atau perlu belajar cara berinteraksi dengan berkesan dengannya.

Tidak akan ada penceritaan semula mana (dokumentasi), dan artikel itu tidak sama sekali membatalkan atau menggantikan membacanya. Sebaliknya, saya akan bercakap tentang perkara utama (perintah, teknik dan prinsip) yang perlu anda fahami dari awal bekerja dalam cangkerang unix supaya kerja berlaku dengan cekap dan menyenangkan.

Artikel berkenaan melibatkan persekitaran seperti unix yang lengkap, dengan cangkerang berfungsi sepenuhnya (sebaik-baiknya zsh atau bash) dan julat yang agak luas program standard.

Apa itu shell

Shell (shell, aka "baris arahan", aka CLI, aka "konsol", aka "terminal", aka "tetingkap hitam dengan huruf putih") ialah antara muka teks untuk berkomunikasi dengan sistem operasi(baik, secara tegasnya, ini program, yang menyediakan antara muka sedemikian, tetapi kini perbezaan ini tidak ketara).

Secara umum, kerja melalui shell kelihatan seperti ini: pengguna (iaitu anda) memasukkan arahan dari papan kekunci, menekan Enter, sistem melaksanakan arahan, menulis hasil pelaksanaan ke skrin, dan sekali lagi menunggu arahan seterusnya untuk dimasukkan.

Pandangan biasa shella:

Cangkang adalah cara utama untuk berinteraksi dengan semua sistem pelayan seperti Unix.

Di manakah sistem baris arahan ditemui?

Di mana cangkerang unix mungkin menunggu anda, pilihan popular:
  • MacOS (bash);
  • akses jauh ke pelayan untuk kerja atau untuk projek web peribadi;
  • pelayan fail rumah dengan akses jauh;
  • Ubuntu, PC-BSD pada komputer riba/desktop - sistem seperti unix hari ini mudah dipasang dan digunakan.

Apakah masalah yang munasabah untuk diselesaikan dengan cangkerang?

Tugas semula jadi yang mana cangkangnya sesuai, berguna dan sangat diperlukan:
  • kerja interaktif di terminal:
    • melaksanakan kompilasi, menjalankan kerja melalui make;
    • perbandingan fail teks;
    • analisis data ad-hoc pantas (bilangan IP unik dalam log, pengedaran rekod mengikut jam/minit, dsb.);
    • tindakan besar-besaran sekali (membunuh banyak proses; jika anda bekerja dengan sistem kawalan versi, membalikkan atau menyelesaikan sekumpulan fail);
    • diagnostik apa yang berlaku dalam sistem (semaphore, kunci, proses, deskriptor, ruang cakera, dll.);
  • skrip:
    • skrip pemasangan, yang mana anda tidak boleh bergantung pada kehadiran penterjemah lain - ini bukan untuk pemula;
    • fungsi untuk menyesuaikan shell interaktif (menjejaskan jemputan, menukar direktori, menetapkan pembolehubah persekitaran) juga bukan untuk pemula;
    • skrip sekali seperti pengekodan semula fail massa;
    • makefiles.

Benar-benar langkah pertama

Mari mulakan: log masuk dan log keluar

Pastikan anda tahu dengan tepat cara memulakan shell dan cara keluar darinya.

Jika anda bekerja pada mesin dengan Ubuntu dipasang, anda perlu melancarkan program Terminal. Apabila selesai, anda hanya boleh menutup tetingkap.

Pada MacOS - lancarkan Terminal juga.

Untuk mengakses pelayan jauh- gunakan ssh (jika anda mempunyai MacOS, Ubuntu atau sistem seperti unix lain secara tempatan) atau putty (jika anda mempunyai Windows).

Siapa saya, di mana saya?

Jalankan arahan berikut:
  • nama hos - memaparkan nama mesin (pelayan) yang sedang anda gunakan;
  • whoami - memaparkan log masuk anda (nama anda dalam sistem);
  • tree -d / |less - perwakilan grafik pseudo bagi pokok direktori pada mesin; keluar daripada menatal - q ;
  • pwd - memaparkan direktori yang anda berada sekarang; pada baris arahan anda tidak boleh "begitu sahaja", anda mesti berada dalam beberapa direktori (=direktori semasa, direktori kerja). Direktori kerja semasa mungkin dipaparkan dalam gesaan anda.
  • ls - senarai fail dalam direktori semasa; ls /home - senarai fail dalam direktori yang ditentukan;

Sejarah perintah (sejarah)

Sifat penting bagi baris arahan penuh ialah sejarah arahan.

Jalankan beberapa arahan: nama hos, ls, pwd, whoami. Sekarang tekan kekunci atas. Perintah sebelumnya muncul dalam baris input. Anda boleh menggunakan kekunci atas dan bawah untuk bergerak ke hadapan dan ke belakang melalui sejarah. Apabila anda sampai ke nama hos, tekan Enter - arahan akan dilaksanakan semula.

Perintah dari sejarah bukan sahaja boleh dilaksanakan berulang kali, tetapi juga diedit. Tatal sejarah ke arahan ls, tambahkan suis -l kepadanya (ternyata ls -l , terdapat ruang sebelum tolak, tetapi tidak selepas). Tekan Enter - arahan yang diubah suai akan dilaksanakan.

Menatal melalui sejarah, mengedit dan melaksanakan semula arahan ialah tindakan yang paling biasa apabila bekerja pada baris arahan, jadi biasakan diri anda.

Salin tampal

Baris arahan sangat mengutamakan teks: arahan ialah teks, data input untuk kebanyakan program standard ialah teks, dan output paling kerap adalah teks.

Perkara yang menarik tentang teks ialah ia boleh disalin dan ditampal, dan ini juga berlaku pada baris arahan.

Cuba tarikh arahan +"%y-%m-%d, %A"
Adakah anda memasukkannya sepenuhnya dengan tangan atau menyalinnya daripada artikel? Pastikan anda boleh menyalinnya, tampalkannya ke dalam terminal dan laksanakannya.

Setelah anda mempelajari cara menggunakan man, pastikan anda boleh menyalin dan menjalankan perintah contoh daripada bantuan Untuk menyemak, cari bahagian CONTOH dalam bantuan program tarikh, salin dan jalankan contoh pertama yang diberikan (sekiranya: tanda dolar bukan sebahagian daripada arahan , ini adalah imej simbolik gesaan input).

Cara tepat untuk menyalin teks dari terminal dan menampalnya ke terminal bergantung pada sistem anda dan tetapannya, jadi, malangnya, tidak mungkin untuk memberikan arahan universal. Di Ubuntu, cuba ini: salin - pilih sahaja dengan tetikus, tampal - butang tengah tetikus. Jika ia tidak berfungsi, atau jika anda mempunyai sistem yang berbeza, lihat di Internet atau tanya rakan yang lebih berpengalaman.

Kunci dan pilihan

Semasa anda meneroka sejarah arahan, anda telah pun mendapati bahawa arahan ls mempunyai sekurang-kurangnya dua pilihan. Jika anda memanggilnya begitu sahaja, ia mengeluarkan senarai mudah:

Akira@latitude-e7240: ~/shell-survival-quide> ls Makefile shell-first-steps.md shell-first-steps.pdf shell-survival-quide.md shell-survival-quide.pdf
Jika anda menambah suis -l, maklumat terperinci dipaparkan untuk setiap fail:

Akira@latitud-e7240: ~/shell-survival-quide> ls -l jumlah 332 -rw-rw-r-- 1 akira akira 198 Feb 13 11:48 Makefile -rw-rw-r-- 1 akira akira 15107 Feb 14 22:26 shell-first-steps.md -rw-rw-r-- 1 akira akira 146226 Feb 13 11:49 shell-first-steps.pdf -rw-rw-r-- 1 akira akira 16626 Feb 13 11 :45 shell-survival-quide.md -rw-rw-r-- 1 akira akira 146203 Feb 13 11:35 shell-survival-quide.pdf
Ini sangat keadaan tipikal: jika pengubah suai khas (kunci, pilihan, parameter) ditambahkan pada panggilan arahan, tingkah laku arahan berubah. Bandingkan: pokok / dan pokok -d / , nama hos dan nama hos -f .

Di samping itu, arahan boleh mengambil nama fail, nama direktori atau ringkasnya rentetan teks. Cuba:

Ls -ld /home ls -l /home grep root /etc/passwd

lelaki

man - Bantu dengan arahan dan program yang tersedia pada mesin anda, serta panggilan sistem dan perpustakaan C standard.

Cuba: man grep , man atoi , man chdir , man man .

Menatal ke hadapan dan ke belakang dilakukan dengan butang "atas", "bawah", "PageUp", "PageDown", keluar dari paparan bantuan dilakukan dengan butang q. Cari teks tertentu dalam artikel bantuan: tekan / (slash ke hadapan), masukkan teks untuk mencari, tekan Enter. Beralih ke kejadian seterusnya - kekunci n.

Semua artikel rujukan dibahagikan kepada kategori. Paling penting:

  • 1 - program boleh laku dan arahan shell (wc, ls, pwd, dll.);
  • 2 - panggilan sistem (fork, dup2, dll.)
  • 3 - fungsi perpustakaan (printf, scanf, cos, exec).
Adalah perlu untuk menunjukkan dari kategori mana sijil harus ditunjukkan dalam kes-kes kebetulan nama. Sebagai contoh, man 3 printf menerangkan fungsi dari perpustakaan standard C, dan man 1 printf ialah program konsol dengan nama yang sama.

Anda boleh melihat senarai semua artikel bantuan yang tersedia pada mesin anda menggunakan arahan man -k. (titik itu juga sebahagian daripada komada).

kurang

Apabila masuk tingkap kecil terminal perlu dilihat sangat banyak teks panjang(kandungan beberapa fail, seorang lelaki panjang, dll.), mereka menggunakan program "pager" khas (daripada halaman perkataan, iaitu, flippers halaman). Penatal yang paling popular adalah kurang, dan inilah yang memberikan anda penatalan apabila anda membaca halaman manual.

Cuba dan bandingkan tingkah laku:

Cat /etc/bash.bashrc cat /etc/bash.bashrc |less

Anda boleh memindahkan fail ke kelui terus dalam parameter:

Kurang /etc/bash.bashrc

Menatal ke atas dan ke bawah - butang "atas", "bawah", "PageUp", "PageDown", keluar - butang q. Cari teks tertentu: tekan / (slash ke hadapan), masukkan teks untuk mencari, tekan Enter. Beralih ke kejadian seterusnya - kekunci n. (Adakah anda mengenali arahan tentang manusia? Tidak hairanlah, kurang juga digunakan untuk memaparkan bantuan.)

Hak

Mana-mana fail atau direktori dikaitkan dengan satu set "hak": hak untuk membaca fail, hak untuk menulis pada fail, hak untuk melaksanakan fail. Semua pengguna dibahagikan kepada tiga kategori: pemilik fail, kumpulan pemilik fail dan semua pengguna lain.

Anda boleh melihat kebenaran fail menggunakan ls -l . Sebagai contoh:

> ls -l Makefile -rw-r--r-- 1 pelajar akira 198 Feb 13 11:48 Makefile
Output ini bermakna pemilik (akira) boleh membaca dan menulis fail, kumpulan (pelajar) hanya boleh membaca, dan semua pengguna lain juga hanya boleh membaca.

Jika anda menerima mesej yang dinafikan kebenaran semasa bekerja, ini bermakna anda tidak mempunyai hak yang mencukupi untuk objek yang anda ingin bekerjasama.

Baca lebih lanjut dalam man chmod.

STDIN, STDOUT, penghantar (paip)

Dikaitkan dengan setiap program yang sedang berjalan adalah 3 aliran piawai data: aliran data input STDIN, aliran data output STDOUT, aliran keluaran ralat STDERR.

Jalankan program wc, masukkan teks Good day today, tekan Enter, masukkan teks good day, tekan Enter, tekan Ctrl+d. Program wc akan menunjukkan statistik tentang bilangan huruf, perkataan dan baris dalam teks dan akhir anda:

> wc selamat hari hari ini selamat hari 2 5 24
Dalam kes ini, anda membekalkan teks dua baris ke STDIN program dan menerima tiga nombor dalam STDOUT.

Sekarang jalankan kepala arahan -n3 /etc/passwd , ia sepatutnya kelihatan seperti ini:

> head -n3 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x: 2:2:bin:/bin:/usr/sbin/nologin
Dalam kes ini, program kepala tidak membaca apa-apa daripada STDIN, tetapi menulis tiga baris ke STDOUT.

Anda boleh bayangkan dengan cara ini: program ini ialah paip yang mengalir ke dalamnya STDIN dan STDOUT mengalir keluar.

Sifat paling penting bagi baris arahan Unix ialah program "paip" boleh disambungkan antara satu sama lain: output (STDOUT) satu program boleh dihantar sebagai data input (STDIN) ke program lain.

Pembinaan program bersambung sedemikian dipanggil paip dalam bahasa Inggeris, atau penghantar atau paip dalam bahasa Rusia.

Menggabungkan atur cara ke dalam saluran paip dilakukan dengan simbol | (bar menegak)

Jalankan kepala arahan -n3 /etc/passwd |wc , ia akan kelihatan seperti ini:

> kepala -n3 /etc/passwd |wc 3 3 117
Inilah yang berlaku: program kepala mengeluarkan tiga baris teks dalam STDOUT, yang segera pergi ke input program wc, yang seterusnya mengira bilangan aksara, perkataan dan baris dalam teks yang terhasil.

Anda boleh menggabungkan seberapa banyak program yang anda suka ke dalam saluran paip. Sebagai contoh, anda boleh menambah atur cara wc lain pada saluran paip sebelumnya, yang akan mengira bilangan perkataan dan huruf dalam output wc pertama:

> kepala -n3 /etc/passwd |wc |wc 1 3 24

Mencipta saluran paip (paip) adalah tugas yang sangat biasa apabila bekerja pada baris arahan. Untuk contoh cara ini dilakukan dalam amalan, baca bahagian "Membuat saluran paip satu lapis."

Ubah hala I/O

Output (STDOUT) program bukan sahaja boleh dipindahkan ke program lain melalui saluran paip, tetapi juga hanya ditulis ke fail. Ubah hala ini dilakukan menggunakan > (lebih besar daripada tanda):

Tarikh > /tmp/today.txt
Hasil daripada melaksanakan arahan ini, fail /tmp/today.txt akan muncul pada cakera. Lihat kandungannya menggunakan cat /tmp/today.txt

Jika fail dengan nama yang sama telah wujud, kandungan lamanya akan dimusnahkan. Jika fail itu tidak wujud, ia akan dibuat. Direktori di mana fail dicipta mesti wujud sebelum arahan dilaksanakan.

Jika anda tidak mahu menulis ganti fail, sebaliknya menambah output pada penghujungnya, gunakan >> :

Tarikh >> /tmp/today.txt
Semak apa yang kini ditulis dalam fail.

Di samping itu, anda boleh menghantar mana-mana fail ke program dan bukannya STDIN. Cuba:

Wc

Apa yang perlu dilakukan apabila sesuatu yang tidak jelas

Jika anda menghadapi tingkah laku sistem yang anda tidak fahami, atau ingin mencapai hasil tertentu, tetapi tidak tahu caranya, saya menasihati anda untuk meneruskan mengikut urutan berikut (omong-omong, ini terpakai bukan sahaja untuk cengkerang):
  • Sejelas mungkin, rumuskan soalan atau tugas - tidak ada yang lebih sukar daripada menyelesaikan "sesuatu yang saya tidak tahu apa";
  • ingat jika anda telah menghadapi masalah yang sama atau serupa - dalam kes ini, ia patut mencuba penyelesaian yang berkesan kali terakhir;
  • baca halaman manual yang sesuai (jika anda memahami halaman manual mana yang sesuai dalam kes anda) - mungkin anda akan menemui contoh yang sesuai untuk menggunakan arahan, pilihan yang diperlukan atau pautan ke arahan lain;
  • fikir: adakah mungkin untuk mengubah sedikit tugas? - mungkin, dengan mengubah sedikit syarat, anda akan mendapat masalah yang anda sudah tahu bagaimana untuk menyelesaikannya;
  • tanya soalan anda yang dirumus dengan jelas dalam enjin carian - mungkin jawapannya boleh didapati di Stack Overflow atau tapak lain;
Jika tiada perkara di atas membantu, dapatkan nasihat daripada guru, rakan sekerja atau rakan yang berpengalaman. Dan jangan takut untuk bertanya soalan "bodoh" - tidak memalukan untuk tidak tahu, memalukan untuk tidak bertanya.

Jika anda menyelesaikan masalah yang sukar (sendiri, dengan bantuan Internet atau orang lain), tulis penyelesaian anda sekiranya masalah yang sama timbul lagi untuk anda atau rakan anda. Anda boleh merakamnya dalam fail teks ringkas, dalam Evernote, atau menerbitkannya di rangkaian sosial.

Kaedah kerja

Salin dan tampal- dari halaman manual, dari artikel di StackOverflow, dsb. Baris arahan terdiri daripada teks, manfaatkan ini: salin dan gunakan arahan contoh, tulis penemuan yang berjaya sebagai kenang-kenangan, terbitkannya di Twitter dan blog.

Tarik arahan sebelumnya dari sejarah, tambah arahan lain pada saluran paip, jalankan, ulangi.Cm. Lihat juga bahagian "Membuat saluran paip satu pelapik."

Perintah asas

  • tukar ke direktori lain: cd ;
  • melihat kandungan fail: kucing, kurang, kepala, ekor;
  • manipulasi fail: cp, mv, rm;
  • melihat kandungan direktori: ls , ls -l , ls -lS ;
  • struktur direktori: tree , tree -d (direktori boleh diluluskan sebagai parameter);
  • cari fail: cari . -nama ... ;

Analitis

  • wc, wc -l;
  • sort -k - susun mengikut medan yang ditentukan;
  • sort -n - pengisihan berangka;
  • perbezaan - perbandingan fail;
  • grep , grep -v , grep -w , grep "\ " , grep -E - cari teks;
  • uniq , uniq -c - keunikan rentetan;
  • awk - dalam pilihan awk "(cetak $1)", untuk meninggalkan hanya medan pertama dari setiap baris, $1 boleh ditukar kepada $2, $3, dsb.;

Diagnostik sistem

  • ps axuww - maklumat tentang proses (menjalankan program) yang berjalan pada mesin;
  • atas - tontonan interaktif proses yang paling intensif sumber;
  • df - ruang cakera terpakai dan kosong;
  • du - jumlah saiz fail dalam direktori (secara rekursif dengan subdirektori);
  • strace , ktrace - sistem apa yang dipanggil proses membuat;
  • lsof - fail apa yang digunakan oleh proses;
  • netstat -na, netstat -nap - port dan soket yang dibuka dalam sistem.

Anda mungkin tidak mempunyai beberapa program; ia perlu dipasang tambahan. Di samping itu, beberapa pilihan program ini hanya tersedia untuk pengguna istimewa (root).

Pelaksanaan pukal dan separa automatik

Pada mulanya, langkau bahagian ini; anda akan memerlukan arahan dan binaan ini apabila anda sampai ke skrip shell mudah.
  • ujian - memeriksa keadaan;
  • manakala baca - gelung baris demi baris STDIN ;
  • xargs - penggantian rentetan daripada STDIN ke dalam parameter program yang ditentukan;
  • seq - penjanaan jujukan nombor asli;
  • () - menggabungkan output beberapa arahan;
  • ; - lakukan satu demi satu perkara;
  • && - laksanakan jika arahan pertama berjaya diselesaikan;
  • || - jalankan jika arahan pertama gagal;
  • tee - salin output program ke STDOUT dan ke fail pada cakera.

Macam-macam

  • tarikh - tarikh semasa;
  • curl - memuat turun dokumen dari url yang ditentukan dan menulis hasilnya ke STDOUT;
  • sentuh - kemas kini tarikh pengubahsuaian fail;
  • bunuh - hantar isyarat kepada proses;
  • benar - tidak melakukan apa-apa, mengembalikan benar, berguna untuk mengatur gelung kekal;
  • sudo - laksanakan arahan sebagai root "a.

Mewujudkan saluran paip satu pelapik

Mari kita lihat contoh tugas sebenar: kita perlu mematikan semua proses tugas-6-pelayan yang berjalan sebagai pengguna semasa.

Langkah 1.
Fahami program yang menghasilkan kira-kira data yang diperlukan, walaupun tidak dalam bentuk tulennya. Untuk tugas kami, adalah bernilai mendapatkan senarai semua proses dalam sistem: ps axuww. Pelancaran.

Langkah 2.
Lihat data yang diterima dengan mata anda, buat penapis yang akan membuang beberapa data yang tidak diperlukan. Ini selalunya grep atau grep -v . Gunakan kekunci "Naik" untuk mengeluarkan perintah sebelumnya daripada sejarah, tetapkan penapis yang dicipta kepadanya dan jalankannya.

Ps axuww |grep `whoami`
- hanya proses pengguna semasa.

Langkah 3.
Ulangi langkah 2 sehingga anda mendapat data bersih yang anda perlukan.

"
- semua proses dengan nama yang diperlukan (tambah, mungkin, proses tambahan seperti vim task-6-server.c, dll.),

Ps axuww |grep `whoami` | grep "\ " | grep -v vim ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v less
- hanya proses dengan nama yang diperlukan

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v less |awk "(cetak $2)"

Pids proses yang diperlukan, langkah 3 selesai

Langkah 4.
Gunakan pengendali akhir yang sesuai. Menggunakan kekunci "Naik", kami mengeluarkan arahan sebelumnya dari sejarah dan menambah pemprosesan yang akan menyelesaikan penyelesaian kepada masalah:

  • |wc -l untuk mengira bilangan proses;
  • >pids untuk menulis pids ke fail;
  • |xargs kill -9 kill process.

Tugas latihan

Ingin berlatih kemahiran baru? Cuba tugasan berikut:
  • dapatkan senarai semua fail dan direktori dalam direktori rumah anda;
  • dapatkan senarai semua artikel lelaki dari kategori 2 (panggilan sistem);
  • kira berapa kali perkataan grep muncul dalam halaman manual program grep;
  • kira berapa banyak proses yang sedang dijalankan bagi pihak pengguna akar ;
  • cari arahan yang muncul dalam bilangan maksimum kategori bantuan (lelaki);
  • kira berapa kali perkataan var muncul pada halaman ya.ru.
Petunjuk: anda perlu find , grep -o , awk "(print $1)" , ungkapan biasa dalam grep , curl -s .

Apa yang perlu dipelajari seterusnya?

Jika anda mula menyukai baris arahan, jangan berhenti, terus tingkatkan kemahiran anda.

Berikut adalah beberapa program yang pasti akan berguna jika anda tinggal di baris arahan:

  • cari dengan pilihan yang kompleks
  • apropos
  • cari
  • telnet
  • netcat
  • tcpdump
  • rsync
  • skrin
  • zgrep, zless
  • visudo
  • crontab -e
  • hantar surat
Di samping itu, dari masa ke masa adalah berbaloi untuk menguasai beberapa jenis bahasa skrip, seperti perl atau python, atau bahkan kedua-duanya.

Siapa yang memerlukan ini?

Adakah berbaloi untuk mempelajari baris arahan dan skrip shell hari ini? Pasti berbaloi. Saya akan berikan hanya beberapa contoh keperluan Facebook untuk calon yang ingin mendapatkan pekerjaan di FB.

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

KERJA MAKMAL No 1 (masa siap - 3 jam)

Topik: "Pengenalan kepadacangkerang

1. Pengenalan kepada shell

Shell ialah jurubahasa arahan (pemproses arahan) yang bertindak sebagai antara muka antara pengguna dan kernel Unix. Solaris menawarkan tiga pemproses arahan utama:

    Cangkang Bourne lalai ialah /sbin/sh

    C Pemproses Perintah -- /bin/csh

    Korn shell-- ./bin/ksh

Sebagai tambahan kepada yang disenaraikan, Solaris menyediakan cengkerang tambahan:

    J shell -- /sbin/jsh

    Korn Terhad l -- / usr/ bin/rsh

    T-shell -- /usr/bin/tcsh

    GNU Bourne Lagi -- /usr/bin/bash

    Z-shell – usr/bin/zsh

Pilihan pemproses arahan adalah perkara keutamaan peribadi.

2. Jalankan arahan

Sebarang arahan dalam Unix terdiri daripada nama program yang akan dilancarkan (perintah), pilihan (kunci) dan hujah yang dihantar kepada program. Baris arahan dibatasi oleh ruang atau tab.

Contoh

$ /bin/ping –t 10 192.168.2.13

hujah

jemputan shell

Jika laluan ke fail boleh laku tidak ditentukan semasa memulakan program, OS secara berurutan melihat melalui direktori yang dinyatakan dalam pembolehubah PATH. Jika terdapat program dengan nama yang sama dalam direktori yang dilihat, maka ia dilancarkan untuk pelaksanaan. Direktori kerja semasa tidak dicari untuk program melainkan ia dinyatakan dalam pembolehubah PATH.

! Atas sebab keselamatan, adalah disyorkan bahawa pentadbir tidak menambah direktori semasa pengguna dan direktori rumah (peribadi) kepada pembolehubah PATH.

Contoh

Jalankan program yang menentukan laluan penuh

$ / usr/ tempatan/ tong sampah/ saya_ program

Menjalankan program dari direktori (ibu bapa) yang lebih tinggi

$ ../ tempatan/ tong sampah/ saya_ program

Menjalankan program dari direktori semasa

$ ./ saya_ program

3. Watak khas dalam cangkerang

Beberapa aksara cangkang mempunyai makna yang istimewa.

3.1. Templat penjanaan nama fail

? (tanda soal) sepadan dengan mana-mana satu aksara kecuali titik pertama;

(dalam kurungan) tentukan kumpulan simbol (satu simbol daripada kumpulan dipilih);

- (tanda tolak") mentakrifkan julat aksara yang sah;

! (Tanda seru) menolak kumpulan aksara berikut;

* (simbol asterisk) sepadan dengan sebarang bilangan aksara kecuali titik pertama.

3.2. Simbol pengalihan I/O

< - pengalihan masukan;

>, >> - pengalihan keluaran;

2>, 2>> - pengalihan semula mesej ralat;

| - penghantar.

3.3. Watak penggantian

$nama_pembolehubahq - penggantian berubah;

$(perintah) atau `pasukan` - penggantian arahan;

~ - penggantian tilde.

4. Cari

Untuk mencari fail dan direktori dengan cepat, gunakan perintah whereis untuk carian yang lebih mendalam, gunakan arahan cari (cari fail yang memenuhi keperluan yang ditetapkan;).

5. Penyunting teks vi

Editor teks vi ialah editor universal yang terdapat dalam mana-mana Unix. Selain mengedit fail teks, editor vi boleh digunakan untuk mengedit baris arahan.

Editor vi mempunyai 3 mod operasi (lihat rajah).

Log masuk ke editor vi

Keluar vi

Tanda “~” (tilde) dalam kedudukan pertama menandakan baris kosong (tidak wujud) pada fail.

Mod utama ialah mod arahan, di mana arahan dimasukkan dengan menekan urutan kekunci tertentu (ia tidak dipaparkan pada skrin dalam apa jua cara).

Bergerak melalui teks dalam mod arahan dilakukan menggunakan anak panah dan kekunci (dibiarkan), (bawah), (atas), (ke kanan).

Beberapa arahan vi disenaraikan dalam jadual.

Memadam baris semasa

Menyalin baris semasa ke penimbal

Pergerakan kursor

Memasukkan aksara yang ditanda oleh kursor ke dalam penimbal

Masukkan baris baharu di bahagian bawah

Memasukkan baris baharu di bahagian atas

Menambah selepas kursor

Tambah selepas baris semasa

Sisipkan sebelum kursor

Sisipkan sebelum baris semasa

Menggantikan aksara dengan aksara yang dimasukkan dari papan kekunci

Menampal teks daripada papan keratan

. (titik)

Ulangi arahan terakhir yang dilaksanakan

Batalkan arahan terakhir

Buat asal semua perubahan pada baris semasa

Memadamkan aksara di atas kursor

Dalam mod input, semua aksara yang ditaip pada papan kekunci dimasukkan ke dalam teks.

Dalam mod baris terakhir, arahan yang anda masukkan muncul pada baris terakhir skrin.

6. Bantuan

Unix mempunyai direktori elektronik yang mengandungi penerangan tentang tujuan arahan, sintaksnya, contoh penggunaan, dll. Direktori dipanggil dengan arahan lelaki:

7. Perintah shell asas

WHO– memaparkan maklumat tentang pengguna aktif;

bergema– output mesej ke terminal;

sepanduk– output mesej ke terminal dalam huruf besar;

lelaki– memanggil sistem bantuan dalam talian;

Tarikh – keluaran tarikh semasa;

menulis– pemindahan mesej ke terminal pengguna lain;

mesg– membenarkan/melarang paparan mesej daripada pengguna lain;

mel– menghantar/menerima mel;

berita– membiasakan diri dengan berita sistem;

pwd– memaparkan nama laluan mutlak direktori kerja semasa;

CD– menukar direktori kerja;

ls– memaparkan maklumat tentang kandungan direktori;

mkdir- mencipta katalog;

rmdir– memadam direktori;

sentuh– mengemas kini cap masa fail;

cp– menyalin fail;

kucing– menggabungkan dan memaparkan kandungan fail;

lebih– paparan halaman demi halaman kandungan fail.

mv – memindahkan atau menamakan semula fail;

rm– pemadaman fail;

alias- mencipta nama samaran;

tr– penukaran watak;

keluar– penyempurnaan arus cangkerang-A;

tee– pemintasan keputusan saluran paip;

potong – memilih medan daripada baris;

grep– cari mengikut templat;

pr– keluarkan fail ke output standard dalam format yang ditentukan;

menyusun- menyusun;

kepala– output baris pertama fail;

ekor– output baris terakhir fail;

wc– mengira bilangan aksara, perkataan dan baris;

membaca, bergema - membaca dan mengeluarkan nilai pembolehubah;

ujian- menilai makna ungkapan;

expr, biarkan- pengiraan ungkapan aritmetik;

8. Shell-program

Shell membolehkan anda menyimpan urutan arahan dalam fail dan kemudian melaksanakannya. Untuk menjalankan fail dengan program shell untuk pelaksanaan, anda perlu menambah hak laksana kepada hak akses:

$ chmod +x nama_fail_program

Percabangan dalam program shell dianjurkan menggunakan operator berikut:

jika-maka-lain

Pengendali gelung:

SENAMAN

1. Antara arahan berikut, yang manakah akan menyebabkan mesej alu-aluan dipaparkan pada skrin? Yang mana tidak? kenapa?

$echo hello

$ echo hello

$ echo HELLO, DUNIA

$ sepanduk hello

$ BANNER HELLO, DUNIA

2. Cetak mesej melalui berbilang baris menggunakan arahan bergema Dan sepanduk.

3. Cetak tarikh dalam dua baris: pada baris pertama hari, bulan, tahun, pada baris kedua masa semasa, memberikan output dengan ulasan.

4. Menggunakan arahan menulis, hantar mesej ke konsol. Hantar mesej ke berbilang terminal serentak.

5. Menggunakan arahan mesg, tentukan sama ada mesej dibenarkan pada terminal anda. Larang mesej. Apakah reaksi sistem jika seseorang cuba menghantar mesej kepada anda?

6. Tentukan nama anda RUMAH- katalog.

7. Semak imbas subtree direktori bermula dari direktori /export/home menggunakan arahan cd, ls Dan pwd.

8.. Buat dalam anda RUMAH-subdirektori dalam bentuk:

bunga buah

anggur pear epal mawar dandelion ungu

hijau gelap

9. Berada dalam diri anda sendiri RUMAH-direktori, buat subdirektori berikut menggunakan satu baris arahan:

A/B/C/D

10. Menjadi diri sendiri RUMAH-direktori, padam semua subdirektori direktori A.

11. Semasa dalam RUMAH-direktori, buat fail macintosh dalam katalog sedia ada epal dan beberapa fail dalam direktori gelap Dan hijau. Log masuk ke direktori fmerendahkan. Semasa dalam direktori fmerendahkan, salin semua subdirektori fruits bersama-sama dengan fail yang terkandung di dalamnya ke dalam direktori yang dicipta khas bakul.

12. Semasa dalam direktori fmerendahkan, padamkan direktori fruits.

13. Baca fail .profil menggunakan arahan kucing Dan lebih.

14. Cipta dalam RUMAH-fail teks direktori myfile daripada berbilang baris menggunakan arahan kucing. Buat fail teks MyFile, dengan menulis baris yang sama ke dalamnya. Berapa banyak fail yang anda dapat? kenapa?

15. Lihat kandungan fail yang dibuat dalam tugasan 2.2 myfile. Salin fail myfile untuk memfailkan mycopy. Lihat kandungan kedua-dua fail.

16. Alihkan fail mycopy kepada katalog bunga.

17. Semasa dalam RUMAH-katalog, buat pautan mypautan setiap fail mycopy terletak di dalam direktori bunga. Lihat fail pautan.

18. Tambah baris pada fail sayapautan. Mana satu fail sayapautan, sayasalinan, sayafail berubah? kenapa?

19. Menggunakan arahan apakah anda boleh menentukan bilangan pautan? Tentukan bilangan pautan untuk fail sayapautan, sayasalinan, sayafail.

Padamkan fail mycopy. Apa yang berlaku kepada fail pautan? Tentukan bilangan pautan untuk fail sayapautan, sayafail.

20. Buat alias dir, yang mencetak kandungan direktori semasa dalam format lanjutan.

21. Log keluar dan log masuk semula. Adakah alias berfungsi? dir? Apakah yang perlu dilakukan untuk memastikan nama panggilan tidak hilang antara sesi?

22. Buat alias titik, yang mencetak senarai fail dalam direktori kerja yang namanya bermula dengan titik.

23. Menggunakan arahan sentuh, buat fail dalam direktori baharu dengan nama sedemikian pada masa yang sama:

templat a* 5 fail dipadankan;

templat * a sepadan dengan 4 fail;

templat ??.? dipadankan dengan 3 fail;

templat * aa* sepadan dengan 2 fail;

templat??? dipadankan dengan 1 fail.

24. Perintah manakah yang perlu anda masukkan untuk melakukan perkara berikut:

a) paparkan nama semua fail bermula dengan titik;

b) paparkan nama semua fail yang berakhir dengan “.txt”;

c) paparkan nama semua fail yang mengandungi perkataan “saya”;

25. Gantikan semua huruf kecil dalam satu fail dengan huruf besar, dan dalam satu lagi - semua huruf besar dengan huruf kecil. Hapuskan sebarang ruang pendua daripada fail.

26. Buat fail dipanggil * . Padam fail ini sahaja. Berhati-hati apabila menggunakan aksara penjanaan nama fail!

27. Buat fail yang mempunyai ruang dalam namanya. Bagaimana untuk memadam fail sedemikian?

28. Menggunakan arahan kucing menggandakan kandungan fail dengan menambahkan kandungan asal pada penghujung fail yang sama. Pergi ke direktori bunga. Tambahkan pada fail spisok senarai kandungan direktori bunga. Lihat kandungan fail

29. Cuba baca menggunakan arahan kucing fail yang tidak wujud. Apakah tindak balas sistem? Lakukan perkara yang sama dengan mengubah hala mesej ralat ke fail myerror. Apa yang anda lihat pada skrin? Lihat fail myerror.

30. Buat saluran paip untuk menyenaraikan hanya nama dan kebenaran fail yang sedang berada dalam direktori kerja anda.

31. Tukar saluran paip yang dibina supaya senarai disimpan dalam fail spisok milik anda RUMAH-direktori, dan hanya bilangan fail dalam senarai dipaparkan pada skrin.

32. Paparkan kandungan fail /etc/passwd, diisih mengikut medan nama pengguna.

33. Buat alias dilogpada, yang akan memaparkan senarai nama pengguna yang tersusun mengikut abjad yang bekerja pada sistem.

33. Paparkan tarikh semasa dalam huruf besar menggunakan arahan Tarikh Dan sepanduk.

34. Berikan kepada pembolehubah SAYA ADALAH. Nama pendaftaran anda. Mulakan satu lagi cangkerang. Adakah anda melihat pembolehubah ini? Apa yang anda perlu lakukan untuk melihatnya dalam yang dihasilkan cangkerang? Tukar nilai pembolehubah SAYA ADALAH. dalam yang dihasilkan cangkerang. Keluarlah dari yang diperanakkan cangkerang. Lihat nilai pembolehubah ini dalam sumber cangkerang. Terangkan hasilnya.

35. Tulis cangkerang-program info, yang akan meminta pengguna memasukkan nama, alamat, hari, bulan dan tahun lahir dan memaparkan maklumat ini dalam susunan terbalik yang dimasukkan

36. Tulis cangkerang- program yang akan memaparkan gesaan untuk memasukkan nombor dan menyimpan nombor yang dimasukkan dalam pembolehubah Y, dan mencetak mesej “Y lebih besar daripada 7”, jika nilai Y lebih daripada 7, dan “Y ialahbukan lebih besar daripada 7” sebaliknya.

37. Tulis program shell yang memaparkan statistik berikut:

a) nama anda;

b) bilangan hujah yang ia dilancarkan;

c) mencetak setiap hujahnya dan panjang hujah dalam aksara;

38. Tulis cangkerang- program yang menentukan bilangan argumen pada baris arahan dan memaparkan mesej ralat jika bilangan argumen bukan tiga, atau argumen itu sendiri jika bilangannya adalah tiga.

39. Tulis cangkerang- program yang akan menggesa anda memasukkan ID pengguna, menyemak ID terhadap yang digunakan dalam sistem, dan memaparkan nama penuh RUMAH-direktori atau, dalam kes pengecam yang tidak sah, paparkan mesej ralat.

40. Tulis program shell hello, yang memberikan respons berikut kepada argumen baris arahan:

Hujah “-d”- program akan melaksanakan arahan Tarikh;

Hujah “-l”- program akan memaparkan kandungan direktori semasa;

    Jika tiada hujah atau hujah tidak sah pada baris arahan, atur cara akan mencetak bantuan tentang pilihannya.

41. Tulis program perkataan, yang akan menggesa pengguna memasukkan satu perkataan pada satu masa sehingga dia memasukkan perkataan itu tamat. Ingat semua perkataan yang anda masukkan. Selepas memasukkan perkataan tamat memaparkan semua perkataan yang dimasukkan pada skrin.

42. Tukar gesaan sistem supaya ia mengandungi nama laluan penuh direktori kerja semasa .

43. Tulis program virus, yang mencipta salinan boleh laku sendiri dengan nama yang berbeza dan kemudian memadamkan dirinya sendiri.

44. Tulis program virus2 , yang mencari direktori semasa untuk program bahasa arahan dan menambah pada teksnya arahan untuk memaparkan perkataan Dijangkiti!”.

45. Tulis program virus3 , yang menambahkan kodnya sendiri pada program bahasa arahan yang didapatinya menjangkiti program lain.

46. ​​Tulis program virus4 , dengan mengubah suai virus anda supaya apabila dijangkiti, kod yang menjangkiti dikeluarkan daripada program yang menjangkiti.

47. Tulis program antivirus, yang akan mendapati semua program shell dijangkiti virus anda.

48. Ubah suai program yang dibangunkan supaya ia bukan sahaja mencari program yang dijangkiti dalam direktori yang ditentukan kepadanya, tetapi juga "menyembuhkannya" dengan menyimpan versi yang dijangkiti dalam fail baharu dengan pengakhiran ditambah pada namanya . vir, dan mengalih keluar atribut pelaksanaan daripada fail sedemikian.

49. Tulis program virus5 , yang akan:

a) akan menjangkiti program shell dalam direktori semasa dan subdirektorinya dengan virus hanya jika pengguna memasukkan arahan ls;

b) akan berkelakuan seperti satu pasukan ls, tanpa mendedahkan apa-apa tentang kerja anda di terminal.

50. Tulis program virus6 berdasarkan program virus2 -virus5 , kod yang menjangkiti yang tidak dapat dikesan oleh program yang anda bangunkan antivirus, dan jangkitan akan berlaku untuk sebarang nilai pembolehubah JALAN.

51. Tulis program supervirus, pelancaran yang menjangkiti fail anda dengan virus yang dibangunkan dalam tugas sebelumnya, dan setiap kali anda log masuk ke sistem, percubaan dibuat untuk menjangkiti fail rakan anda. Program supervirus memadamkan dirinya sendiri selepas pelancaran pertama.

52. Tulis program superantivirus, yang mengesan dan "menyembuhkan" sepenuhnya (jika pilihan yang sesuai dinyatakan) semua fail dalam direktori yang ditentukan dan subdirektorinya daripada semua virus yang dibangunkan.