Я пишу bash-скрипт, который сравнивает два каталога, но я не уверен, как проверить условия.
Например, если пользователь вводит 1 аргумент вместо 2 (нам нужно 2, так как мы сравниваем два каталога), это должно выдать ошибку. Если оба аргумента допустимы, сравните каталоги и выведите в файл.
решение1
Обработка аргументов
Обработка аргументов, которые передаются через командную строку скрипта, так же проста, как и ниже. Допустим, у нас есть этот скрипт:
$ cat cmd.bash
#!/bin/bash
echo "arg1: $1"
echo "arg2: $2"
Теперь запустите без аргументов:
$ ./cmd.bash
arg1:
arg2:
С 1 аргументом:
$ ./cmd.bash hi
arg1: hi
arg2:
С 2 аргументами:
$ ./cmd.bash hi bye
arg1: hi
arg2: bye
Проверка аргументов
Затем вы можете проверить, являются ли аргументы 1 и 2 допустимыми каталогами или нет, а затем выйти или продолжить по мере необходимости. Поэтому мы вводим 2 проверки, чтобы увидеть, являются ли 2 аргумента каталогами или нет, если нет, то выходим.
$ cat cmd.bash
#!/bin/bash
[ -d "$1" ] || exit
[ -d "$2" ] || exit
[ $# == 2 ] || exit
echo "arg1: $1"
echo "arg2: $2"
Пример
Допустим, у нас есть эти каталоги.
$ mkdir d1 d2
$ ls -l
total 12
-rwxrwxr-x. 1 saml saml 89 Oct 14 23:13 cmd.bash
drwxrwxr-x. 2 saml saml 4096 Oct 14 23:14 d1
drwxrwxr-x. 2 saml saml 4096 Oct 14 23:14 d2
Если нам будет указано что-то иное, кроме двух каталогов, скрипт просто завершит работу.
$ ./cmd.bash hi bye
Если нам даны 2 каталога:
$ ./cmd.bash d1 d2
arg1: d1
arg2: d2
Если нам дано более 2 аргументов:
$ ./cmd.bash d1 d2 d3
Я оставлю сравнение двух каталогов вам. Для изучения Bash я бы направил вас по ссылке ниже для бесплатной онлайн-книги по Bash.
Рекомендации
решение2
Число аргументов находится впараметр$#
.
if [ $# -ne 2 ]; then
echo 1>&2 "Usage: $0 DIRECTORY1 DIRECTORY2"
exit 3
fi
Если вы хотите убедиться, что оба аргумента являются каталогами (а не другими типами файлов), проверьте их с помощью-d
.
Утилитаdiff
сравнивает два файла. С опцией -r
сравнивает каталоги рекурсивно.
diff -ru -- "$1" "$2"