Заполнение SSD случайными данными для шифрования с помощью Dm-Crypt

Одна вещь, которую вы, кажется, ищете, - это синтаксический анализ командной строки. Приличный синтаксический анализ может быть выполнен с помощью корпуса в оболочке POSIX.

Следующий AWK вполне подходит для выполнения этого преобразования. Чтобы сделать это на месте, у вас есть две альтернативы: использовать GNU awk (с -i ), как предлагает Джон, или использовать временный файл. Ниже приведен пример использования mktemp , хотя mktemp не является POSIX , он присутствует практически в любой системе * nix

#!/bin/sh

while test $# -gt 0
do
    case "$1" in
      -f)
      file="$2"
      shift
      shift
      ;;
      --edit)
      id="$2"
      column="$3"
      value="$4"
      shift
      shift
      shift
      shift
      ;;
      *)
      echo "Usage:"
      echo "  $0 -f  --edit   "
      exit
      ;;
  esac
done
# debug
echo "edit [$file] in [$id] change column [$column] to [$value]"

tmpf=`mktemp`
awk -v FS="|" -v OFS="|" "/^$id/ { \$$column = \"$value\" }1" "$file" > "$tmpf"
mv "$tmpf" "$file"

Идея состоит в том, чтобы избежать правильных символов при передаче программа для awk. Предполагая, что приведенный выше сценарий называется script.sh , вы можете просто сделать:

./script.sh -f myfile --edit 1001 3 "It's a me Mario"

У этого все еще есть некоторые проблемы, которые я рассмотрю ниже, чтобы не кластеризовать его. Во-первых, вы также должны проверить наличие пустого числа аргументов:

if test $# -eq 0
then
    echo Usage
    exit
fi

И, во-вторых, использование простого mv иногда опасно. В частности, когда что-то идет не так, и скрипт не выводит результат. Всегда полезно добавить что-то подобное вокруг mv , которое перезапишет ввод:

if test -s "$tmpf"
then
    mv "$tmpf" "$file"
else
    echo Something went wrong
fi

2
17.12.2018, 00:04
0 ответов

Теги

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