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