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

Я знаю, что подобные вопросы могут быть заданы по этому вопросу, но я совершенно новичок в сценариях оболочки и не могу найти помощь (возможно, я не в состоянии понять технические детали). У меня простой вопрос:

У меня есть простой скрипт (testscript.sh), которому нужно 3 аргумента, и я передаю их, используя три параметра и запускаю их следующим образом: (1-й аргумент - простая строка, 2-й - путь к имени файла и 3-й - имя папки)

./testscript.sh --para1 "somestring" --para2 "/home/android/test/abc.xml" --para3 "/home/android/outputfolder"

Теперь я хочу проверить, предоставил ли пользователь все входные значения re qd с соответствующими параметрами. Я имею в виду, что para3 должен содержать имя папки, para2 должен быть именем файла, а para1 должен быть строкой ИЛИ они должны быть в одинаковой последовательности.

Также я хотел бы подтвердить еще одну вещь: в настоящее время я ожидаю, что пользователь введет имя файла /home/android/test/abc.xml, заключенное в двойные кавычки, но если пользователь не заключит его в двойные кавычки и папку / имя файла содержит пробел, это может создать проблемы, так как я не могу получить полное имя файла / папки, включая пробелы, он ломается.

Пожалуйста, помогите. Thanx

2 ответа

Решение

Не могу точно соответствовать моим требованиям, но работаю так: изменил способ выполнения скрипта:

./testscript.sh -p "somestring" -i "/home/android/test/abc.xml" -o "/home/android/outputfolder"

& добавил проверки в скрипт как:

while getopts ":p:i:o:" opt; do
  case $opt in
    p)
      if [ "$OPTARG" = "abc" ] || [ "$OPTARG" = "xyz" ]; then
        somestring=$OPTARG
      else
        echo "Invalid parameter" >&2
        usage
      fi
      ;;
    i)
      if [ -e $OPTARG ] && [ -f $OPTARG ]; then 
    input=$OPTARG
       else
        echo "Input file doest'nt exist " >&2
        usage
      fi
      ;;
    o)
      if [ -e $OPTARG ]; then
    ouput=$OPTARG
      else
        echo "Output folder doest'nt exist " >&2
        usage
      fi
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

Но все же кто-нибудь найдет точное решение моего вопроса (с "--para1"), ответы приветствуются!

Это должно работать

#!/bin/sh

usage ()
{
  echo "usage: $0 STRING FILE DIRECTORY"
  exit
}

[ -n "$1" ] || usage
[ -e "$2" ] || usage
[ -d "$3" ] || usage

ссылка

Другие вопросы по тегам