Как работает такая конструкция!? (сломал весь мозг)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

blackdevil
Бывший модератор
Сообщения: 2751
Статус: Добровольный помощник
ОС: Ubuntu (lts)

Как работает такая конструкция!?

Сообщение blackdevil »

Привет всем,

Скрипт:

Код: Выделить всё

#!/bin/sh -x
#This script counts how many people
# are in the group specified as the first argument
grp=${1:?"Missing argument"}    # get group ID number
# If missing, report an error and exit.
awk -F: '
# Awk script starts here
BEGIN {
    # set total to zero
    #   before we start
    total=0;
}
$3 ~ /^'$grp'$/ {total++;}
END {
    # end of file, print total
    printf("Total: %d\n", total);
}' </etc/passwd


Интересует что за синтаксис такой и как оно выполняется, а так же где это описано:

Код: Выделить всё

grp=${1:?"Missing argument"}


Я нашел только тренарный оператор в стиле Си:

условие?если_выполняется_значение_берем_это:если _не_выполняется_то_значение_вот_это

Всем заранее спасибо. Уже 3 человека мозг на этом сломали.
Простые решения для Ubuntu-подобных систем: смотрим тут
Спасибо сказали:
Аватара пользователя
moonglow
Сообщения: 90
ОС: CentOS

Re: Как работает такая конструкция!?

Сообщение moonglow »

привет!

blackdevil писал(а):
09.01.2014 18:49
Интересует что за синтаксис такой и как оно выполняется, а так же где это описано:

Код: Выделить всё

grp=${1:?"Missing argument"}

Я нашел только тренарный оператор в стиле Си:
условие?если_выполняется_значение_берем_это:если _не_выполняется_то_значение_вот_это
Всем заранее спасибо. Уже 3 человека мозг на этом сломали.

man bash глава parameter expansion

Код: Выделить всё

${parameter:?word}
              Display Error if Null or Unset.  If parameter is null or unset, the expansion of word (or a message to
              that effect if word is not present) is written to the standard error and  the  shell,  if  it  is  not
              interactive, exits.  Otherwise, the value of parameter is substituted.
Спасибо сказали:
blackdevil
Бывший модератор
Сообщения: 2751
Статус: Добровольный помощник
ОС: Ubuntu (lts)

Re: Как работает такая конструкция!?

Сообщение blackdevil »

Ого!

Сапасибо огромное. А я первым делам в гугл полез и howto разные. А было то оно оказывается на блюдечке прям :)
Простые решения для Ubuntu-подобных систем: смотрим тут
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как работает такая конструкция!?

Сообщение drBatty »

blackdevil писал(а):
09.01.2014 18:49
Уже 3 человека мозг на этом сломали.

уже три человека подряд пытаются нагуглить :?, вместо того, что-бы прочитать man...

На будущее: в bash'е конструкция

Код: Выделить всё

${что-то}

имеет смысл "строка из переменной"

конструкция

Код: Выделить всё

$(что-то)

имеет смысл "строка из команды"
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: