Написание сценария, который показывает, сколько строк имеет «X» и «Y» в нем?

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

Антуан: Il a du

Eliahou: (Eliahou se penche) Chez Ubisoft? T'as du faire la queue?

Дельмас: Non j'ai pas fait d'queue.

Eliahou: directement ils t'ont donné ça, t'es arrivé …

Антуан: // Bonjour je voudrai un lapin-crétin.

Дельмас: Eu :: f //, Euh un 'tit speech quand même.

Eliahou: Ha, tu leur a parlé ° (quand même un peu)?

Дельмас: Oui bien sûr.

Я ищу для написания общего сценария, который показывает, сколько строк имеет «X» и «Y» в нем? Я смотрю, например, о том, как написать скрипт, который дает имя и количество встречающихся имен, связанных с переменной. Например, в диалоге Элайот спрашивает два вопроса.

Точнее:

  • который задает вопросы (у кого есть «?» в их цитате), сколько времени
  • кто отрезал кого-то, (у кого есть «//» в их цитате)
  • кто повторяет чьи-то предложения
  • кто делает некоторые элиции («t'es» вместо «tu es» («вы», а не «вы есть») и на какой частоте …

Для первого я думал о

 # usage nbocc String File grep $1 $2 >temp wc -l <temp rm temp 

его результат:

 MyComputer:~$ sh compteurQuestions ? Communication 8 

Тем не менее, у меня нет людей с такой командой … Как я должен их делать?

Я знаю, что я должен использовать

 ^........ 

потому что максимальная длина имени здесь 8. Но это довольно жестокий подход, я ищу более элегантный

Я попробовал с awsome скриптом, данным Jay jargo, но кажется, что есть проблема, поскольку после написания с фактическим текстом $ compteurQuestions -vs="?" exempleCommunication $ compteurQuestions -vs="?" exempleCommunication , я получаю Delmas 12 0 . Однако Дельмас спросил по крайней мере один вопрос: Delmas : ils l'ont plié ?

фактический текст

(Tout le monde est assis face à la caméra sauf Matthieu) Antoine: Allumlalum … Elal …

Eliahou: c'est mieux pour toi! c'est mieux pour toi!

Matthieu: Mais t'inquiè :::: te!

Eliahou: * Il est allumé là?

Антуан: * Allume // Matthieu: Ca, C'est bon, ça // sinon sinon [Antoine se lève] // Matthieu: * Non mais, on s'voit tous, ya rien qui va bouger, t'inquiète assieds- тои. * Non mais // Matthieu: Mais ça va pas bouger. // non, mais au moins pour vérifier.

Eliahou: Non, non laisse le // Matthieu: Regarde on bouge pas non plus [Matthieu s'assoit] // non, non mais c'est mieux qu'on se voit. // Антуан: Si si // nan, nan

Matthieu: C'est trop perturbant // [Eliahou pointe l'écran du doigt] //

Антуан: La dernière fois qu'on, la dernière fois on l'a pas fait [Антуан прикасается к ординатуре] // Матфей: Хааа Нан ​​Хааа Je vois un écran là //

Антуан: [Antoine présente un lapin-crétin] Les amis j'vous présente Bob, Bob le gri-gri.

Дельмас: C'est un cadeau du Forum.

Antoine: Salut les amis, Hey! (Il lève un sourcil) Tiens, on te passe le grigri, celui qui a le grigri a le droit de parler // Matthieu: Quand tu sais combien … // [Delmas prend le lapin -crétin, костюм Matthieu уважение]

Eliahou: Tu l'as eu au forum, жанр [il point le gri-gri du doigt]? //

Антуан: C'est lui qui a la parole. [Antoine pointe Delmas du doigt] //

Дельмас: Oui chez Ubisoft.

Антуан: * Il a dû …

Eliahou: [se penche] * Chez Ubisoft? T'as du faire la queue?

Дельмас: Non j'ai pas fait d'queue.

Eliahou: directement ils t'ont donné ça, t'es arrivé … // Antoine: Bonjour je voudrais un lapin-crétin. // // Дельмас: Eu :: f, // Euh un 'tit speech quand même.

Элайоу: Ха, ту леур, как и в то же время?

Дельмас: Oui bien sûr.

Элайоу: «Я не знаю, что ты делал», и «айриш туй леур», как [илл.]. «Клеш». «Кэст ça».

Дельмас: Войла. [signe de la main gauche qui se lève et retombe]

Антуан: Bonjour Delmas apprenti lapin crétin // Дельмас: Нан Маис, [écarte le bras gauche et fait non de la tête] après le Forum ça sert presque à rien, ils ne veulent que des des // des longs si … Et des trucs de six mois. [acquiesce et lève les yeux]

Дельмас: // Уай, вуаля.

Элия: Ах, шесть, ай уай? Иер чуй парти [Delmas remonte ses lunettes et se gratte le nez] avec une personne qui voulait … euh … pas faire de stage là bas, Juste ramasser des petits gadgets nan mais vraiment, yen a ya des personnes, [Дельмас lève le doigt) et tu lai … // Антуан: huhu !!! c'est vrai? //

Matthieu: r'garde Mohammed, tout à l'heure il est revenu avec du liquidide vaisselle.

Антуан: ХАХАХА! [se tape la cuisse] il aurait [lève le doigt] même pu passer chez Etam lu grpus au pus [doigt index]

Matthieu: J'ai J'ai même envoyé un sms à Mariam, tu pouvais même trouver à bouffer, le Printemps ils ont ramené à bouffer

Элайо: Сери? (interloqué) Putain, holala // Дельмас: Pffft! (tête sur le côté) Euuuuh La vérité, Hier j'y étais mais pas // pour ramasser //

Антуан: (неразборчиво) tu dis la vérité, Hinhinhin

Eliahou: la vérité … [écarte de temps en temps les mains] nan sérieux j'y étais hier et puis moi chui parti pour trouver un stage, 'fin pour trouver un stage, pour essayer de ramasser un peu des gadgets aussi.

Антуан: Хин Хин Хин! Vas-y, nous t'écoutons … // Eliahou: Et puis baaah, dès que t'arrives ya énormément de monde, c'est assez frustrant t'as po envie de faire la queue // toi tu veux ton p 'tit gadget, ^ (ton petit lapin-crétin) hin hin hin? // Eliahou: Et j'veux продают гаджеты с петитом. E :::: t puis euh dès que j'arrive à un moment chui arrivé jusqu'au bout du du forum e ::: t yavait personne, ché plus c'était qui quelle société ils cherchaientt des stagiaires. Donc euuh, mais bon … j'me demandais

Антуан: Ca m'parait louche [pointe Eliahou du doigt], là louche

Элайоу: Камарасисайт-луш.

Антуан: Ca m'paraissait louche [pointe le doigt vers le ciel]

Eliahou: je leur ai laissé mon cv euhhhh, ils l'ont gardé, ils l'ont plié, ils l'ont mit de coté et j'suis parti

Антуан: euh euh les cv

Дельмас: ils l'ont plié? [En faisant le geste avec les mains]

Eliahou: ouais [hoche la tête]

Дельмас: ils l'ont plié [Antoine: claque des mains] rire de tous

Антуан: shiiiiiiiit [fait semblant de déchirer du papier]

Matthieu: oh ca veut tout dire [se gratte le pied et se repenche derrière] ouais c'est cool, ça c'est eh, ca c'est eh

Eliahou: mais vous y êtes tous allés [montre tout le monde du doigt], toi t'es allé, toi t'es allé? // Delmas: oui moi j'y suis allé, j'y vais depuis euh // // Matthieu: non [en hochant la tête] // et qu'est-ce que tu посещает alors? [Matthieu: hoche les épaules] >> T'as fait ton cv au moins? Ils prenaient ton cv là-bas non, pour les gars qui ………

Антуан: [croise les pieds] mais mais mais, moi j 'avais les cv pour luiiiiiiii [en donnant des points sur ses cuisses] non mais, il beh il marchait pour moi // Eliahou: ça c' est vrai, il changeait juste la photo // // Matthieu: посещает майс il avait сын сын cv // oui voilà, tu ne voudrais pas essayer ça? [Donne un coup de coude à Matthieu].

Дельмас: après les compétences euh ne sont pas les mêmes [Антуан: ballait un coup de la main comme quoi ce n'est pas grave]

Маттие: ах бхух оуа

Антуан: ouais mais mais t'as fait des maths dans ta jeunesse? [Hoche la tête et se tape à plusieurs resises les cuisses] * rire de tous *

Дельмас: t'as fait un peu'd C? [Tendant la main vers Matthieu] >> T'as fait un peu'd C?

Matthieu: ouais ouais j'ai fait un peu de C // Antoine: ouais [baisse la tête et croise les mains sur ses genoux] // [serre ses doigts]

Eliahou: t'as fini d'écrire ta lettre? [Сопровождающий Маттиу и Луи Тенант ла-лайн] // Антуан: t'as quand même euh, >> tu sais écrire une lettre [tapote Matthieu], t'as >> fait une lettre à ta maman quand même? //

Matthieu: je déteste ça, [отношение Antoine dans les yeux], [Eliahou se mordille les ongles des doigts] * rire d'Antoine * // Delmas: voilà //

Eliahou: et sinon les steps euh vous avez trouvé

Антуан: moi je l'ai déjà

Eliahou: et toi [montre Delmas du doigt] non mais toi t'as ton stage en anglais

Антуан: c'est vrai [en souriant]

Дельмас: не-мажор с 'est que l' entretien, après euh c 'est pas sure qu' ils me prennent // Антуан: ouï tu m 'avais dit euh ch' était cro bizarre euh // si si c 'est bizarre [ se gratte le nez] (тишина)

Eliahou: non mais c'est pas fini la? // Дельмас: Non mais c'est chaud hein // il reste combien de temps là?

Matthieu: на страстном удалении, и на répétait ce qu'on avait dit la dernière fois * rire de tous *

Антуан: si si [se claque la cuisse] // Eliahou: et qu'est-ce qu'on avait dit? // qu'il y 'avait le psg, non mais c' était le psg, vous avez vu? [Continu de se claquer les cuisses]

Eliahou: ouais je l'ai vu

Антуан: и другие?

Eliahou: ils ont perdu // Антуан: ah les Chelsea // contre Chelsea // Matthieu: ouais je l'ai vu //

Delmas: non mais euh ça pouvait pas être la dernière fois passeu euh le match euh, il était mardi et s 'est enregistré euh * rire de tous *

Антуан: non mais euh, на enregistré mardi

Matthieu: на enregistré lundi [se rapprochant d'Antoine]

Дельмас: à 10h * rire de tous * [манипулятор un bonhomme en jouet entre les mains]

Антуан: oulaaaa * rire * il me we you we you we are you a you you you you [ru] [ru]

Matthieu: et tout ça il va falloir qu'on retanscrive * rire de tous * // Антуан: c'est pas grave euh //

Eliahou: [fait des gestes] non mais qu'est-ce qu'il est malade ce mec * rire de tous *

Антуан: [montre Delmas du doigt] non mais dans les didascalies, on mettra les grands yeux, tout cru tout nu, presque tout cru tout nu [касаться le jouet de Delmas] comme BOB notre euh ….

Eliahou: je vous предлагать de unie petite dédicace à la prof pour avoir une bonne note, on va parler de …

Антуан: c 'est ça, cette vidéo c'est pour toi [montrant la caméra du doigt]

Matthieu: d'accord

Элайоу: Ту т успокоится [en souriant, уважающий Антуан].

Антуан: Ту, успокаивается [en faisant un signe de l'index réprobateur]. Bon d'accord.

Eliahou: Faut parler d'un sujet là assez euh … Euh важно, intéressant. [les mains ouvertes, explicatives, les doigts écartés].

Антуан: Les présidentielles américaines [fixant Eliahou, les mains sur les genoux].

Элайот: Хейн! (la tête s'approchant d'Antoine)

Eliahou: Qu'est-ce que tu penses de … [la main gauche se levant] // [Matthieu tourne la tête] // Qu'est-ce que j'y connais moi en … démocratie // Antoine: En démocratie pour moi c'est la même выбрал [Antoine lève la main droite pour saluer une personne qui entre] // en … républicain (bougeant les mains) je sais que Donald Trump il est haut? [levant la main gauche pour appuyer son offer] mais c'est un milliardaire.

Matthieu: C'est c'est un milliardaire.

Антуан: [Salue à nouveau avec la main droite] Euh … О том, как это сделать.

Элайот: Д'Эбсауше.

Matthieu: Ciao!

Eliahou: L'affaire Aurier. [la main gauche ouverte, utilisant son index pour commencer son offer]

Антуан: C'est quoi l'affaire Aurier [interrogatif, se rapprochant de Delmas]?

Eliahou: Ah ouais l'affaire Aurier rolala, Serge Aurier du PSG.

Антуан: Le PSG?

Matthieu: Je sais que c'est stornant de débilité rires

Антуан: Mais c'est quoi c'est quoi c'est quoi? [se rapproche d'Eliahou]

Элайот: Euuuh …

Matthieu: Je n'ai pas dit

Eliahou: Ту-ла-конне-ли? [Турнир в театре Антуан]

Антуан: C'est un c'est un oui c'est un … [le pouce et le majeur droit sur le menton, se creusant la tête]

Eliahou: C'est comme Snapchat

Matthieu: En live

Eliahou: Ou voilà en en live

Дельмас утверждает, что чучатоант

Антуан: Eh ben eh ben?

Элайо: Э-э-э-э-э-э-э-э-э-э-э-э-э-э 7/8 минут // Маттие: Ой иль оскорбит. // où il insultait où il insultait voilà son coach son entraîneur // Matthieu: Et après il s'est excusé, il a dit // ses collègues // Matthieu: жанр il a traité des gens de fiottes // voilà // Matthieu : et dans la presse il a dit: «Je ne voulais pas dire fiotte, je voulais dire PD». D'accord, merci. rires de tout le monde Извините de malade.//

Eliahou: Ça j'y crois pas trop [указательный индекс сына, версия Matthieu]

Matthieu: Vraiment c'était écrit [haussant les sourcils] // Eliahou: Y'a pas que ça aussi //

Антуан: Et ce monsieur, c'était un joueur? // Eliahou: Oui un joueur de foot //

Антуан: Pourquoi à chaque fois c'est [levant la main et la tapant sur sa cuisse]

Matthieu: Parce qu'ils sont joueurs … de FOOTeuh! [en s'avançant vers Antoine]

Антуан: Необычный мир

Eliahou: Je pense qu'il s'est mis tout le vestiaire à dos // Antoine: Du coup // du coup il va plus jouer jusqu'à la fin de la saison // Маттие: Тант-мей // Антуан: Бен-тант pis pour lui hein [haussant les sourcils] // Eliahou: Mais c'est un très bon joueur //

Антуан: Même si t'es beau, quand t'es con tu vas pas très loin rires

Eliahou: Ouais c'est vrai ça je sais pas … // Антуан: C'est pas // j'ai pas envie de parler des gens politiques [envoie un baiser vers la caméra] // Антуан: C'est pas russe Périscope parce que t'avais Maxime … // // Matthieu: Pas du tout. Nan nan nan nan nan // // Antoine: Bizarre, chelou [en abaissant la tête pour appuyer son offer] // Matthieu: Maxime c'est juste qu'il a trouvé une fille sur Périscope pendant le cours d'UML à poil qui était en train de se déshabiller rires de Matthieu et Eliahou

Антуан: Олалааа … [mettant une main sur son visage] tu fais quoi Maxime? Parce que Maxime lorsqu'il travaille c'est // Eliahou: On va faire la version non censurée hein [levant l'index pointant tout le monde du doigt] rires

Маттие: Ça va être marrant

Antoine: Tout s'est bien passé [appuyant son offer avec une main de bas en haut sur la cuisse] rire

Eliahou: Vous avez quoi là après tout à l'heure? // Антуан: Bah comme toi, réseaux [frappant sa main sur sa cuisse]! // // Matthieu: parle doucement On n'y va pas. // … // Moi aussi j'ai rien … Ah réseaux, c'est quoi?

Антуан: Réseaux, com … T'étais pas là ce matin? «Яавиат» проводит переговоры, и в то же время, и в то же время, когда речь идет о том, чтобы совершить поездку и совершить поездку в Матью? // Matthieu: Nan pas du tout // mais … // Matthieu: Mais moi j'étais, j'me suis pas réveillé // rire

Antoine: nan moi je crois, nan c'est ça c'était Sarah … Sarah qui avait fait m'sieur m'sieur [geste en levant le doigt vers le haut] et lui il s'casse en courant [fait un geste de la main droite mimant une personne qui court] rire général

Дельмас: c'était pas Sarah c'était moi en fait [rire de Matthieu en se balançant sur sa chaise] en fait on attendu déjà 40 минут // Антуан: ouai ouai // après on est monté chez Mathieu // Matthieu: ils ont DEJA attendus 40 минут [en s'adressant a Antoine] // lorsqu'on est rentré on l'a vu il était avec une dame il avait l'air euh décontracté [geste des mains imitant la décontractioné] on lui a dit «На avait cours» [pointant le doigt vers le haut en le faisant trembler] alors il a dit ah ouais ??! [En prenant la voix de quelqu'un d'étonné] Rire général // Antoine: nan mais il se fout de nous // mais écoutez j'suis désolé euh rigole // Антуан: j'été pas au courant [en frappant ses deux mains sur ses genoux en rigolant très fort // je croyais qu'c'était entre midi et et et deux mais j'sais pas.

Eliahou: настенький кувшин,

Matthieu: comme nous rigole // Antoine: p'tit croissant hein // tant pis c'pas grave on n'ira pas c'est tout (…)

Eliahou: персональный персонаж j'dois faire mon sport [fait un geste de la main en montrant une direction]

Антуан: ah ouai c'est vrai lui il va à la salle c'est un sportif [en montrant Eliahou du doigt]

Eliahou: lui il fait l'marathon c'est un sportif aussi [en montrant du doigt Antoine]

Антуан: et et la salsa // Eliahou: ah ouai et la salsa rigole // major major de la salsa [en pointant le doigt vers le haut] // Дельмас: avec 12 // [rire général et Antoine qui rigole en mettant ses deux mains sur la figure] alors que là en communication [en montrant avec sa main la salle de classe] quand ta 12 c'est la pire des notes alors que là c'est la meilleur

Дельмас: ouai ouai

Matthieu: c'est dl'a conneries

Дельмас: et encore j'pense qu'on qu'on va s'prendre au moins 17 là

Антуан: ПЛЮС [en élevant la voix, en serrant le poing puis le frappe sur son genou] moi j'veux mille mille mille sûr [en tapant du poing sur son genou à chaque répétition]

2 Solutions collect form web for “Написание сценария, который показывает, сколько строк имеет «X» и «Y» в нем?”

Попробуйте:

 #!/usr/bin/awk -f BEGIN { wordssize=split(s,words,"%"); if (wordssize==0) { words[1]=s; wordssize=1; } characterssize=0; } { if ($0 ~ /^ *[^:][^:]* *:/) { character=substr($1,1,index($0,":")-1); for (i=length(character);substr(character,i)==" ";i--){ character=substr(character,1,length(character)-1); } } if (!lines[character]) { lines[character]=1; for(i=1; i<=wordssize; i++) { markers[words[i] " " character]=0; } characters[++characterssize]=character; } else { lines[character]++; } for(i=1; i<=wordssize; i++) { line=$0; while ((position=index(line,words[i]))>0) { markers[words[i] " " character]++; line=substr(line,position+length(words[i])); } } } END { printf("%9s %s","Character","Lines"); for(i=1; i<=wordssize; i++) { printf(" %s", words[i]); } printf ("\n"); for (i=1;i<=characterssize;i++) { printf("%9s %-5d",characters[i],lines[characters[i]],markers[characters[i]]); for(j=1; j<=wordssize; j++) { printf(" %-" length(words[j]) "d", markers[words[j] " " characters[i]]); } printf ("\n"); } } 

Если текущая строка начинается с букв и :, символьной переменной присваивается найденное имя. Каждая строка текста подсчитывается для каждого символа. Каждый раз, когда встречается последовательность поиска (например ,? ), Счетчик маркеров символа увеличивается.

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

Строка для поиска указана с помощью -vs = "?" , Одновременно можно искать несколько строк. Отделите строки для поиска с помощью % : -vs = "?% //" .

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

На выходе символы отображаются в порядке появления.

Тест:

 $ chmod +x compteur $ ./compteur -vs="?%//%'%t'es" Communication Character Lines ? // ' t'es Antoine 2 0 1 0 0 Eliahou 3 3 0 3 1 Delmas 3 0 1 3 0 $ ./compteur -vs="?" Communication Character Lines ? Antoine 2 0 Eliahou 3 3 Delmas 3 0 

—-

первая версия для истории

 #!/usr/bin/awk -f { if ($1 ~ /^[^:][^:]*:/) { character=substr($1,1,index($1,":")-1); } line=$0; lines[character]++; while ((position=index(line,s))>0) { markers[character]++; line=substr(line,position+length(s)); } } END { printf("%9s %s %s","Character","Lines",s); for (character in lines) { printf("\n%9s %-5d",character,lines[character]); if (markers[character]) { printf(" %-3s",markers[character]); } } printf("\n"); } 

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

cat Communication | grep -F "${a}" | awk -F ':' '{print $1}' | sort | uniq -c

Не избегайте содержимого a , потому что есть -F -option для grep . Содержание a взято буквально (если оно не содержит новую строку).

Если имена человека могут содержать строку, которую вы ищете, следующие работы, но затем помните о том, чтобы избежать любых символов, в которых может быть специальное значение соответствия шаблону для grep (т. grep Если вы ищете . , Но \. в a , если вы ищете ? используйте \? и т. д.):

cat Communication | grep -E "^[^:]*:.*${a}" | awk -F ':' '{print $1}' | sort | uniq -c

Или, в частности, ответы на три из ваших вопросов:

который задает вопросы (у кого есть «?» в их цитате), сколько времени

cat Communication | grep -F '?' | awk -F ':' '{print $1}' | sort | uniq -c

кто отрезал кого-то, (у кого есть «//» в их цитате)

cat Communication | grep '//' | awk -F ':' '{print $1}' | sort | uniq -c

кто делает некоторые элиции («t'es» вместо «tu es» («вы», а не «вы есть») и на какой частоте …

cat Communication | grep "'" | awk -F ':' '{print $1}' | sort | uniq -c

(Я знаю, что все это «бесполезное использование кошки», но делает поток данных более понятным для первого cat а затем подключается к grep . Также можно использовать grep -F "${a}" Communication | [...] и т. д.)

  • Запустите процесс в определенном окне экрана, если он существует, в противном случае создайте этот экран, а затем сделайте это
  • Задача SED, агрегирование строки, содержащей фигурные скобки
  • Удалить все файлы в каталоге
  • Можно ли отслеживать отправленные письма?
  • пакетный инструмент для отправки файлов через webdav
  • перебирать файлы и отправлять строки в качестве позиционных параметров в другой файл
  • Найти набор дополнений массива?
  • Требуется вывод в хорошем формате с использованием сценария оболочки
  • Как получить имя блока устройства из имени устройства раздела?
  • пакеты для установки в цикле for, если они не установлены
  • Проверьте, установлены ли несколько переменных
  • Interesting Posts

    Есть ли способ написать скрипт для входа в ftp, поэтому мне не нужно вводить вещи снова и снова?

    Не удалось завершить работу Windows после установки GRUB

    Как bash интерпретирует равный оператор без окружающих пространств в условном?

    Создайте файл с использованием специальных символов как имя файла

    Беспроводная связь, но без подключения

    Что такое DRPM и как он отличается от RPM?

    Как запустить Linux в виртуальной машине на Retina MacBook Pro в режиме Hi-DPI?

    При создании среды зависит от текущего каталога

    Почему denyhosts не запрещает * некоторые * грубые силы root SSH попытки входа?

    проблема с сетью после обновления от Debian Jessie до Stretch

    yum install http://www.example.com/package.rpm vpm rpm -ivh http://www.example.com/package.rpm

    Нет функции * shutdown * в KDE

    USB-накопитель не обнаружен на Antergos после его использования в Windows 8.1

    Есть ли недостаток в использовании «grep -E» вместо простого «grep»?

    POSIX и Bash, sh shorthand, для составного оператора if

    Linux и Unix - лучшая ОС в мире.