Share to: share facebook share twitter share wa share telegram print page

Bash

bash
 Редагувати інформацію у Вікіданих
Екран роботи з Bash
ТипКомандна оболонка Unix
АвторБраян Фокс (Brian Fox)
Розробникпроєкт GNU Редагувати інформацію у Вікіданих
Перший випуск7 червня 1989; 35 років тому (1989-06-07)
Стабільний випуск5.2.21 (9 листопада 2023; 13 місяців тому (2023-11-09))
ПлатформаGNU
Операційна системакрос-платформовий
Мова програмуванняC
Доступні мовианглійська, багатомовна через gettext
Стан розробкиактивний
ЛіцензіяGNU General Public License version 3+[1]
Онлайн-документаціяgnu.org/software/bash/manual/ Редагувати інформацію у Вікіданих
Репозиторійgit.savannah.gnu.org/gitweb/?p=bash.git
Вебсайтдомашня сторінка

bash (від англ. Bourne again shell, букв. перероджена Shell) — вдосконалена й модернізована варіація командної оболонки Bourne shell. Один із найпопулярніших сучасних різновидів командної оболонки UNIX. Особливо популярна в середовищі GNU/Linux, де часто використовується як командна оболонка за замовчуванням.

Bash — це акронім Bourne-again-shell, тобто знову оболонка Bourne. Назва — це гра слів на Bourne-shell — один з популярних різновидів командної оболонки для UNIX (sh), автором якої є Stephen Bourne (1978), вдосконалена в 1987 Brian Fox. Bourne (Борн) перекликається з англійським словом «born», що означає що «народився», звідси: народжена-знову командна оболонка. Також має місце інша гра слів: «born again» — «народжений знову».

Синтаксис

Синтаксис команд bash — це надмножина синтаксису команд Bourne shell. Остаточна специфікація синтаксису команд Bash є в Bash Reference Manual [Архівовано 23 серпня 2011 у WebCite], що поширює проект GNU.

«hello world»

 #!/bin/bash          
 echo Hello World!

Цей скрипт містить лише два рядки. Перший повідомляє системі про те, яка програма використовується для запуску файлу. Другий рядок — це єдина дія, яка виконується цим скриптом, він, власне, друкує 'Hello world' у терміналі.

Умовний оператор

 #!/bin/bash
 T1="foo"
 T2="bar"
 if [ "$T1" = "$T2" ]; then
   echo умова виконується
 else
   echo умова не виконується
 fi

Цикли

Приклад організації циклів

 #!/bin/bash
 for i in $( ls ); do
   echo item: $i
 done
 #!/bin/bash
 for i in `seq 1 10`;
 do
   echo $i
 done
 #!/bin/bash
 COUNTER=0
 while [  $COUNTER -lt 10 ]; do
   echo The counter is $COUNTER
   let COUNTER=COUNTER+1
 done

Функції

Оболонка підтримує механізм створення функцій. Після об'яви функції, її можна викликати як звичайну команду з таким самим способом передачі параметрів. Функції створюються наступним чином

 [ function ] ім'я_функції () перелік_команд [перенаправлення]

де

  • function — не обов'язковий оператор об'яви функції;
  • ім'я_функції () — ім'я нової функції з обов'язковим додаванням дужок;
  • перелік_команд — списком команд, які розміщені між фігурними дужками {}

Приклад функції, яка перевіряє чи є вказаний параметр шляхом до теки

chck_dir ()
{
# оголошення локальної змінній в функції
  local dpath=$1
  
# якщо тека не існує - завершення роботи функції
  if [[ ! -d $dpath ]]
  then 
    echo "файл $dpath не існує або не є текою"
    return 1
  fi

# перевіряємо чи користувач передав валідний шлях до директорії
# якщо ні - завершуємо роботу
if [[ ! -d "$1" ]] ; then
  echo "Шлях '$1' не існує. Будь ласка, уточнить."
  exit 1
fi
}

# Виклик функції
chck_dir /home/usr001/record

Відмінний синтаксис

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

Цілочисельна математика

Головне обмеження Bourne shell це те, що він не може виконувати обчислення з цілими числами без породження зовнішнього процесу. Bash може виконувати цілочисельні обчислення всередині процесу використовуючи команду ((…)) і синтаксис змінної $[…], як показано нижче:

 VAR=55             # Встановлюємо змінну VAR, рівною 55
 ((VAR = VAR + 1))  # Додаємо одиницю до змінної VAR. Зверніть увагу на відсутність знака '$'
 ((++VAR))          # Інший спосіб збільшення VAR на одиницю. Виконує префіксний інкремент
 ((VAR++))          # Інший спосіб збільшення VAR на одиницю.  Виконує постфіксний інкремент
 echo $[VAR * 22]   # Множимо VAR на 22 і передаємо результат команді
 echo $((VAR * 22)) # Інший спосіб зробити те саме

Команда ((…)) так само може використовуватися в умовних твердженнях, тому що її вихідний параметр це 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).

Перенаправлення потоків

Bash має індивідуальний синтаксис перенаправлення потоків вводу/виводу, який не підтримує Bourne shell. Bash може перенаправляти стандартний потік виводу stdout та стандартний потік повідомлень про помилки stderr в один файл file одночасно. Використовується наступний синтаксис:

 command &> file

що простіше набрати, ніж еквівалентну команду в синтаксисі Bourne shell, яка спочатку перенаправляє потік stdout у файл file, а потім перенаправляє stderr в той же потік, що і stdout (1 та 2 тут номери стандартних потоків stdout та stderr відповідно):

 command >file 2>&1

Bash, починаючи з версії 2.05b, може перенаправляти стандартний ввід stdin на текст із рядка, використовуючи синтаксис, який іноді називають «here strings»:

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

Якщо рядок містить пропуски, його слід узяти в лапки.

Приклади:

  • Перенаправлення стандартного виводу у файл, запис даних, закриття файлу, скидання 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<&-
  • Захоплення виведення зовнішніх команд:
 # execute 'find' and store results in VAR
 # search for filenames which end with the letter "h"
 VAR=$(find . -name "*h")

Регулярні вирази всередині процесу

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

 [[ string =~ regex ]]

Синтаксис регулярних виразів задокументовано на сторінках документації man 7 regex. Статус виходу встановлюється в 0, якщо регулярний вираз збігся з рядком, і 1, якщо ні. Значення підвиразів, загорнутих у дужки, можна отримати через змінну ${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 згенеровані рядки не зобов'язані бути іменами файлів. Результат кожного розширення рядка не сортується, зберігається порядок зліва направо:

 # This is a bash specific feature
 echo a{p,c,d,b}e # ape ace ade abe

Не слід використовувати цю особливість, якщо скрипт планується портувати, бо в традиційних скриптах розширення рядка не діятиме:

 # A traditional shell does not produce the same output
 echo a{p,c,d,b}e # a{p,c,d,b}e

Переносимість

Скрипти оболонок, написані зі специфічними для bash особливостями (bashism-и) не будуть працювати на системах, де використовується Bourne shell або один із його замінників, без того, щоб bash був встановлений як додаткова оболонка, і звісно, скрипти треба починати з #!/bin/bash. Ця проблема стала особливо важливою, коли Ubuntu почав із жовтня 2006, поставляти Debian Almquist shell, dash, як скриптову оболонку за умовчанням, що призвело до недієздатності численних скриптів.

Див. також

Виноски

  1. GNU Project. README file. Архів оригіналу за 26 червня 2013. Процитовано 3 лютого 2011. Bash is free software, distributed under the terms of the [GNU] General Public License as published by the Free Software Foundation, version 3 of the License (or any later version)

Посилання

Read other articles:

Benteng Fakhruddin al-Ma'aniقلعة فخر الدين المعنيTadmur, Suriah Pemandangan bentengBenteng Fakhr-al-Din al-Ma'aniKoordinat34°33′45.9″N 38°15′26.8″E / 34.562750°N 38.257444°E / 34.562750; 38.257444JenisBentengInformasi situsDikontrol olehAngkatan Darat SuriahTerbuka untukumumTidak dapat diakses (di zona perang)KondisiSebagian besar masih utuh tapi rusakSejarah situsDibangunAbad ke-13Dibangun olehMamlukPertempuran/peperanganPeran…

Marek Belka Presiden Bank Nasional PolandiaMasa jabatan11 Juni 2010 – 20 Juni 2016PresidenBronisław Komorowski (Pelaksana tugas)Bogdan Borusewicz (Pelaksana tugas)Grzegorz Schetyna (Pelaksana tugas)Bronisław KomorowskiAndrzej DudaPerdana MenteriDonald TuskEwa KopaczBeata Szydło PendahuluPiotr Wiesiołek (Pelaksana tugas)PenggantiAdam GlapińskiPerdana Menteri Polandia ke-11Masa jabatan2 Mei 2004 – 31 Oktober 2005PresidenAleksander KwaśniewskiWakilJerzy HausnerIzabela Ja…

Revolusi Islam IranProtes di alun-alun Azadi, Teheran, 1979Tanggal7 Januari 1978 – 11 Februari 1979LokasiIranHasil Kemenangan Dewan Revolusi Kejatuhan Shāh Mohammed Rezā Pahlavi Berakhirnya Dinasti Pahlavi Dibentuknya Republik Islam Iran Krisis energi 1979 Perang Iran–IrakPihak terlibat Negara Imperial Iran SAVAK Garda Imperial Iran Republik Islam Iran Dewan Revolusi IranTokoh dan pemimpin Mohammad Reza Pahlavi Ayatollah Ruhollah Khomeini Mehdi BazarganBagian dari seri mengenai Sejarah Ira…

Mogadishu مقديشو Maqadīshū (The Seat of the Shah)[1]Julukan: XamarNegara SomaliaRegionBenadirPemerintahan[3] • MayorAbdurisaq Mohamed Nor [2]Populasi (2006)[4] • Total2.000.000Zona waktuUTC+2 (EAT) Peta Somalia Mogadishu (bahasa Somali: Muqdisho) adalah sebuah kota di Afrika Timur. Mogadishu merupakan kota terbesar sekaligus ibu kota nominal otoritas sementara Somalia. Uniknya, Somalia tidak memiliki pemerintahan de f…

Wali Kota BekasiPetahanaRaden Gani Muhamad(Penjabat)sejak 20 September 2023KediamanBalai Kota BekasiMasa jabatan5 tahun dan dapat dipilih kembali untuk satu kali masa jabatanDibentuk20 April 1982; 41 tahun lalu (1982-04-20)Pejabat pertamaKhailani ARSitus webhttp://www.bekasikota.go.id/ Daftar Berikut adalah Daftar Wali Kota Bekasi dari masa ke masa. No. Potret Wali Kota Administratif(lahir–wafat) Mulai menjabat Akhir menjabat Masa Jabatan Partai Prd. Wakil Wali Kota Ket. 1 H.Soedjono…

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Oktober 2016. Don't Make Me Think (bahasa Indonesia: Jangan buat saya berpikir) adalah sebuah buku yang ditulis oleh Steve Krug tentang interaksi antara manusia komputer dan web usability. Premis dari buku ini adalah: sebuah peranti lunak (website) dapat dikatakan baik…

Disambiguazione – Se stai cercando la variante superstrada, vedi Strada statale 291 var della Nurra. Strada statale 291 della NurraLocalizzazioneStato Italia Regioni Sardegna Province Sassari DatiClassificazioneStrada statale InizioSS 291 var FineFertilia Lunghezza18,987[1] km Provvedimento di istituzioneD.M. 16/11/1959 - G.U. 41 del 18/02/1960[2] GestoreANAS ManualeUn lungo rettilineo presso Olmedo del tratto declassato a strada provincialeLa strada statale 291 …

1996 Danish filmPusherTheatrical posterDirected byNicolas Winding RefnScreenplay byJens DahlNicolas Winding RefnStory byNicolas Winding RefnProduced byHenrik DanstrupStarring Kim Bodnia Zlatko Burić Laura Drasbæk Slavko Labović Mads Mikkelsen Vanja Bajičić Peter Andersson CinematographyMorten SøborgEdited byAnne ØsterudMusic byPovl KristianPeter PeterProductioncompanyBalboa EntertainmentDistributed byRCV Film DistributionRelease date 30 August 1996 (1996-08-30) Running time…

TalagaKecamatanNegara IndonesiaProvinsiJawa BaratKabupatenMajalengkaPemerintahan • Camat-Populasi • Total- jiwaKode Kemendagri32.10.04 Kode BPS3210040 Desa/kelurahan- Situ Sangiang pada tahun 1918 Pemandangan di daerah Talaga pada tahun 1918 Talaga adalah sebuah kecamatan di Kabupaten Majalengka, Provinsi Jawa Barat, Indonesia. Geografis Secara geografis Kecamatan Talaga terletak di selatan Kabupaten Majalengka yaitu antara 108°16’-108°21’ Bujur Timur, 60°58…

Questa voce sull'argomento stagioni delle società calcistiche italiane è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Voce principale: Società Sportiva Chieti Calcio. Società Sportiva Chieti CalcioStagione 2011-2012Sport calcio Squadra Chieti Allenatore Silvio Paolucci Presidente Walter Bellia Seconda Divisione4º nel girone B. Maggiori presenzeCampionato: Fiore (37) Miglior marcatoreCampionato: A…

صاحبة السمو الملكي  سارة فيرغسون دوقة يورك (بالإنجليزية: Sarah Ferguson)‏    معلومات شخصية اسم الولادة (بالإنجليزية: Sarah Margaret Ferguson)‏  الميلاد 15 أكتوبر 1959 (65 سنة)[1][2][3]  مواطنة المملكة المتحدة  لون الشعر شعر أصهب  الزوج أندرو دوق يورك (23 يوليو 1986–30 مايو 1996)…

Serbian singer-songwriter Nevena BožovićНевена БожовићBožović performing at charity concert Ulice otvorenog srca in 2017Born (1994-06-15) 15 June 1994 (age 29)Kosovska Mitrovica, FR YugoslaviaSpouse Nikola Ivanović ​ ​(m. 2019)​Children1Musical careerGenresPopdanceballadOccupation(s)SingersongwriterInstrument(s)VocalsYears active2007–presentWebsitewww.nevenabozovic.com Musical artist Nevena Ivanović (Serbian Cyrillic: Невена Ив…

Serangan Iran terhadap Israel 2024Bagian dari Luapan Perang Israel–Hamas 2023 dan Konflik Iran-Israel selama perang saudara SuriahRudal Iran Terlihat di Kota Tua YerusalemTanggal13 April–14 April 2024LokasiIsrael, Wilayah pendudukan Israel, Dataran Tinggi Golan, Tepi Barat, Irak, Yordania dan SuriahHasil Rudal Iran menghantam Pangkalan Angkatan Udara Nevatim dan Ramon di Israel.[1][2] Serangan berakhir.Pihak terlibat  Iran Hizbullah Houthi Pasukan Mobilisasi Populer …

Vic Hanson Nazionalità  Stati Uniti Altezza 178 cm Peso 72 kg Pallacanestro Ruolo Guardia Termine carriera ? Hall of fame Naismith Hall of Fame (1960) Carriera Giovanili 1919-1922Syracuse Central High School1922-1923Manlius Military Academy1923-1927 Syracuse Orangemen Squadre di club 1927-1930 Clev. RosenblumsSyracuse All-Americans Il simbolo → indica un trasferimento in prestito. Football americano Carriera Giovanili Syracuse University Carriera da allenatore 1928-1929…

  هذه المقالة عن محافظة البيضاء في اليمن. لمعانٍ أخرى، طالع البيضاء (توضيح). محافظة البيضاء  - محافظة -  موقع محافظة البيضاء تقسيم إداري البلد  اليمن[1] العاصمة مدينة البيضاء الإقليم الفدرالي إقليم سبأ المسؤولون خصائص جغرافية إحداثيات 14°16′00″N 45°20′00″Eþ…

Currency of Vietnam VND redirects here. For other uses, see VND (disambiguation). It has been suggested that Vietnamese one-hundred-dong bill be merged into this article. (Discuss) Proposed since October 2023. It has been suggested that Vietnamese five-hundred đồng bill be merged into this article. (Discuss) Proposed since October 2023. ĐồngĐồng Việt Nam (Vietnamese) The 100,000 VND banknote, first issued in 2004ISO 4217CodeVND (numeric: 704) 1989–1990: VNCUnitPlu…

周處除三害The Pig, The Snake and The Pigeon正式版海報基本资料导演黃精甫监制李烈黃江豐動作指導洪昰顥编剧黃精甫主演阮經天袁富華陳以文王淨李李仁謝瓊煖配乐盧律銘林孝親林思妤保卜摄影王金城剪辑黃精甫林雍益制片商一種態度電影股份有限公司片长134分鐘产地 臺灣语言國語粵語台語上映及发行上映日期 2023年10月6日 (2023-10-06)(台灣) 2023年11月2日 (2023-11-02)(香港、…

Apple videotelephony service This article is about the Apple product. For other uses, see FaceTime (disambiguation). FaceTimeFaceTime running on an iPhone 13Developer(s)AppleInitial release iOS: June 24, 2010; 13 years ago (2010-06-24) (with iOS 4) Mac: February 24, 2011; 13 years ago (2011-02-24) (with Mac OS X 10.6.6 “Snow Leopard”) Operating system iOS: 4.0 and later iPadOS Mac: Mac OS X 10.6.6 and later tvOS: 17.0 and later Platform iPhone Ap…

国民阵线Barisan NasionalNational Frontباريسن ناسيونلபாரிசான் நேசனல்国民阵线标志简称国阵,BN主席阿末扎希总秘书赞比里署理主席莫哈末哈山总财政希山慕丁副主席魏家祥维纳斯瓦兰佐瑟古律创始人阿都拉萨成立1973年1月1日 (1973-01-01)[1]设立1974年7月1日 (1974-07-01)前身 联盟总部 马来西亚  吉隆坡 50480 秋傑区敦依斯迈路太子世贸中心(英语:…

Non-profit organisation Hope for JusticeFormation2008; 16 years ago (2008)TypeNon-profit organisationPurposeEnd human trafficking and modern-day slaveryHeadquartersManchester, England, U.K.Region served Cambodia, United Kingdom, United States, Norway, Australia, Ethiopia, Uganda[1]CEOTim NelsonStaff 420Websitehopeforjustice.orgRemarksHope for Justice, registered charity no. 1126097. Charity Commission for England and Wales. Hope for Justice is a global non-profit organi…

Kembali kehalaman sebelumnya