Передача аргумента с многобуквенными флагами

Из systemd for Developers III: Revenge of the systemd мы находим:

Напечатанная строка в этом примере записывается в журнал с приоритетом журнала по умолчанию LOG_INFO1. Иногда полезно изменить приоритет журнала для такой печатной строки. Когда systemd анализирует STDOUT/STDERR службы она будет искать значения приоритета, заключенные в в начале каждой строки

А магические числа, очевидно, скопированы из syslog(3), так что

$ egrep 'INFO|ERR' /usr/include/sys/syslog.h | fgrep define
#define LOG_ERR     3   /* error conditions */
#define LOG_INFO    6   /* informational */
#define LOG_PERROR  0x20    /* log to stderr as well */

Вывод информационных сообщений или сообщений об ошибках, например, из TCL-скрипта будет выглядеть примерно так

#!/usr/bin/env expect
puts "<3>auuugh"
puts "<6>infos"

1
10.10.2016, 05:51
2 ответа

Если ваша проблема ограничена этими двумя вариантами, например:

usage() {
echo "tools.sh -id <id> -f <file>"
echo "note: order of options is not important"

}

if [ $# -ne 4 ]; then
    echo "Wrong number of arguments"
    usage   
    exit 1
fi

if [ "$1" = "-f" -a "$3" = "-id" ]; then
    file="$2"
    id="$4"
elif [ "$1" = "-id" -a "$3" = "-f" ]
then
    file="$4"
    id="$2"
else
    echo "Wrong syntax!"
    usage
    exit 1
fi

Затем вы можете проанализировать свой файл с помощью awk:

awk -F'|' -v id="$id" '$1==id{printf "ID: "$1"\nUser: "$2" "$3"\nGender: "$4"\nBorn: "$5"\nCreation Date: "$6"\nLocation IP: "$7"\nBrowser used: "$8"\n"}' $file

if [ $? -eq 0 ]
then
    exit 0
else
    echo "Something went \"woopsie!\""
    exit 1
fi

To чтобы сделать его лучше, вы также можете проверить, что id - это число и что people.dat действительно является файлом где-то в вашем PATH ...

1
27.01.2020, 23:47
awk -F\| 'NR==1{
for(j=1;j<=NF;j++)
Arr[j]=$j;
next
}
{
printf("./tool.sh -f file --edit");
for(i=1;i<=NF;i++)
printf("%s %s ",Arr[i],$i)
}
{
printf("\n")
}' persons.dat
0
27.01.2020, 23:47

Теги

Похожие вопросы