Проверьте, что скрипт bash имеет ровно два аргумента, которые являются каталогами

Проверьте, что скрипт bash имеет ровно два аргумента, которые являются каталогами

Я пишу 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"

Связанный контент