Преобразуйте число для преобразовывания в шестнадцатеричную систему (в этом случае A
) и затем сделайте:
echo -en '\xA' > file
Когда Вы запустите этот скрипт без любых опций, getopt возвратит false, таким образом, он не введет цикл вообще. Это будет просто выпадающий к печати - этот ksh/zsh?
Если у Вас должна быть опция, Вы - лучший выбор, должен протестировать $name после цикла.
if [ -z "$name" ]
then
usage
exit
fi
Но удостоверьтесь $name
было пусто перед вызовом getopts
(как, возможно, был a $name
в среде оболочка, полученная на запуске) с
unset name
(прежде чем getopts
цикл)
getopts
обрабатывает опции в свою очередь. Это - его задание. Если пользователь, оказывается, не передает опции, первого вызова getopts
выходит из цикла с условием продолжения.
Если ни одна из опций не берет аргумент, значение OPTIND
указывает, сколько опций было передано. В целом, OPTIND
количество аргументов, которые являются опциями или аргументами опциям, в противоположность аргументам неопции (операнды).
while getopts …; do …; done
if [ $OPTIND -eq 1 ]; then echo "No options were passed"; fi
shift $((OPTIND-1))
echo "$# non-option arguments"
В любом случае Вы не пытаетесь определить, не было ли никаких опций, но ли ни один из name
- были переданы устанавливающие опции. Так проверяют если name
сброшен (и заботьтесь для сбрасывания его сначала).
bash sample.sh -abc file.txt
это дает - 1 non-option arguments
. как я узнаю, сколько опций было дано. (здесь 3)
– Hussain Tamboli
12.10.2012, 08:14
Если ваш сценарий должен получать аргументы опций в любом случае, поместите этот блок в начало (перед getops).
if [[ ! $@ =~ ^\-.+ ]]
then
#display_help;
fi
Блок проверяет, что строка параметров не начинается с символа -
, что указывает на то, что первый параметр не является аргументом опции.
Непосредственно перед блоком getopts
проверьте, равен ли $ 1
(первый аргумент / параметр, который вы передали в командной строке) пустой строке. Если это так, распечатайте сообщение об использовании и выйдите (или выполните некоторую функцию «без параметров», если вы анархист), в противном случае позвольте getopts
проанализировать параметры, как обычно.
Причина, по которой эта функция не включена в getopts, заключается в том, что вы уже можете выполнить это в bash с помощью «if-else». Пример:
if [[ $1 == "" ]]; then
Your_Usage_Function;
exit;
else
#parse options with getopts code block here;
fi
Имеет смысл?
Вы всегда должны инициализировать свои переменные перед их использованием! Это препятствует тому, чтобы уже -заданные переменные испортили ваш скрипт, и, кроме того, позволяет позже проверить статус, чтобы убедиться, что они были установлены правильно.
#getoptDemo.sh
usage()
{
echo "usage: <command> options:<w|l|h>"
}
name=false
while getopts wlh: option
do
case $option in
(w)
name='1';;
(l)
name='2';;
(h)
name='3';;
(*)
usage
exit;;
esac
done
if [[ $name == false ]]; then
usage();
exit 1;
fi
print 'hi'$name
no argument
условие с помощью удара. – Hussain Tamboli 11.10.2012, 11:59getopts
не имеет такого условия. То, что хуже, чем это, не может upvote Вы. – Hussain Tamboli 11.10.2012, 12:14