Скрипт что это такое википедия: Википедия:Скрипты — Википедия – Википедия:Персональные скрипты — Википедия

Содержание

Википедия:Самые используемые скрипты — Википедия

Место Скрипт Использований
1 Участник:Higimo/remove.js 186
2 Участник:Dibot/pat.js 179
3 Участник:Absconditus/rfsd.js 173
4 Участник:Absconditus/rfd.js 142
5 Участник:Jack_who_built_the_house/convenientDiscussions.js 133
6 Участник:Lockal/strings-ru.js 111
7 Участник:X-romix/tablifikator.js 111
8 Участник:Js/dabfixer.js 110
9 Участник:X-romix/summary_show_overload.js 102
10 Участник:Alex_Smotrov/histcomb.js 101
11 Участник:Absconditus/reporter.js 86
12 Участник:X-romix/lowercase.js 84
13 Участник:Lvova/wikilove.js 80
14 Участник:X-romix/refconv.js 80
15 Участник:Alex_Smotrov/qpreview.js 76
16 Участник:Dhārmikatva/hate.js 74
17 Участник:X-romix/check_tags.js 74
18 Участник:Js/editsuggest.js 73
19 Участник:OneLittleMouse/warnings.js 64
20 Участник:OneLittleMouse/RQButton.js 62
21 Участник:Js/rcUnreviewedRows.js 61
22 Участник:VasilievVV/oneclickkeep.js 58
23 Участник:Alex_Smotrov/urldecoder.js 56
24 Участник:DonRumata/ai2.js 53
25 Участник:X-romix/wordwikify.js 52
26 Участник:Absconditus/is.js 50
27 Участник:X-romix/wiki_google.js 49
28 Участник:VasilievVV/links.js 48
29 Участник:X-romix/time_small.js 48
30 Участник:X-romix/user_bold.js 45
31 Участник:Alex_Smotrov/jump2text.js 42
32 Участник:Alex_Smotrov/qsig.js 42
33 Участник:X-romix/check_sign.js 42
34 Участник:Dima_st_bk/otkat.js 40
35 Участник:X-romix/compare2texts.js 38
36 Участник:Александр_Дмитриев/comments_in_local_time_ru.js 37
37 Участник:Ole_Førsten/rollback.js 36
38 Участник:Krassotkin/itogo.js 35
39 Участник:Мастер_теней/wikificator+.js 35
40 Участник:Absconditus/afi.js 33
41 Участник:Кикан/highlightLastMessages.js 33
42 Участник:Jack_who_built_the_house/alignTemplateParameters.js 32
43 Участник:X-romix/translit.js 31
44 Участник:Facenapalm/purge.js 29
45 Участник:IGW/Ya2W_geo.js 29
46 Участник:VasilievVV/rfd-closed-highlighter.js 27
47
Участник:Jack_who_built_the_house/copyWikilinks.js
26
48 Участник:Jack_who_built_the_house/findAddition.js 26
49 Участник:Alex_Smotrov/searchlist.js 25
50 Участник:Ignatus/patlinkshl.js 25
51 Участник:T_kns/shortdiffurl.js 25
52 Участник:Lockal/recent2.js 24
53 Участник:X-romix/check_descr.js 24
54 Участник:Js/rqedit.js 23
55 Участник:Ignatus/search_invertkb.js 22
56 Участник:KPu3uC_B_Poccuu/rqedit.js 22
57 Участник:Morpheios_Melas/articlecount.js 22
58 Участник:GreatMusicLover/prosesize.js 21
59 Участник:Js/whois.js 21
60 Участник:Ignatus/wikilinker.js 20
61 Участник:Track13/archiveurl.js 19
62 Участник:Александр_Сигачёв/wikilinker.js 19
63 Участник:Claymore/goodarticles.js 18
64 Участник:Iniquity/cd-formatButtons.js 17
65 Участник:Flrn/editsection.js 16
66 Участник:Js/summary.js 16
67 Участник:Absconditus/kpm.js 15
68 Участник:Alex_Smotrov/adm/delreason.js 15
69 Участник:Jack_who_built_the_house/summaryBytesLeft.js 15
70 Участник:D.bratchuk/MediaWiki:Gadget-Statistics.js 14
71 Участник:Dima_st_bk/Userrights.js 14
72 Участник:Ignatus/discussion.js 14
73 Участник:Ignatus/showanchors.js 14
74 Участник:Iniquity/cd-charinsertButtons.js 14
75 Участник:Saint_Johann/unformat.js 14
76 Участник:Vort/highlight.js 14
77 Участник:Ле_Лой/fountain.js 14
78 Участник:Alex_Smotrov/misc/charcounter.js 13
79 Участник:Мастер_теней/Помощник_патруля.js 13
80 Участник:Absconditus/cps.js 12
81 Участник:DrSauron/catwatch.js 12
82 Участник:IKhitron/blocknot.js 12
83 Участник:Krassotkin/incubatorExpert.js 12
84 Участник:Neolexx/contributors.js 12
85 Участник:Дима74/eficator.js 12
86 Участник:Js/patroller.js 11
87 Участник:TenBaseT/spi-button.js 11
88 Участник:Alex_Great/OTRS.js 10
89 Участник:Js/rcExtraData.js 10
90 Участник:Saint_Johann/topscroll.js 10
91 Участник:Valdis72/RQButton.js 10
92 Участник:Дима74/yoficator.js 10
93 Участник:Abiyoyo/ShowStatus.js 9
94 Участник:BattlePeasant/dclink.js
9
95 Участник:DonRumata/lowercase.js 9
96 Участник:Js/NewPagePatrol.js 9
97 Участник:Mahairod/morphlink.js 9
98 Участник:Vasiliy_Faronov/refbuttons.js 9
99 Участник:X-romix/refconv2.js 9
100 Участник:НоуФрост/featuredlists.js 9
101 Участник:Alex_Smotrov/bookmarks.js 8
102 Участник:Jack_who_built_the_house/accessibleTooltips.js 8
103 Участник:Jack_who_built_the_house/copy_headings.js 8
104 Участник:Js/linkcomplete.js 8
105 Участник:Ry0ukai/mark.js 8
106 Участник:Saint_Johann/square.js 8
107 Участник:Кикан/userTabs.js 8
108 Участник:Нирваньчик/Скрипты/references.js 8
109 Участник:Absconditus/refconv.js 7
110 Участник:BattlePeasant/cattreetable.js 7
111 Участник:Iniquity/exit.js 7
112 Участник:Krassotkin/incubatorBeginner.js 7
113 Участник:Нирваньчик/rq.js 7
114 Участник:Alex_Smotrov/logpage.js 6
115 Участник:IKhitron/purge.js 6
116 Участник:Js/Gadget-bkl-check.js 6
117 Участник:Lupin/popups.js 6
118 Участник:Saint_Johann/catscan.js 6
119 Участник:Serpent_Vlad/featuredarticles.js 6
120 Участник:ShinePhantom/history.js 6
121 Участник:X-romix/hide_page_elements.js 6
122 Участник:X-romix/highlight1c.js 6
123 Участник:Alex_Smotrov/watchlist.js 5
124 Участник:Arkanosis/iKiwi.js 5
125 Участник:D.bratchuk/wiki-rules-buttons-load-all.js 5
126 Участник:D.bratchuk/wiki-rules-buttons.js 5
127 Участник:Dhārmikatva/mark.js 5
128 Участник:Ferrer-ru/revert.js 5
129 Участник:Gamliel_Fishkin/purgetab.js 5
130 Участник:Iniquity/ProveIt.js 5
131 Участник:Jack_who_built_the_house/proceedToArchive.js 5
132 Участник:Mendel/orfo.js 5
133 Участник:Putnik/typosToJs.js 5
134 Участник:T_kns/imagebox.js 5
135 Участник:Absconditus/cpsjs 4
136 Участник:Absconditus/revertall.js 4
137 Участник:Alex_Smotrov/qactions.js 4
138 Участник:D.bratchuk/wiki-template-buttons.js 4
139 Участник:DerLetzteRegenbogen/db-discussion.js 4
140 Участник:DerLetzteRegenbogen/warnings.js 4
141 Участник:Dmitry89/incubator.js 4
142 Участник:DonRumata/tablifikator.js 4
143 Участник:Facenapalm/pathelper.js 4
144 Участник:Fauust/prepend.js 4
145 Участник:Js/checklinks.js 4
146 Участник:Js/instable.js 4
147 Участник:Kakaru/aiv2.js 4
148 Участник:Obersachse/translit.js 4
149 Участник:Ry0ukai/hate.js 4
150 Участник:ShinePhantom/highlightLastMessages.js 4
151 Участник:T_kns/tinyhash.js 4
152 Участник:~obsidian/stats.grok.se.js 4
153 Участник:Ле_Лой/rfaa_highlighter.js 4
154 Участник:AVB/highlightredirects.js 3
155 Участник:Aleksandrit/portletLinks.js 3
156 Участник:Andreyiv/dabfixer.js 3
157 Участник:Anonim.one/rfd.js 3
158
Участник:Anonim.one/rfsd.js
3
159 Участник:Ariely/Bilingual.js 3
160 Участник:Ariely/rollback.js 3
161 Участник:Boom1x/autostubs.js 3
162 Участник:D.bratchuk/spi-button.js 3
163 Участник:Dimetr/bots.js 3
164 Участник:Facenapalm/highlimits.js 3
165 Участник:Iluvatar/signCloser.js 3
166 Участник:Iniquity/Gadget-wikilinker.js 3
167 Участник:Jack_who_built_the_house/discussion_indentation.js 3
168 Участник:Kalan/sslswitch.js 3
169 Участник:Ll0l00l/gadget-ranking.js 3
170 Участник:Lockal/prepend.js 3
171 Участник:Ole_Førsten/qwerty.js 3
172 Участник:Peni/wikifyyears.js 3
173 Участник:Saint_Johann/withoutiw.js 3
174 Участник:Wikisaurus/infoboxDocLink.js 3
175 Участник:Землеройкин/kbu.js 3
176 Участник:Йо_Асакура/bots.js 3
177 Участник:Нирваньчик/rq-edit.js 3
178 Участник:Absconditus/length.js 2
179 Участник:Absconditus/messagenames.js 2
180 Участник:Advisors/Geotemplates.js 2
181 Участник:Advisors/Island.js 2
182 Участник:Alex_Great/discussion.js 2
183 Участник:Ariely/status.js 2
184 Участник:AzaToth/twinkle.js 2
185 Участник:Cacycle/wikEdDiff.js 2
186 Участник:Claymore/copyvio.js 2
187 Участник:Dima_st_bk/geo.js 2
188 Участник:Dima_st_bk/oneclickkeep.js 2
189 Участник:Dima_st_bk/zka.js 2
190 Участник:Dmitry89/cache.js 2
191 Участник:Dmitry89/test.js 2
192 Участник:DonRumata/acute.js 2
193 Участник:Ebraminio/ArticleTranslator.js 2
194 Участник:Fameowner/RQButton.js 2
195 Участник:Fauust/edit_counter.js 2
196 Участник:GreatMusicLover/DiffTime.js 2
197 Участник:GreatMusicLover/Gadget-refToolbar.js 2
198 Участник:Grenadine/yat.js 2
199 Участник:Higimo/nullEdit.js 2
200 Участник:Ignatus/addleft.js 2
201 Участник:Ignatus/shiftrefs.js 2
202 Участник:Ignatus/spamprev.js 2
203 Участник:Iluvatar/GoogleImage.js 2
204 Участник:Iluvatar/Script1.js 2
205 Участник:Iluvatar/Script2.js 2
206 Участник:Iniquity/related-js-css-links.js 2
207 Участник:Jack_who_built_the_house/findAddition 2
208 Участник:Jack_who_built_the_house/referenceTooltips.js 2
209 Участник:JenVan/patflag.js 2
210 Участник:Js/autodel.js 2
211 Участник:Js/diffs.js 2
212 Участник:Js/editsuggest 2
213 Участник:Js/linkcomplete 2
214 Участник:Js/revertTo.js 2
215 Участник:Js/selection.js 2
216 Участник:Js/wikif2007.js 2
217 Участник:Js/Скрыть_сайдбар 2
218 Участник:Kaganer/Gadget-Dwim.js 2
219 Участник:Kalan/delreason.js 2
220 Участник:Kalan/delreason.js/common 2
221 Участник:Kalan/delreason.js/dbtemplates 2
222 Участник:Lazyhawk/dabfixer.js 2
223 Участник:MBH/links.js 2
224 Участник:MaksimPinigin/usergroup.js 2
225 Участник:Mr.Z-man/refbuttons.js 2
226 Участник:NatigKrolik/redirect.js 2
227 Участник:NatigKrolik/ref_1.js 2
228 Участник:NatigKrolik/uploader.js 2
229 Участник:NatigKrolik/Описание_изменений.js 2
230 Участник:Nitobus/div.GoogleMap.js 2
231 Участник:Obersachse/categories.js 2
232 Участник:Pediapress/collection.js 2
233 Участник:Ry0ukai/image.js 2
234 Участник:Ry0ukai/like.js 2
235 Участник:Saint_Johann/iw-tools.js 2
236 Участник:Saint_Johann/minilink.js 2
237 Участник:Saint_Johann/tweetaf.js 2
238 Участник:Serhio_Magpie/hlist.js 2
239 Участник:Serhio_Magpie/infoboxConverter.js 2
240 Участник:ShinePhantom/instable.js 2
241 Участник:Stjn/unformat.js 2
242 Участник:Stjn/wikiEditorShortcuts.js 2
243 Участник:T_kns/replacelogo.js 2
244 Участник:Valodzka/iProject.js 2
245 Участник:Vcohen/Interact.js 2
246 Участник:Vlsergey/simpleku.js 2
247 Участник:WikiUserFS/obscene.js 2
248 Участник:WikiUserFS/ownreporter.js 2
249 Участник:WikiUserFS/rfsd.js 2
250 Участник:WikiUserFS/username.js 2
251 Участник:ØM/quotes.js 2
252 Участник:Александр_Дмитриев/comments_in_local_time_ru_test.js 2
253 Участник:Есстествоиспытатель/itogo.js 2
254 Участник:Камень/hotkot.js 2
255 Участник:Кто-то/script.js 2
256 Участник:Нирваньчик/wikilove.js 2
257 Участник:Нирваньчик/Скрипты/emotetoolbar.js 2
258 Участник:4epenOK/QRcode.js 1
259 Участник:APTEM/res-buttons.js 1
260 Участник:APTEM/speedydeletion.js 1
261 Участник:AS/EditTools.js 1
262 Участник:AS/EditToolsNext.js 1
263 Участник:AS/etSearchReplace.js 1
264 Участник:ASM/quickedit.js 1
265 Участник:Ais523/highlightmyname2.js 1
266 Участник:Ais523/watchlistnotifier.js 1
267 Участник:AjaxDeleteExtraButtons.js 1
268 Участник:Akim_Dubrow/RQButton.js 1
269 Участник:Akim_Dubrow/spi.js 1
270 Участник:Aleksandrit/pages.js 1
271 Участник:Alex_Smotrov/misc/savetimer.js 1
272 Участник:Alex_Smotrov/qkeys.js 1
273 Участник:Alex_Smotrov/undocomment.js 1
274 Участник:Alexei_Kopylov/черновик/strings-ru.js 1
275 Участник:Anomie/ajaxpreview.js 1
276 Участник:Anonim.one/is.js 1
277 Участник:Anonim.one/rfds.js 1
278 Участник:Apoc2400/refToolbarPlus.js 1
279 Участник:Apple-Coffee_Well/Gadget-popups.js 1
280 Участник:Apple-Coffee_Well/itogo.js 1
281 Участник:Arbnos/desl.js 1
282 Участник:Arbnos/reload_cache.js 1
283 Участник:Arbnos/Важные_статьи.js 1
284 Участник:Ariely/addEditAndRevertLinks.js 1
285 Участник:Askarmuk/vector.js 1
286 Участник:Base/highlightLocalImgs.js 1
287 Участник:Borodun/Gadget-LegacyToolbar2006.js 1
288 Участник:Borodun/Gadget-charinsert-core.js 1
289 Участник:Borodun/qwerty.js 1
290 Участник:Boti/partloader.js 1
291 Участник:Carn/toolbar.js 1
292 Участник:Cheburator-all/check_sign.js 1
293 Участник:Cinemantique/RQButton.js 1
294 Участник:Claymore/incubator.js 1
295 Участник:Csewiki/monobook.js 1
296 Участник:D.bratchuk/wiki-rules-select.js 1
297 Участник:Deerstop/NewPagePatrol.js 1
298 Участник:Deerstop/forcesummary.js 1
299 Участник:Deevrod/mark_fa.js 1
300 Участник:Denisbaltin/qsave.js 1
301 Участник:DerLetztRegenbogen/db-discussion.js 1
302 Участник:DerLetzteRegenbogen/res-buttons.js 1
303 Участник:DerLetzteRegenbogen/rq-template.js 1
304 Участник:DerLetzteRegenbogen/speedydeletion.js 1
305 Участник:Dhārmikatva/hate_temp.js 1
306 Участник:Dhārmikatva/ref.js 1
307 Участник:Dimetr/Код.js 1
308 Участник:DonRumata/Gadget-ajaxQuickDelete.js 1
309 Участник:DonRumata/Gadget-urldecoder.js 1
310 Участник:DonRumata/Interwiki-links.js 1
311 Участник:Dr_pda/prosesize.js 1
312 Участник:Dstary/lupin-chernenko-antivandal-script.js 1
313 Участник:Dycedarg/easyprod.js 1
314 Участник:EeOneGuy-1/quick.js 1
315 Участник:EpochFail/HAPPI.js 1
316 Участник:EugeneZ/js/live-edit-counter.js 1
317 Участник:Evs/rfsd.js 1
318 Участник:Facenapalm/cd-markdown.js 1
319 Участник:Fameowner/Geotemplates.js 1
320 Участник:Fameowner/Links.js 1
321 Участник:Fameowner/Specialchars.js 1
322 Участник:Fameowner/TlButton.js 1
323 Участник:Fastboy/tablifikator.js 1
324 Участник:Fauust/monobook.js 1
325 Участник:Frieden/replace.js 1
326 Участник:G0rn/RefToolbarLocal.js 1
327 Участник:G0rn/refToolbar_2.0.js 1
328 Участник:Gaeser/Prepend.js 1
329 Участник:Genesiser/rollback2.js 1
330 Участник:Ghuron/wd-export.js 1
331 Участник:Good_Will_Hunting/remove.js 1
332 Участник:GreatMusicLover/links.js 1
333 Участник:GreatMusicLover/refTooltip.js 1
334 Участник:GregU/dashes.js 1
335 Участник:GregU/familytree.js 1
336 Участник:Gryllida/js/feedbackstuff.js 1
337 Участник:Gz260/monobook.js 1
338 Участник:Haffman/ExpandEditTools.js 1
339 Участник:Hayk/phs2.js 1
340 Участник:Hayk/reredirects.js 1
341 Участник:Henrik/js/live-edit-counter.js 1
342 Участник:Hercules63/reporter.js 1
343 Участник:Hercules63/rollbacksum.js 1
344 Участник:Higimo/gaget.js 1
345 Участник:IGW/Ya2W_geo/script.js 1
346 Участник:IGW/highlightredirects.js 1
347 Участник:IGW/wikEd_international_ru.js 1
348 Участник:IKhitron/Gadget-qualityArticles.js 1
349 Участник:INSAR/Patitog.js 1
350 Участник:INSAR/bulgarian.js 1
351 Участник:INSAR/closer.js 1
352 Участник:INS_Pirat/filestomove.js 1
353 Участник:Igel_B_TyMaHe/catsort.js 1
354 Участник:Ignatus/LinkReTarget.js 1
355 Участник:Ignatus/fast2talk.js 1
356 Участник:Ignatus/fast2talk.js‎ 1
357 Участник:Iluvatar/OTRS-Perm.js 1
358 Участник:Iluvatar/Tineye.js 1
359 Участник:Ilya78/hide_page_elements.js 1
360 Участник:Ilya_Voyager/killTheTitle.js 1
361 Участник:Incnis_Mrsi/edithysteria.js 1
362 Участник:Incnis_Mrsi/section_summary.js 1
363 Участник:Incnis_Mrsi/неОбсуждение_участника.js 1
364 Участник:Inctructor/Скрыть_сайдбар.js 1
365 Участник:Infernus/HookList.js 1
366 Участник:JS/rcextradata.js 1
367 Участник:Jack_who_built_the_house/comments_in_local_time_ru.js 1
368 Участник:Jack_who_built_the_house/hide_sidebar.js 1
369 Участник:Jeronas/wd-export.js 1
370 Участник:Js/custom_signature.js 1
371 Участник:Js/editsection.js 1
372 Участник:Js/lastedited.js 1
373 Участник:Js/Скрыть_сайдбар.js 1
374 Участник:Js~ruwiki/rcUnreviewedRows.js 1
375 Участник:Kadavr2000/Book.js 1
376 Участник:Kalan/aco.js 1
377 Участник:Kalan/templatecat.js 1
378 Участник:KiD_38/ReferenceTooltips.js 1
379 Участник:Krassotkin/itogo.2010081900.js 1
380 Участник:Krassotkin/playWithToolbar.js 1
381 Участник:Krassotkin/ultraInputBoxes.js 1
382 Участник:Krop-pork/test.js 1
383 Участник:Lampak/MyLanguages.js 1
384 Участник:Lingvist200/test.js 1
385 Участник:Ll0l00l/gadget-bkl-check-tests5.js 1
386 Участник:Ll0l00l/gadget-gif-hider.js 1
387 Участник:Ll0l00l/twoColumns_mod.js 1
388 Участник:Lockal/AddWikify.js 1
389 Участник:Lord_Dimetr/bots.js 1
390 Участник:Lupin/monobook.js 1
391 Участник:Lustiger_seth/unsigned.js 1
392 Участник:MBH/remove.js 1
393 Участник:Magnus_Manske/missing_props.js 1
394 Участник:Mashiah_Davidson/bookmarks.js 1
395 Участник:MaxBioHazard/Gadget-dropdown-menus.js 1
396 Участник:Maximaximax/monobook.js 1
397 Участник:Maykel/itogo.js 1
398 Участник:MediaWiki:Gadget-preview.js 1
399 Участник:MindfulOfTheGoal/Gadget-markrollbackers.js 1
400 Участник:NW55/JS/bar1.js 1
401 Участник:NW55/lowercase.js 1
402 Участник:NW55/translit.js 1
403 Участник:NatigKrolik/Reflinks.js 1
404 Участник:NatigKrolik/checksitelinks.js 1
405 Участник:NatigKrolik/mediawiki.util.js 1
406 Участник:NatigKrolik/popups_1.js 1
407 Участник:NatigKrolik/skin.js 1
408 Участник:NatigKrolik/wikibits.js 1
409 Участник:Neolexx/AM002.js 1
410 Участник:Neolexx/ExternalMedia.js 1
411 Участник:Neolexx/iap.js 1
412 Участник:Neolexx/showTrueNick.js 1
413 Участник:Nibogd/strings-ru.js 1
414 Участник:Nickel_nitride/custom_signature.js 1
415 Участник:Nickel_nitride/remove.js 1
416 Участник:Nitobus/NavFrame2.js 1
417 Участник:Obersachse/markadmins.js

Википедия:Локальный скрипт — Википедия

Материал из Википедии — свободной энциклопедии

Локальный скрипт — это JavaScript или CSS файл на компьютере пользователя, выполняющийся при посещении определённых вебсайтов. Реализации такого механизма в различных браузерах рассмотрены в статье о Greasemonkey  (англ.).

Достоинства и недостатки[править код]

По сравнению со предоставляемыми MediaWiki-проектами специальным .js и .css подстраницами, локальные скрипты «привязаны» к браузеру пользователя, а не к учётной записи, поэтому не требуют представления системе, а при соотвествующей настройке могут выполняться сразу во многих проектах. Обратной стороной является необходимость пользоваться конкретным браузером, копировать свои скрипты при переходе на другой компьютер, и обновлять скрипты вручную.

В зависимости от используемого браузера перенос работающего в вики .js кода в локальный скрипт может требовать некоторых модификаций.

Настройка браузера[править код]

В браузере Opera возможность исполнения локальных скриптов встроена прямо в браузер, см. Utilizing User Javascript  (англ.).

Для настройки нажмите F12 на произвольной странице Википедии, выберите последний пункт меню «edit site preferences», и в диалоговом окне выберите вкладку «scripting». Затем в текстовое поле «user javascript files» вставьте полный путь к специально созданной вами папке, например c:\wikipedia\js

Теперь Opera будет автоматически подхватывать все .js файлы из этой папки для выполнения на любых страницах домена ru.wikipedia.org.

Свой CSS файл можно выбрать в том же диалоговом окне на вкладке «display».

Для выполнения своих скриптов сразу во всех разделах Википедии следует выполнить такие же шаги, но предварительно перейдя на сайт wikipedia.org.

Перенос скриптов[править код]

На вики-странице скрипта нажмите вкладку «просмотр» и скопируйте код в локальный файл в выбранной вами выше папке, с полным названием файла обязательно заканчивающимся на .user.js

При этом условии скрипт будет вызываться как Greasemonkey-скрипт  (англ.), и многие персональные вики-скрипты не потребуют никаких дополнительных изменений кода.

https[править код]

Для выполнения локальных скриптов через защищённый интерфейс secure.wikimedia.org следует:

  • разрешить браузеру выполнять скрипты в https  (англ.)
  • указать папку со скриптами (см. выше), находясь на любой странице secure.wikimedia.org
  • каждый раз при первом заходе на secure.wikimedia.org отвечать «yes» на соответствующее предупреждение Opera.

В случае возникновения проблем сперва создайте локальный скрипт просто со строкой alert('test') для проверки правильности настройки вашего браузера. В браузерах FireFox и Opera загляните в Error console для нахождения возможных JavaScript-ошибок. Затем с этой информацией обратитесь на страницу обсуждения этой справки.

Язык сценариев: что это такое

Сценарий или скрипт – это программа, автоматизирующая задачу. Без скрипта пользователю бы пришлось ее выполнять вручную с помощью интерфейса программы.

Скрипты используют для раскрутки сайта в следующих целях:

  • для расширения функционала ресурса;
  • для автоматического обмена ссылками;
  • для выполнения работ по поисковой оптимизации;
  • для сбора статистики, анализа позиций сайта и т.д.

Преимущества

Для создания пользовательских расширений язык сценариев удобен в ряде случаев:

  • безопасность. Скриптовый язык обеспечивает программируемость без риска дестабилизации системы. Скрипты не компилируются, а интерпретируются. Поэтому неправильно написанная программа выведет диагностическое сообщение, не вызывая падение системы;
  • наглядность. Язык сценариев используется, если необходим выразительный код. Концепция программирования в скриптовом языке может кардинально отличаться от основной программы;
  • простота. Код имеет собственный набор программ, поэтому одна строка может выполнять те же операции, что и десятки строк на обычном языке. Поэтому для написания кодов не требуется программист высокой квалификации;
  • кроссбраузерность. Скриптовые языки программирования ориентированы на кроссбраузерность. Например, JavaScript может исполняться браузерами практически под всеми современными операционными системами.

Классификация

В зависимости от быстродействия различают языки сценариев предварительно компилируемые (например, широко используемый для создания и продвижения сайтов Perl) и динамического разбора (command.com, sh). Первые транслируют программу в байт-код, который затем исполняют. Языки динамического разбора считывают инструкции из файла программы минимально необходимыми блоками, которые исполняют, не читая, дальнейший код.

Выделяют следующие типы скриптовых языков:

  • универсальные: Forth, AngelScript, Perl, PHP, Python, Tcl (Tool command language), Squirrel, REBOL, Ruby, AutoIt, Lua;
  • встроенные в прикладные программы: VBA, UnrealScript, AutoLISP, Emacs Lisp, Game Maker Language, MQL4 script, ERM;
  • командные оболочки: sh, AppleScript, bash, csh, ksh, JCL, cmd.exe, command.com, REXX, Visual Basic Script;
  • встраиваемые: Guile, Script.NET, ActionScript, Lingo (используется в редакторе Director), Sleep, браузерные Jscript и JavaScript.

Некоторые приложения имеют встроенную возможность расширения сценариями, написанными на любом универсальном скриптовом языке, например, автоматический планировщик задач или библиотека SWIG.

К скриптам также относят многие консольные утилиты, которые поддерживают выполнение записанной в файл последовательности команд.

Теги термина

Голосов 6, рейтинг 4.33

Bash — Википедия

Bash (от англ. Bourne again shell, каламбур «Born again» shell — «возрождённый» shell) — усовершенствованная и модернизированная вариация командной оболочки Bourne shell. Одна из наиболее популярных современных разновидностей командной оболочки UNIX. Особенно популярна в среде Linux, где она часто используется в качестве предустановленной командной оболочки.

Представляет собой командный процессор, работающий, как правило, в интерактивном режиме в текстовом окне. Bash также может читать команды из файла, который называется скриптом (или сценарием). Как и все Unix-оболочки, он поддерживает автодополнение имён файлов и каталогов, подстановку вывода результата команд, переменные, контроль над порядком выполнения, операторы ветвления и цикла. Ключевые слова, синтаксис и другие основные особенности языка были заимствованы из sh. Другие функции, например, история, были скопированы из csh и ksh. Bash в основном соответствует стандарту POSIX, но с рядом расширений[2].

Название «bash» является акронимом от англ. Bourne-again-shell («ещё-одна-командная-оболочка-Борна») и представляет собой игру слов: Bourne-shell — одна из популярных разновидностей командной оболочки для UNIX (sh), автором которой является Стивен Борн (1978), усовершенствована в 1987 году Брайаном Фоксом. Фамилия Bourne (Борн) перекликается с английским словом born, означающим «родившийся», отсюда: рождённая-вновь-командная оболочка.

В сентябре 2014 года в bash была обнаружена широко эксплуатируемая уязвимость Bashdoor.

Подавляющее большинство важных скриптов командного процессора Bourne могут выполняться без изменения в bash, за исключением тех, которые ссылаются на специальные переменные Bourne или используют встроенные команды Bourne. Синтаксис команд Bash включает идеи, заимствованные у Korn shell (ksh) и C shell (csh), такие как редактирование командной строки, история команд, стек каталогов, переменные $RANDOM и $PPID, синтаксис замены команды $(…). Когда Bash используется как интерактивный командный процессор, он поддерживает автозавершение имён программ, файлов, переменных и т. п. с помощью клавиши Tab ↹.

Интерпретатор bash имеет множество встроенных команд, часть из которых имеют аналогичные исполняемые файлы в операционной системе. Однако следует обратить внимание, что чаще всего для встроенных команд отсутствуют man-страницы, а при попытке просмотра справки по встроенной команде на самом деле будет выдаваться справка по исполняемому файлу. Исполняемый файл и встроенная команда могут отличаться параметрами. Информация по встроенным командам расписана в справочной странице bash:

man bash

Ввод-вывод
echo выводит выражение или содержимое переменной (stdout), но имеет ограничения в использовании[3]
printf команда форматированного вывода, расширенный вариант команды echo
read «читает» значение переменной со стандартного ввода (stdin), в интерактивном режиме это клавиатура
Файловая система
cd изменяет текущий каталог
pwd выводит название текущего рабочего каталога (от англ. print working directory)
pushd изменяет текущий каталог с возможностью возврата в обратном порядке
popd возвращает текущий каталог после pushd
dirs выводит или очищает содержимое стека каталогов, сохранённых через pushd
Действия над переменными
let производит арифметические операции над переменными
eval транслирует список аргументов из списка в команды
set изменяет значения внутренних переменных скрипта
unset удаляет переменную
export экспортирует переменную, делая её доступной дочерним процессам
declare, typeset задают и/или накладывают ограничения на переменные
getopts используется для разбора аргументов, передаваемых скрипту из командной строки
Управление сценарием
source, . (точка) запуск указанного сценария
exit безусловное завершение работы сценария
exec заменяет текущий процесс новым, запускаемым командой exec
shopt позволяет изменять ключи (опции) оболочки на лету
Команды
true возвращает код завершения ноль (успешное завершение)
false возвращает код завершения, который свидетельствует о неудаче
type prog выводит полный путь к prog
hash prog запоминает путь к prog
help COMMAND выводит краткую справку по использованию внутренней команды COMMAND
Управление запущенными в командной оболочке задачами
jobs показывает список запущенных в командной оболочке задач, либо информацию о конкретной задаче по её номеру
fg переключает поток ввода на текущую задачу (или на определённую задачу, если указан её номер) и продолжает её исполнение
bg продолжает исполнение текущей приостановленной задачи (или определённых задач, если указаны их номера) в фоновом режиме
wait ожидает завершения указанных задач

В простейшем случае, скрипт — простой список команд, записанный в файл. Командный процессор должен знать, что он должен этот файл обработать, а не просто прочесть его содержимое. Для этого служит специальная конструкция, называемая shebang: #!. Символ # задаёт комментарий, но в данном случае shebang означает, что после этого спецсимвола находится путь к интерпретатору для исполнения сценария.

Синтаксис[править | править код]

Синтаксис команд bash — это расширенный синтаксис команд Bourne shell. Окончательная спецификация синтаксиса команд bash есть в Bash Reference Manual, распространяемом проектом GNU.[4]

«Hello world»[править | править код]
#!/usr/bin/env bash
echo 'Hello World!'

Этот скрипт содержит только две строки. Первая строка сообщает системе о том, какая программа используется для запуска файла. Вторая строка — это единственное действие, которое выполняется этим скриптом, он собственно печатает «Hello world!» в терминале.

Запуск скрипта[править | править код]

Для того, чтобы скрипт стал исполняемым, могут быть использованы следующие команды:

chmod +rx scriptname # выдача прав на чтение/исполнение любому пользователю
chmod u+rx scriptname # выдача прав на чтение/исполнение только "владельцу" скрипта

Из соображений безопасности путь к текущему каталогу . не включён в переменную окружения $PATH. Поэтому для запуска скрипта необходимо явно указывать путь к текущему каталогу, в котором находится скрипт:

Кроме того, передать такой файл на исполнение интерпретатору Bash можно и явно, используя команду bash:

В этом случае не требуется ни установка прав доступа, ни использование последовательности #! в коде.

Перенаправление ввода-вывода[править | править код]

В bash есть встроенные файловые дескрипторы: 0 (stdin), 1 (stdout), 2 (stderr).

  • stdin — стандартный ввод — то, что набирает пользователь в консоли;
  • stdout — стандартный вывод программы;
  • stderr — стандартный вывод ошибок.

Для операций с этими и пользовательскими дескрипторами существуют специальные символы: > (перенаправление вывода), < (перенаправление ввода). Символы &, - могут предварять номер дескриптора; например, 2>&1 — перенаправление дескриптора 2 (stderr) в дескриптор 1 (stdout).

0<filename или <filename Перенаправление ввода из файла filename
1>filename или >filename Перенаправление вывода в файл «filename». Если отключена опция noclobber, то файл перезаписывается поступающими данными
1>|filename или >|filename Перенаправление вывода в файл «filename», файл перезаписывается поступающими данными
1>>filename или >>filename Перенаправление вывода в файл «filename», данные добавляются в конец файла. При отсутствии файла он создаётся
2>filename Перенаправление стандартного вывода ошибок в файл «filename»
2>>filename Перенаправление стандартного вывода ошибок в файл «filename», данные добавляются в конец файла. При отсутствии файла он создаётся
&>filename Перенаправление вывода и ошибок в файл «filename»
2>&1 Перенаправление вывода ошибок на стандартный вывод

Bash имеет индивидуальный синтаксис перенаправления, который не поддерживается в Bourne shell. Пример одновременного перенаправления стандартного вывода и стандартных ошибок:

Это проще набрать, чем эквивалентную команду в синтаксисе Bourne shell

Перенаправление «из кода скрипта»[править | править код]

Поддерживается heredoc-синтаксис:

  • С интерпретацией переменных и конструкций языка внутри блока:
$a='многострочный'
command <<MYDOC123
$a
текст
$(<$HOME/my_file.txt)
MYDOC123
  • Без интерпретации переменных:
command <<'PERLCODE'
my $first='Hello';
my $second='world';
say join(', ',$first,$second),'!';
PERLCODE
  • С удалением начальных отступов (поддерживаются только отступы табуляцией):
command <<-'TABSTRIP'
    for ((i=0; i<10; i++))
    do
        echo "$i"
    done
TABSTRIP

Начиная с версии 2.05b, bash может перенаправлять стандартный ввод из строки, используя следующий синтаксис «here strings»:

command <<< "string to be read as standard input"

Если строка содержит пробелы, её следует заключить в кавычки или апострофы, либо экранировать пробелы обратной косой чертой.

Будьте внимательны: вводимая с использованием here strings строка содержит неявную последовательность завершения строки: либо 1 дополнительный байт line feed, либо 2 дополнительных байта: carriage return и line feed.

cat -<<<'123' | wc -c
# Результат: 4
cat <(echo -n '123') | wc -c
# Результат: 3
wc -c <<<'123'
# Результат: 4
echo -n 123 | wc -c
# Результат: 3

Начиная с версии 4.1[5] стало возможным указывать в одной строке терминирующую последовательность символов и, сразу за ней, — скобку. Это может быть полезно для присвоения переменной содержимого here-doc:

var=$( cat -<<'TERMSEQ'
Февраль. Достать чернил и плакать!
Писать о феврале навзрыд,
Пока грохочущая слякоть
Весною чёрною горит.
TERMSEQ)

При этом BASH будет сгенерировано предупреждающее сообщение.

Перенаправление для процесса в целом[править | править код]

Пример (перенаправление стандартного вывода в файл, запись данных, закрытие файла, сброс stdout):

# make Filedescriptor(FD) 6 a copy of stdout (FD 1)
exec 6>&1
# open file "test.data" for writing
exec 1>test.data
# produce some content
echo "data:data:data"
# close file "test.data"
exec 1>&-
# make stdout a copy of FD 6 (reset stdout)
exec 1>&6
# close FD6
exec 6>&-

Открытие и закрытие файлов:

# open file test.data for reading
exec 6<test.data
# read until end of file
while read -u 6 dta
do
  echo "$dta" 
done
# close file test.data
exec 6<&-

Подстановка вывода команд[править | править код]

Захват вывода внешних команд:

# выполнить 'date' и поместить результат в VAR
VAR="$(date)"
echo "$VAR" #выведет дату на момент вызова предыдущей строки

При этом не поддерживаются строки с нуль-символом, заключительные переводы строк пропадают, в отличие от каналов и прочего файлового ввода-вывода.

Условный оператор[править | править код]

#!/usr/bin/env bash
T1='foo'
T2='bar'
if [[ $T1 == "$T2" ]] 
then
  echo 'условие выполняется'
else
  echo 'условие не выполняется'
fi

Обратите внимание, что кавычки вокруг левой части необязательны.[6]

Циклы[править | править код]

#!/usr/bin/env bash
for i in "Номер "{1..10}
do
  echo "$i"
done
1 #!/usr/bin/env bash
2 COUNTER=0
3 while [[ $COUNTER -lt 10 ]] # До тех пор, пока условие ИСТИННО (возвращает 0) выполнять тело цикла
4 do
5   echo The counter is $COUNTER
6   let COUNTER=COUNTER+1
7 done
#!/usr/bin/env bash
i=0
until [[$i -eq 10]] # До тех пор, пока условие ЛОЖНО (возвращает не 0) выполнять тело цикла
do
  echo "$i"
  i=$(($i+1))
done
#!/usr/bin/env bash
# внутри двойных круглых скобок переменные можно писать в Си-стиле (без $ и разделяя пробелом операторы и операнды)
for (( i = 0; i < 10; i++ ))
do
	echo -n "$i; "
done

Массивы[править | править код]

В bash реализованы только одномерные массивы. Индексами могут быть как целочисленные значения («обычный» массив), так и строки (ассоциативный массив, или «хеш»).

Несмотря на унификацию синтаксиса для работы с обычными и ассоциативными массивами, первые не являются разновидностью вторых ни с точки зрения конечного пользователя, ни с точки зрения внутренней логики самого интерпретатора.

Как естественное следствие поддержки «ассоциативных» ключей, в bash существует крайне ограниченная возможность эмуляции многомерных массивов.

Общие операции[править | править код]

Получить строку, состоящую из всех[7] элементов массива, разделённых пробелом.

Получить строку со всеми[7] индексами или ключами массива, независимо от того, численные они или текстовые:

Осуществить массовую замену первого вхождения подстроки «MAY» на «MARCH» во всех[7] элементах массива и вернуть строку, составленную из результирующих элементов массива, разделённых пробелом:

values="${arr[@]/MAY/MARCH}"

То же самое, но в каждом[7] элементе массива будут заменены все вхождения подстроки «MAY»:

values="${arr[@]//MAY/MARCH}"

До сих пор не все заявленные в документации возможности правильно работают для массивов. Например:

[ -v 'имя_массива' ]

неправильно срабатывает для пустого массива.[8]

Операции с индексированными массивами[править | править код]

Bash имеет поддержку одномерных массивов. Инициализировать элементы массива можно в виде: my_array[xx]. Также можно явно объявить массив в сценарии, с помощью директивы declare:

Обращаться к отдельным элементам массива можно с помощью фигурных скобок: "${my_array[xx]}".

Инициализировать индексированный массив можно двумя способами:

1)

Array=(element1 element2 element3)

2)

temp_array[0]=element1
temp_array[5]=element
temp_array[9]=elementN

Добавление элементов в конец индексированного массива:

declare -a arrAnimals
arrAnimals=(dog elephant horse cow fox koala turtle)
# Выводим содержимое массива:
echo "${arrAnimals[@]}"
# В конец массива arrAnimals добавляем новый элемент: "pig"
arrAnimals+=(pig)
# И снова показываем содержимое массива:
echo "${arrAnimals[@]}"

Получить первый элемент массива:

Как индексированные, так и ассоциативные массивы поддерживают так называемые «срезы»:

# Ещё один способ получить первый элемент массива
echo "${arrAnimals[@]:0:1}"

# Вывести 3 элемента массива, начиная со 2-го:
echo "${arrAnimals[@]:2:3}"

Примечание: в случае с ассоциативными массивами порядок следования значений в общем случае будет случайным (определяется используемой хеш-функцией), поэтому операция среза на ассоциативном массиве хотя и допустима, но имеет крайне ограниченную область практического применения.

В массивах с числовыми индексами допустима «обратная» («негативная») адресация, позволяющая получить доступ к элементам, начиная с конца массива:

# Значение последнего элемента массива
echo "${arrAnimals[-1]}"
# Значение предпоследнего элемента массива
echo "${arrAnimals[-2]}"
# ... и т.д.

С помощью встроенной команды mapfile (синоним: readarray) можно отображать содержимое текстового файла в индексированный массив:

declare -a fileWithLogins
mapfile fileWithLogins </etc/passwd
for ((i=0; i<${#fileWithLogins[@]}; i++))
do
	echo "Line #$i: ${fileWithLogins[$i]}"
done
Операции с ассоциативными массивами[править | править код]

Начиная с версии 4.0 в bash появилась поддержка ассоциативных массивов (так называемых hash-массивов).

Для объявления ассоциативных массивов используется ключ -A встроенной команды declare:

Как и в случае с индексированными массивами, для заполнения ассоциативных массивов могут использоваться два различных синтаксиса:

1)

TheCapitalOf[Georgia]='Tbilisi'
TheCapitalOf[Australia]='Canberra'
TheCapitalOf[Pakistan]='Islamabad'

2)

TheCapitalOf=([Georgia]='Tbilisi' [Australia]='Canberra' [Pakistan]='Islamabad')

С помощью ассоциативных массивов можно имитировать поддержку многомерных массивов:

declare -A a # объявляет ассоциативный массив 'a'
i=1; j=2 # инициализация нескольких индексов
a[$i,$j]=5 # присвоение значения "5" в ячейку "$i,$j" (т.е. "1,2")
echo ${a[$i,$j]} # вывод хранимых значений из "$i,$j"

К сожалению, в текущих версиях bash скопировать содержимое одного ассоциативного массива в другой простым присваиванием невозможно. Данную проблему можно только обойти, для чего существуют два принципиально разных подхода:

1) Эмулировать объявление второго хеша «с нуля» путём копирования объявления первого хеша:

declare -A hsh2
hsh2=(...)

source <(declare -p hsh2 | sed 's/^declare -A hsh2/declare -A hsh3/')

2) Перебрать все[7] элементы хеша-источника и скопировать их в целевой хеш:

declare -A hsh2 hsh3
hsh2=(...)

for k in "${!hsh2[@]}"
do
	hsh3["$k"]="${hsh2["$k"]}"
done
Безопасная работа с массивами[править | править код]

Массивы являются удобным способом передачи динамически генерированных аргументов в функции или команды. При этом каждый элемент массива представляет собой отдельный аргумент.

args=( -l -a / )
ls "${args[@]}" # ls -l -a /
ls ${args[@]} # ls -l -a /
ls ${args[*]} # ls -l -a /

Однако при подобном использовании массивов следует быть осторожным ввиду особенностей раскрытия массивов при использовании в качестве индексов специальных символов @ и *.

Если массив заключён в кавычки и раскрывается с помощью индекса @, то образуется строка из слов, где каждое слово — отдельный элемент массива. Однако если не заключить раскрытие массива в двойные кавычки, то может получиться совсем другой результат: пробелы, входящие в состав элементов массива, становятся разделителями слов.

args=( -l -a '/home/user/Рабочий стол' )
ls "${args[@]}" # просмотр содержимого каталога '/home/user/Рабочий стол'
ls ${args[@]} # ошибка: каталогов '/home/user/Рабочий' и './стол' не существует

Массив с индексом *, заключённый в двойные кавычки, раскрывается в одну строку, соединяя все элементы массива через разделители, хранимые в переменной IFS. Если не указать двойные кавычки, то массив раскрывается аналогично раскрытию при использовании индекса @.

args=( '' usr local bin )
IFS='/' ls "${args[*]}" # просмотр содержимого каталога '/usr/local/bin'
IFS='/' ls ${args[*]} # поочерёдный просмотр содержимого каталогов '.', './usr', './local' и './bin'

При создании массива из содержимого текстовой переменной необходимо учитывать возможное наличие пробелов в тексте. Например, в качестве одного из способов создания массива из строки с перечислением можно рассматривать замену символа-разделителя на пробел. Однако наличие пробелов в разделяемых элементах приведёт к дроблению самих элементов на части.

array=( ${text//,/} ) # неправильно: текст в переменной 'text' мог содержать пробельные символы

IFS=',' array=( $text ) # правильно: раздельтельным символом является запятая.
IFS=',' read -r -a array <<< "$text" # правильно (альтернативный вариант с перенаправлением содержимого переменной 'text' в команду 'read')

К ошибкам может привести создание массива из текста, полученного в качестве вывода команд или из файла, т. к. не только переводы строк, но также и пробелы с символами табуляции по умолчанию будут считаться разделителями[9].

array=( "$(ls)" ) # неправильно: пробелы в названии файлов могут разбить имя файла на два элемента массива

IFS=$'\n' array=( "$(ls)" ) # правильно: разделителем будет только перевод строк
mapfile -t array < <(ls) # правильно: альтернативный вариант через встроенную команду mapfile

Конвейер[править | править код]

Конвейер передаёт вывод предыдущей команды на ввод следующей или на вход командного интерпретатора. Метод часто используется для связывания последовательности команд в единую цепочку. Конвейер обозначается символом |.

Пример (grep работает как фильтр для стандартного вывода):

cat filename | grep pattern

Логические операции[править | править код]

Логическое ИЛИ обозначается как ||. В операциях проверки условий оператор || возвращает 0 (success), если один из операндов имеет значение true (ИСТИНА).

Логическое И обозначается как &&. В операциях проверки условий оператор && возвращает 0 (success) тогда и только тогда, когда оба операнда имеют значение true (ИСТИНА).

Примечание: Возможная путаница в понимании возникает из-за того, что команда true (и успешное завершение любой команды) завершается с кодом возврата 0, success (false, наоборот, не 0), в то время как логическое значение true/false — отлично от нуля/равно нулю.

Примеры:

if false; then echo "successfully"; else echo "unsuccessfully"; fi
unsuccessfully
let "a=(( 1 && 0 && 123))"; echo $?; echo $a
1 # Код завершения команды
0 # Значение переменной "a", результат логической операции
if (( 1 && 0 && 123)); then echo "true"; else echo "false"; fi
false
let "a=(( 1 && 123 && -345 ))"; echo $?; echo $a
0 # Код завершения команды
1 # Значение переменной "a", результат логической операции
if (( 1 && 123 & -345 )); then echo "true"; else echo "false"; fi
true
false && echo "Успешное завершение" || echo "Неуспешное завершение"
Неуспешное завершение

Целочисленная математика[править | править код]

Bash может выполнять целочисленные вычисления внутри процесса, используя команду ((…)) и синтаксис переменной $((…))[10], как показано ниже:

VAR=55 # Устанавливаем переменную VAR, равной 55
((VAR = VAR + 1)) # Добавляем единицу к переменной VAR. Обратите внимание на отсутствие знака '$' 
((VAR+=1)) # Сокращённая форма записи инкремента
((++VAR)) # Другой способ увеличения VAR на единицу. Выполняет префиксный инкремент
((VAR++)) # Другой способ увеличения VAR на единицу. Выполняет постфиксный инкремент
echo $((VAR * 22)) # Умножаем VAR на 22 и передаем результат команде
echo $[VAR * 22] # Устаревший способ сделать то же
((VAR<<3)) # Побитовый сдвиг влево (то же, что VAR*8)
((VAR>>3)) # Побитовый сдвиг вправо (то же, что VAR/8)

Команда ((…)) также может использоваться в условных утверждениях, так как её исходный параметр — это 0 или 1, которые могут интерпретироваться как true или false:

if ((VAR == Y * 3 + X * 2))
then
  echo Yes 
fi
((Z > 23)) && echo Yes

Команда ((…)) поддерживает следующие операторы ставнения: == != > < >= <=.

Bash не поддерживает вычисления внутри процесса с числами с плавающей точкой. Только командные процессоры Unix Korn shell (версия 1993 года) и zsh (начиная с версии 4.0) поддерживают эту возможность.

Список математических операций: +, -, *, /, ** (возведение в степень), % (деление по модулю, остаток от деления), let — позволяет использовать сокращения арифметических команд (сокращая количество используемых переменных; например: a += b эквивалентно a = a + b и т. п.).

Аргументы:

$$ pid текущего shell (самого процесса-сценария)
$! pid последнего процесса в фоновом режиме
$? код возврата последнего процесса (функции или скрипта)
$x где x — номер параметра, переданного скрипту ($1, $2 и т. д., $0 — последний запущенный скрипт)
$# количество аргументов командной строки
$* все[7] аргументы в виде одной строки (слова)
[email protected] то же самое, что и $*, но при этом каждый[7] параметр представлен как отдельная строка (слово)
$- список флагов, переданных сценарию
$_ содержит последний аргумент предыдущей команды

Встроенные переменные:

$BASH путь к исполняемому файлу bash
$BASHPID PID текущего bash * (см. Примечание)
$BASH_VERSINFO[n] массив, состоящий из 6 элементов, содержащий информацию о версии bash
$BASH_VERSION версия Bash, установленного в системе
$DIRSTACK содержимое вершины стека каталогов
$EDITOR заданный по умолчанию редактор
$EUID «эффективный» идентификационный номер пользователя (Effective User ID)
$FUNCNAME имя текущей функции
$GLOBIGNORE перечень шаблонных символов, которые будут проигнорированы при выполнении подстановки имён файлов (globbing)
$GROUPS группы, к которым принадлежит текущий пользователь
$HOME домашний каталог пользователя
$HOSTNAME сетевое имя хоста
$HOSTTYPE тип машины (идентифицирует аппаратную архитектуру)
$IFS разделитель полей во вводимой строке
$LC_COLLATE задаёт порядок сортировки символов, в операциях подстановки имён файлов и в поиске по шаблону
$LC_CTYPE определяет кодировку символов
$LINENO Номер строки исполняемого сценария
$MACHTYPE аппаратная архитектура
$OLDPWD прежний рабочий каталог
$OSTYPE тип операционной системы
$PATH путь поиска (включает в себя каталоги /usr/bin/, /usr/X11R6/bin/, /usr/local/bin и т. д.)
$PIPESTATUS Код возврата канала (конвейера)
$PPID PID (идентификатор) родительского процесса
$PS1 приглашение командной строки
$PS2 вторичное приглашение командной строки, выводится тогда, когда от пользователя ожидается дополнительный ввод. Обычно отображается как «>»
$PS3 третичное приглашение, выводится, когда пользователь должен сделать выбор в операторе select
$PS4 приглашение четвёртого уровня, выводится (в изменённом виде) в начале каждой строки отладочного вывода тогда, когда сценарий вызывается с ключом -x. Обычно отображается как «+», «++» и т. д.
$PWD рабочий (текущий) каталог
$REPLY переменная по умолчанию, куда записывается ввод пользователя, выполненный с помощью команды read
$SECONDS время работы сценария (в секундах)
$SHELLOPTS список допустимых опций интерпретатора (доступна только для чтения)
$SHLVL уровень вложенности shell
  • Примечание: отличается от $$ при определенных обстоятельствах, таких как подоболочки, которые не требуют повторной инициализации bash.

Пример:

$ echo $(echo $BASHPID $$)      $$       $BASHPID
              25680    16920    16920    16920
#             |        |        |        |
#             |        |        |        -- $BASHPID outside of the subshell
#             |        |        -- $$ outside of the subshell
#             |        -- $$ inside of the subshell
#             -- $BASHPID inside of the subshell

Регулярные выражения внутри процесса[править | править код]

Bash 3.0 поддерживает встроенные регулярные выражения с синтаксисом, подобным синтаксису Perl:

Синтаксис регулярных выражений задокументирован на страницах документации man 7 regex. Статус выхода устанавливается в 0, если регулярное выражение совпало со строкой, и 1, если нет. Значение подвыражения, заключённого в скобки, можно получить[7] через переменную ${BASH_REMATCH[@]}, например:

REGEXP='foo(bar)bl(.*)'
if [["abcfoobarbletch" =~ $REGEXP]] 
then
  echo "Регулярное выражение совпало со строкой!" 
  echo "$BASH_REMATCH"      # выводит: foobarbletch 
  echo "${BASH_REMATCH[1]}" # выводит: bar 
  echo "${BASH_REMATCH[2]}" # выводит: etch 
fi

Встроенные регулярные выражения обычно работают быстрее, чем выполнение внешней команды grep, потому что соответствующее регулярное выражение выполняется в рамках процесса bash. Если регулярное выражение или строка содержат пробелы или метасимволы (такие как * или ?), их следует взять в кавычки. Рекомендуется использовать переменную для хранения регулярного выражения, как в вышеприведённом примере, для избежания проблем с экранированием специальных символов. Можно использовать вывод bash с опцией -x для проверки, как именно bash воспринимает ваше регулярное выражение.

Возможность расширения скобок заимствована у csh. Она позволяет произвольной строке быть сформированной с использованием похожей техники, как это делается с названиями файлов. Однако в bash сгенерированные строки не обязаны быть именами файлов. Результат каждого расширения строки не сортируется, сохраняется порядок слева направо:

# Это особенность присущая bash
echo a{p,c,d,b}e # ape ace ade abe

Не следует использовать эту особенность, если скрипт планируется портировать, потому что в традиционных скриптах расширение строки не будет действовать:

# Традиционная оболочка не даёт тот же результат
echo a{p,c,d,b}e # a{p,c,d,b}e

Когда используется расширение скобок в сочетании с символами подстановки, скобки раскрываются первыми, а затем результат обрабатывается в обычном режиме. Таким образом, список JPEG- и PNG-изображений в текущем каталоге может быть получен так:

ls *.{jpg,jpeg,png} # скобки раскрываются до *.jpg *.jpeg *.png, после чего выполняется поиск по маскам
  • Tab ↹: Автодополнение строки за курсором.
  • Ctrl+! Ctrl+!: Повторить последнюю команду.
  • Ctrl+a: Перемещает курсор в начало строки (эквивалентно клавише Home).
  • Ctrl+b: Перемещает курсор на один символ назад (эквивалентно клавише ).
  • Ctrl+r: Поиск по набранным ранее командам.
  • Ctrl+c: Посылает сигнал SIGINT текущему заданию, который обычно (но не всегда) прекращает и закрывает его.
  • Ctrl+

Скриптовый язык - это... Что такое Скриптовый язык?

Скри́птовый язы́к (англ. scripting language, в русской литературе принято название язык сценариев) — язык программирования, разработанный для записи «сценариев», последовательностей операций, которые пользователь может выполнять на компьютере. Простые скриптовые языки раньше часто называли языками пакетной обработки (batch languages или job control languages). Сценарии обычно интерпретируются, а не компилируются (хотя всё чаще применяют компиляцию каждый раз перед запуском).

В прикладной программе, сценарий (скрипт) — это программа, которая автоматизирует некоторую задачу, которую без сценария пользователь делал бы вручную, используя интерфейс программы.

Плагины или скрипты?

Для написания пользовательских расширений могут использоваться как скрипты (в терминологии некоторых программ «макросы»), так и плагины (независимые модули, написанные на компилируемых языках; в некоторых программах они могут называться «утилитами», «экспортёрами», «драйверами»).

Скриптовый язык удобен в следующих случаях:

  1. Если нужно обеспечить программируемость без риска дестабилизировать систему. Так как, в отличие от плагинов, скрипты интерпретируются, а не компилируются, неправильно написанный скрипт выведет диагностическое сообщение, а не приведёт к системному краху;
  2. Если важен выразительный код. Во-первых, чем сложнее система, тем больше кода приходится писать «потому, что это нужно» — см., например, Hello World#Маргинальные примеры. Во-вторых, в скриптовом языке может быть совсем другая концепция программирования, чем в основной программе — например, игра может быть монолитным однопоточным приложением, в то время как управляющие персонажами скрипты выполняются параллельно. В-третьих, скриптовый язык имеет собственный проблемно-ориентированный набор команд, и одна строка скрипта может делать то же, что несколько десятков строк на традиционном языке. Как следствие, на скриптовом языке может писать программист очень низкой квалификации — например, геймдизайнер своими руками, не полагаясь на программистов, может корректировать правила игры;
  3. Если требуется кроссплатформенность. Хорошим примером является JavaScript — его исполняют браузеры под самыми разными ОС.

У плагинов же есть три важных преимущества.

  1. Готовые программы, оттранслированные в машинный код, выполняются значительно быстрее скриптов, которые интерпретируются из исходного кода динамически при каждом исполнении. Поэтому скриптовые языки не применяются для написания программ, требующих оптимальности и быстроты исполнения. Но из-за простоты они часто применяются для написания небольших, одноразовых («проблемных») программ.
  2. Полный доступ к любому аппаратному обеспечению или ресурсу ОС (в скриптовом языке для этого должен существовать написанный на машинном коде API). Плагины, работающие с аппаратным обеспечением, традиционно называют драйверами.
  3. Если предполагается интенсивный обмен данными между основной программой и пользовательским расширением, для плагина его обеспечить проще.

Также в плане быстродействия скриптовые языки можно разделить на языки динамического разбора (sh, command.com) и предварительно компилируемые (Perl). Языки динамического разбора считывают инструкции из файла программы минимально требующимися блоками, и исполняют эти блоки, не читая дальнейший код. Предкомпилируемые языки транслируют всю программу в байт-код и затем исполняют его. Некоторые скриптовые языки имеют возможность компиляции программы «на лету» в машинный код (т. н. JIT-компиляция).

Типы скриптовых языков

Универсальные скриптовые языки

Встроенные в прикладные программы

Командные оболочки

Встраиваемые

  • ActionScript - В средах Adobe Flash, Adobe AIR, Adobe Flex
  • Браузерные языки: JavaScript, JScript
  • Lingo — использующийся в редакторе Director, называют скриптовым
  • Guile
  • Io
  • Lua
  • Sleep
  • Script.NET

Также в приложение может быть встроена возможность расширения сценариями на любом из универсальных скриптовых языков, см. к примеру библиотеку SWIG или автоматический планировщик задач.

Командные файлы интерпретаторов

Многие консольные утилиты поддерживают выполнение последовательности команд, заранее записанной в файл. Такие файлы тоже называют скриптами.

Примеры таких утилит:

  • SQLPlus — выполняет команды SQL и PL/SQL в СУБД Oracle

Скрипт - это... Что такое Скрипт?

  • скрипт — 1 іменник чоловічого роду рукопис арх. скрипт 2 іменник чоловічого роду докладний опис процедури, сценарій техн …   Орфографічний словник української мови

  • скрипт — см. анализ трансакционный. Словарь практического психолога. М.: АСТ, Харвест. С. Ю. Головин. 1998. скрипт …   Большая психологическая энциклопедия

  • Скрипт — (от англ. script сценарий) элемент памяти . Схема события, которая включает в себя ряд отдельных эпизодов. Предполагается, что именно в форме скриптов организованы знания в памяти …   Психологический словарь

  • СКРИПТ-ГЁРЛ — [англ. scriptgirl] арго секретарша режиссера (на киностудии). Словарь иностранных слов. Комлев Н.Г., 2006 …   Словарь иностранных слов русского языка

  • СКРИПТ — Сценарий программа, которая автоматизирует некоторую задачу, которую без сценария пользователь делал бы вручную, используя интерфейс программы Словарь бизнес терминов. Академик.ру. 2001 …   Словарь бизнес-терминов

  • скрипт — сценарий Небольшая служебная программа или макрос, используемые при определенных обстоятельствах. Программа, написанная на каком либо языке программирования для взаимодействия клиента с сервером. Например: Script на Perl для подсчета количества… …   Справочник технического переводчика

  • скрипт — Скрипт: посвідка, рукопис [46 1] розписка, вексель [47] рукопис [49;50,IV,VI,XX] Та про се прошу Вас не забувати 1) про дальший скрипт Клоустона, 2) про дальший скрипт Фірдоусі [XX] рукопис, письмо, посвідка, зобов язання [44 1] рукопис, текст… …   Толковый украинский словарь

  • скрипт — шкрыпт (скрипт), шкрипт рукопис, писання …   Зведений словник застарілих та маловживаних слів

  • Скрипт — …   Википедия

  • скрипт — (лк) scrībere писать; scrīptio писание скрипторий ист. помещение в монастыре, где переписывались книги манускрипт рукопись постскриптум «после написанного», добавление к письму транскрипция «переписывание», передача на письме звучания слов, а… …   Анатомия терминов. 400 словообразовательных элементов из латыни и греческого

  • Скрипт - это... Что такое Скрипт?

  • Скрипт — программа, содержащая набор инструкций для некоторых приложений или утилит. Семантика и синтаксис инструкций в скриптах определяются соответствующими приложениями. Обычно язык скриптов включает простые структуры управления: линейные… …   Финансовый словарь

  • скрипт — 1 іменник чоловічого роду рукопис арх. скрипт 2 іменник чоловічого роду докладний опис процедури, сценарій техн …   Орфографічний словник української мови

  • скрипт — см. анализ трансакционный. Словарь практического психолога. М.: АСТ, Харвест. С. Ю. Головин. 1998. скрипт …   Большая психологическая энциклопедия

  • Скрипт — (от англ. script сценарий) элемент памяти . Схема события, которая включает в себя ряд отдельных эпизодов. Предполагается, что именно в форме скриптов организованы знания в памяти …   Психологический словарь

  • СКРИПТ-ГЁРЛ — [англ. scriptgirl] арго секретарша режиссера (на киностудии). Словарь иностранных слов. Комлев Н.Г., 2006 …   Словарь иностранных слов русского языка

  • СКРИПТ — Сценарий программа, которая автоматизирует некоторую задачу, которую без сценария пользователь делал бы вручную, используя интерфейс программы Словарь бизнес терминов. Академик.ру. 2001 …   Словарь бизнес-терминов

  • скрипт — сценарий Небольшая служебная программа или макрос, используемые при определенных обстоятельствах. Программа, написанная на каком либо языке программирования для взаимодействия клиента с сервером. Например: Script на Perl для подсчета количества… …   Справочник технического переводчика

  • скрипт — Скрипт: посвідка, рукопис [46 1] розписка, вексель [47] рукопис [49;50,IV,VI,XX] Та про се прошу Вас не забувати 1) про дальший скрипт Клоустона, 2) про дальший скрипт Фірдоусі [XX] рукопис, письмо, посвідка, зобов язання [44 1] рукопис, текст… …   Толковый украинский словарь

  • скрипт — шкрыпт (скрипт), шкрипт рукопис, писання …   Зведений словник застарілих та маловживаних слів

  • скрипт — (лк) scrībere писать; scrīptio писание скрипторий ист. помещение в монастыре, где переписывались книги манускрипт рукопись постскриптум «после написанного», добавление к письму транскрипция «переписывание», передача на письме звучания слов, а… …   Анатомия терминов. 400 словообразовательных элементов из латыни и греческого

  • Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *