Кіріспе

Unix-ке ұқсас жүйелерде операциялық жүйенің қабығы немесе командалық жол интерпретаторы үшін жазылған скрипт. Шелл скрипті – Unix қабығы, командалық жол интерпретаторымен орындалатын компьютерлік бағдарлама. Шелл скрипттерінің әртүрлі диалектілері скрипттік тілдер саналады. Шелл скрипттерімен орындалатын әдеттегі операцияларға файлдарды өңдеу, бағдарламаны іске қосу және мәтінді басып шығару жатады. Ортаны дайындап, бағдарламаны іске қосып, қажетті тазалау жұмыстарын немесе журналды жүргізетін скрипт орауыш деп аталады. Бұл термин сондай-ақ операциялық жүйе қабығын автоматты түрде іске қосу режимін білдіру үшін де қолданылады; әрбір операциялық жүйе осы функцияларға арналған белгілі бір атауды қолданады, мысалы, топтық файлдар (MSDos Win95, OS/2), командалық процедуралар (VMS) және қабық скрипттері (Windows NT және 4NT сияқты үшінші тараптық туындылары – cmd.exe), ал мейнфрейм операциялық жүйелерінде көптеген терминдер қолданылады. Unix және Unix-ке ұқсас жүйелерде кең таралған қабықшаларға Korn қабықшасы, Bourne қабықшасы және GNU Bash жатады. Unix операциялық жүйесінде macOS-тағы Zsh сияқты әдепкі қабықша басқа болуы мүмкін, бірақ бұл қабықшалар көбінесе кері үйлесімділік үшін қолданылады.

Ескертпелер

Комментарийлер қабықша тарапынан назарға алынбайды. Олар көбінесе хэш белгісінен (#) басталып, жолдың соңына дейін созылады.

Скриптті таңдау тілі

Шебанг немесе хэш-банг – жүйенің файлды орындау үшін қандай интерпретаторды пайдалану керектігін анықтауға арналған ерекше түріндегі түсініктеме. Шебанг файлдың бірінші жолында болуы керек және "#! " символымен басталуы тиіс.

Бағдарламалау

Көптеген заманауи қабықтар, әдетте күрделі мақсаттағы бағдарламалау тілдерінде ғана кездесетін, басқару ағыны құрылымдары, айнымалылар, түсініктемелер, массивтер, кіші бағдарламалар және тағы да басқа мүмкіндіктерді ұсынады. Осындай мүмкіндіктердің болуы, шалғай скрипттер түрінде жеткілікті күрделі қосымшаларды жазуға мүмкіндік береді. Дегенмен, көптеген қабық тілдерінде деректер типтері жүйесіне, сыныптарға, жіптерге, күрделі математикаға және басқа да толыққанды тілдік мүмкіндіктерге қолдау шамалы немесе мүлдем жоқ болғандықтан, олардың мүмкіндіктері шектеулі. Сонымен қатар, олар жинақталған кодтан немесе жылдамдыққа бағытталған түсіндірілген тілдерден әлдеқайда баяу жұмыс істейді. Стандартты Unix құралдары sed және awk қабықша бағдарламалау үшін қосымша мүмкіндіктер ұсынады; Perl және Tcl сияқты басқа да скрипт тілдерін қабықша скрипттеріне енгізуге болады. Perl және Tcl графикалық құралдар жиынтығымен бірге келеді.

Басқа скрипт тілдері

Көптеген қуатты скрипт тілдері, әдеттегі қабықша скрипттерімен оңай жұмыс істеуге тым үлкен немесе күрделі тапсырмалар үшін ұсынылған, бірақ скрипттердің пайдалылығын сақтап, толыққанды, компиляцияланатын бағдарламалау тілін жасаудың қиындықтарынан қашуға мүмкіндік береді. Скрипт тілдерін жоғары деңгейлі бағдарламалау тілдерінен ажырататын нақты айырмашылықтар жиі пікірталас тудырады, бірақ жалпы алғанда, скрипт тілі – интерпретаторды қажет ететін тіл.

Өмірлік цикл

Shell скрипттері көбінесе бағдарламалық жасақтаманы әзірлеудің бастапқы кезеңі ретінде қолданылады және кейіннен басқа негізгі іске асыруға түрлендіріледі, ең көп кездесетіні Perl, Python немесе C тілдеріне. Интерпретатор директивасы іске асырудың егжей-тегжейін файл атауының кеңейтімі арқылы көрсетпей, скрипт ішінде толық жасыруға мүмкіндік береді, сондай-ақ соңғы пайдаланушыларға әсер етпейтін түрлі тілдерде қайта іске асыруды жеңілдетеді. ".sh" файл кеңейтімі көбінесе қандай да бір shell скриптін білдірсе де, көптеген shell скрипттерінде файл атауының кеңейтімі болмайды.

Артықшылықтары мен кемшіліктері

Шелл скриптін жазудың ең үлкен артықшылығы, мүмкін, командалар мен синтаксис тікелей команда жолында енгізілгендермен толық сәйкес келеді. Бағдарламашыға мүлдем басқа синтаксиске ауысу қажеттілігі тумайды, егер скрипт басқа тілде жазылса немесе компиляцияланатын тіл қолданылса. Көбінесе шелл скриптін жазу, басқа бағдарламалау тілдеріндегі эквивалентті кодты жазуға қарағанда әлдеқайда жылдам болады. Көптеген артықшылықтардың қатарында оңай бағдарлама немесе файлды таңдау, жылдам бастау және интерактивті түзеу мүмкіндігі бар. Шелл скрипті қолданыстағы бағдарламалардың тізбектелуін және шешім қабылдау процесін ұйымдастыруға қолданылуы мүмкін, ал орташа көлемді скрипттер үшін компиляция қадамын өткермеудің өзі артықшылық болып табылады. Интерпретациялық орындалу скриптке түзеу кодын енгізуді және қателерді анықтап, түзету үшін оны қайта іске қосуды жеңілдетеді. Кәсіби емес пайдаланушылар бағдарламалардың әрекетін өзгерту үшін скрипттерді пайдалана алады, ал шелл скрипті шектеулі мультипроцессинг мүмкіндігін ұсынады. Алайда, шелл скрипті қателерге бейім, олар қымбатқа түсуі мүмкін. Мысалы, `rm rf * /` (орнына дұрысы `rm rf */`) сияқты қате теру Unix қауымдастығында кең таралған; бір ғана артық бос орын команданы ағымдағы каталогтағы барлық қосалқы каталогтарды жоюдан, файлдық жүйенің түбірлік каталогындағы барлық нәрсені жоюға айналдырады. Ұқсас қателер `cp` және `mv` командаларын қауіпті құралға айналдыруы мүмкін, ал `>` қайта бағыттауын дұрыс қолданбау файлдың мазмұнын жоюы мүмкін. Бұл мәселені күрделендіретін фактор – көптеген UNIX командаларының атаулары бір әріппен ғана ерекшеленеді: `cp`, `cd`, `dd`, `df` және т.б. Тағы бір маңызды кемшілік – орындалу жылдамдығының төмендігі және орындалған әрбір шелл командасы үшін жаңа процесті іске қосу қажеттілігі. Егер скрипт міндетін тиімді сүзгі командаларының көп бөлігін орындайтын құбыр арқылы орындауға болады, онда жылдамдық мәселесі шешіледі, бірақ күрделі скрипт әдетте эквивалентті тапсырманы орындайтын дәстүрлі компиляцияланған бағдарламадан бірнеше есе баяу болады. Әртүрлі платформалар арасында да үйлесімділік проблемалары бар. Perl тілін жасаған Ларри Уолл атақты түрде «Шеллді, шелл скриптінен гөрі оңайрақ көшіруге болады» деп жазған. Сол сияқты, күрделі скрипттер шелл скрипті тілінің өзінің шектеулеріне тап болуы мүмкін; бұл шектеулер сапалы код жазуды қиындатады, ал түпнұсқа шелл тілімен проблемаларды шешу үшін әртүрлі шеллдердің кеңейтулері жағдайды нашарлатуы мүмкін. Кейбір скрипт тілдерін пайдаланудың көптеген кемшіліктері тілдің синтаксисінде немесе іске асырылуындағы қателерге байланысты, және бұл мәселелер мәтіндік командалық жолды пайдаланумен байланысты емес; басқа шелл бағдарламалау тілдерін немесе тіпті Scsh (Scheme тілін қолданатын) сияқты толыққанды тілдерді қолданатын бірнеше шеллдер бар.

Скрипттік тілдердің өзара әрекеттесуі

Әр түрлі скрипт тілдері көптеген ортақ элементтерге ие болуы мүмкін, көбінесе POSIX негізінде құрылғандықтан, ал кейбір қабықшалар басқа қабықшаларды имитациялау режимдерін ұсынады. Бұл бір скрипт тілінде жазылған қабықша скриптін басқа тілге бейімдеуге мүмкіндік береді. Мысалы, Bash – Bourne shell сияқты грамматика мен синтаксиске ие, сонымен қатар POSIX стандартына сәйкес келетін режимді де ұсынады. Сондықтан, Bourne shell үшін жазылған көптеген қабықша скрипттерін BASH-та орындауға болады, бірақ керісінше дұрыс болмауы мүмкін, себебі BASH-та Bourne shell-де жоқ қосымша мүмкіндіктер бар. Осы мүмкіндіктер "башизмдер" деп аталады.

Басқа операциялық жүйелерде шелл скрипттері

Cygwin, MKS Toolkit, Interix (Microsoft Windows Services for UNIX-те бар), Hamilton C shell, UWIN (AT&T Unix for Windows) және басқалар сияқты өзара әрекеттесетін бағдарламалық қамтамасыз ету Windows NT және оның кейінгі нұсқаларында Unix қабықша бағдарламаларын іске қосуға мүмкіндік береді, MS DOS Windows 95 тармағында қызметтердің белгілі бір бөлігі жоғалуымен, сондай-ақ OS/2 үшін MKS Toolkit-тің ескі нұсқаларында. Windows операциялық жүйелері үшін кем дегенде үш DCL іске асырылуы бар – XLNT-ден басқа, командалық қабықшамен, Windows Script Host және CGI бағдарламалаумен қолданылатын көп мақсатты скрипт тілі жиынтығы, осы жүйелер үшін де қолжетімді. Mac OS X және одан кейінгі нұсқалары Unix сияқты. Аталған құралдардан өзге, Windows NT операциялық жүйесінің Windows 2000-ға дейінгі нұсқаларындағы тиісті орталық кіші жүйелермен POSIX және OS/2 функционалдығының бір бөлігін де пайдалануға болады. Көбінесе MS DOS кіші жүйесі деп аталатын үшінші, 16 биттік кіші жүйе осы операциялық жүйелермен бірге келген Command.com арқылы жоғарыда аталған MS DOS пакеттік файлдарын іске қосады. 4DOS, 4OS2, FreeDOS, Peter Norton-ның NDOS және Windows NT стиліндегі cmd.exe-ге қосымша мүмкіндіктер беретін 4NT / Take Command, MS DOS/Windows 95 пакеттік файлдары (Command.com арқылы іске қосылады), OS/2-нің cmd.exe және 4NT сәйкесінше оларды жақсартатын қабықшаларға ұқсас және Windows Script Host-пен жақсырақ үйлеседі, ол VBScript, JScript және VBA үш алдын ала орнатылған қозғалтқыштарымен бірге келеді және көптеген үшінші тарап қозғалтқыштарын қосуға болады, ал Rexx, Perl, Python, Ruby және Tcl 4NT және байланысты бағдарламаларда алдын ала анықталған функцияларға ие. PC DOS MS DOS-қа өте ұқсас, ал DR DOS одан едәуір өзгеше. Windows NT-тің ескі нұсқалары OS/2 кіші жүйесі арқылы 4OS2-нің қазіргі нұсқаларын іске қоса алады. Скрипт тілдері, анықтама бойынша, кеңейтілуге қабілетті; мысалы, MS DOS / Windows 95/98 және Windows NT типті жүйелерде KiXtart, QBasic, әртүрлі BASIC, Rexx, Perl және Python іске асырылымдарын, Windows Script Host және оның орнатылған қозғалтқыштарын шақыруға болады. Unix және басқа POSIX сәйкес жүйелерде awk және sed қабықша скрипттерінің жол және сандық өңдеу мүмкіндіктерін кеңейту үшін қолданылады. Tcl, Perl, Rexx және Python графикалық құралдар жиынтығына ие және қабықша скрипттерінің жылдамдық тұрғысынан қиындық тудыратын функциялары мен процедураларын кодтау үшін (C, Fortran, ассемблер және т.б. одан да жылдам), сондай-ақ сокеттер және басқа да қосылым функциялары, күрделі мәтін өңдеу, шақырушы скриптте осы мүмкіндіктер болмаса сандармен жұмыс істеу, өзін-өзі жазатын және өзін-өзі өзгертетін код, рекурсия, тікелей жадқа қол жеткізу, сұрыптаудың әртүрлі түрлері және т.б. сияқты негізгі скриптте орындау қиын немесе мүмкін емес функционалды қосу үшін пайдаланылуы мүмкін. Visual Basic for Applications және VBScript электрондық кестелер, деректер базалары, кез келген типтегі скрипттелген бағдарламалар, телекоммуникациялық бағдарламалық қамтамасыз ету, әзірлеу құралдары, графикалық құралдар және Компоненттік объектілік модель арқылы қол жетімді басқа да бағдарламалық қамтамасыз ету сияқты нәрселерді басқару және олармен байланысу үшін қолданылуы мүмкін.