Передать аргумент скрипта в команду awk

Помимо опции PAM, есть также возможность использования логов. Сейчас я перешел с Fedora на Slackware, поэтому точные файлы могут быть неверными, но если поставить что-то вроде этого:

#!/bin/bash

if [ -f /tmp/erlogin ] ; then
    oldvalue=$(cat /tmp/erlogin)
    newvalue=$(grep 'invalid password' /var/log/secure|wc -l)
    if [ $((newvalue-oldvalue)) -gt 3 ] ; then
        shutdown -h now
    fi
fi
grep 'invalid password' /var/log/secure|wc -l> /tmp/erlogin

И так каждые 10 минут или около того.

0
25.09.2020, 04:44
1 ответ

Обратите внимание, что вы можете значительно упростить awk. Действие по умолчанию, если выражение оценивается как true, заключается в печати текущей строки. Так что это делает то же самое:

awk -F'|' < filename '$1 == "string"'

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

#/bin/sh

if [ $# -lt 1 ]; then
  echo "At least one argument is required"
  exit
fi

## Allow the script to get the filename from the 2nd argument, 
## default to 'filename' if no second argument is given
file=${2:-filename}

awk -F'|' -v str="$1" '$1 == str' "$file"
5
18.03.2021, 23:02

Теги

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