Get script options with getopts



Функция getoptsпозволяет определять варианты, данные команде. Следующий скрипт работает для любой комбинации вариантов a,f и z.

kahlan@solexp11$ cat options.ksh

#!/bin/ksh

while getopts ":afz" option;

do

case $option in

a)

echo received -a

;;

f)

echo received -f

;;

z)

echo received -z

;;

*)

echo "invalid option -$OPTARG"

;;

esac

done

Вот пример вывода верхнего скрипта. Вначале мы ввели корректные варианты, затем мы дважды ввели некорректные.

kahlan@solexp11$ ./options.ksh

kahlan@solexp11$ ./options.ksh -af

received -a

received -f

kahlan@solexp11$ ./options.ksh -zfg

received -z

received -f

invalid option -g

kahlan@solexp11$ ./options.ksh -a -b -z

received -a

invalid option -b

received –z

Вы также можете проверять варианты, которым необходим с аргументом, как показано в этом примере.

kahlan@solexp11$ cat argoptions.ksh

#!/bin/ksh

while getopts ":af:z" option;

do

case $option in

a)

echo received -a

;;

f)

echo received -f with $OPTARG

;;

z)

echo received -z

;;

:)

echo "option -$OPTARG needs an argument"

;;

*)

echo "invalid option -$OPTARG"

;;

esac

done

Вот пример вывода верхнего скрипта.

kahlan@solexp11$ cat argoptions.ksh

#!/bin/ksh

while getopts ":af:z" option;

do

case $option in

a)

echo received -a

;;

f)

echo received -f with $OPTARG

;;

z)

echo received -z

;;

:)

echo "option -$OPTARG needs an argument"

;;

*)

echo "invalid option -$OPTARG"

;;

esac

done

Get shell options with shopt.

Вы можете изменять значения переменных, контролируя поведение вариантной оболочки(optional shell), с помощью встроенной команды shopt.Пример, представленный ниже, сначала проверяет, задан ли вариант cdspell; он не задан. Следующая команда shopt задаёт значение, и третья команда shopt проверяет, действительно ли задан вариант. Теперь вы можете делать небольшие ошибки написания в команде cd. Мануал по bash содержит полный список вариантов.

paul@laika:~$ shopt -q cdspell ; echo $?

1

paul@laika:~$ shopt -s cdspell

paul@laika:~$ shopt -q cdspell ; echo $?

0

paul@laika:~$ cd /Etc

/etc

Глава 22 More scripting.

 

Eval.

Evalсчитывает аргументы как ввод для shell (в результате выполняются команды).

Это позволяет использовать значение переменной как переменную.

paul@deb503:~/test42$ answer=42

paul@deb503:~/test42$ word=answer

paul@deb503:~/test42$ eval x=\$$word ; echo $x

42

Как в bash, так и в Kornаргументы могут быть указаны.

kahlan@solexp11$ answer=42

kahlan@solexp11$ word=answer

kahlan@solexp11$ eval "y=\$$word" ; echo $y

42

Иногда eval необходим для корректного определения аргументов. Рассмотрим следующий пример, где команда date получает 1 параметр 1 week ago.

paul@debian6~$ date --date="1 week ago"

Thu Mar 8 21:36:25 CET 2012

Когда мы помещаем эту команду в переменную, выполнение этой переменной не происходит, пока мы не используем eval.

paul@debian6~$ lastweek='date --date="1 week ago"'

paul@debian6~$ $lastweek

date: extra operand `ago"'

Try `date --help' for more information.

paul@debian6~$ eval $lastweek

Thu Mar 8 21:36:39 CET 2012

22.2. (( )).

(( ))позволяет вычислить(оценить) числовое выражение.

paul@deb503:~/test42$ (( 42 > 33 )) && echo true || echo false

true

paul@deb503:~/test42$ (( 42 > 1201 )) && echo true || echo false

false

paul@deb503:~/test42$ var42=42

paul@deb503:~/test42$ (( 42 == var42 )) && echo true || echo false

true

paul@deb503:~/test42$ (( 42 == $var42 )) && echo true || echo false

true

paul@deb503:~/test42$ var42=33

paul@deb503:~/test42$ (( 42 == var42 )) && echo true || echo false

false

                                                                                                                                                      

Let.

Встроенная shell функция letзаставляет shell произвести вычисление арифметического выражения. Она будет возвращать 0, пока последнее арифметическое выражение не примет значение 0.

[paul@RHEL4b ~]$ let x="3 + 4" ; echo $x

7

[paul@RHEL4b ~]$ let x="10 + 100/10" ; echo $x

20

[paul@RHEL4b ~]$ let x="10-2+100/10" ; echo $x

18

[paul@RHEL4b ~]$ let x="10*2+100/10" ; echo $x

30

Shell также может осуществлять перевод между системами счисления.

[paul@RHEL4b ~]$ let x="0xFF" ; echo $x

255

[paul@RHEL4b ~]$ let x="0xC0" ; echo $x

192

[paul@RHEL4b ~]$ let x="0xA8" ; echo $x

168

[paul@RHEL4b ~]$ let x="8#70" ; echo $x

56

[paul@RHEL4b ~]$ let x="8#77" ; echo $x

63

[paul@RHEL4b ~]$ let x="16#c0" ; echo $x

192

 

Существует разница между прямым назначение переменной и использованием letдля вычисления арифметических выражений ( даже если они просто задают значение).

kahlan@solexp11$ dec=15 ; oct=017 ; hex=0x0f

kahlan@solexp11$ echo $dec $oct $hex

15 017 0x0f

kahlan@solexp11$ let dec=15 ; let oct=017 ; let hex=0x0f

kahlan@solexp11$ echo $dec $oct $hex

15 15 15

 

Case.

Иногда вы можете упростить множественные if с помощью конструкции case.

[paul@RHEL4b ~]$ ./help

What animal did you see ? lion

You better start running fast!

[paul@RHEL4b ~]$ ./help

What animal did you see ? dog

Don't worry, give it a cookie.

[paul@RHEL4b ~]$ cat help

#!/bin/bash

#

# Wild Animals Helpdesk Advice

#

echo -n "What animal did you see ? "

read animal

case $animal in

"lion" | "tiger")

echo "You better start running fast!"

;;

"cat")

echo "Let that mouse go..."

;;

"dog")

echo "Don't worry, give it a cookie."

;;

"chicken" | "goose" | "duck" )

echo "Eggs for breakfast!"

;;

"liger")

echo "Approach and say 'Ah you big fluffy kitty...'."

;;

"babelfish")

echo "Did it fall out your ear ?"

;;

*)

echo "You discovered an unknown animal, name it!"

;;

esac

[paul@RHEL4b ~]$

 

Shell functions.

Shell функции(function)могут быть использованы для логической группировки команд.

kahlan@solexp11$ cat funcs.ksh

#!/bin/ksh

function greetings {

echo Hello World!

echo and hello to $USER to!

}

echo We will now call a function

greetings

echo The end

Вот пример вывода этого скрипта с function.

kahlan@solexp11$ ./funcs.ksh

We will now call a function

Hello World!

and hello to kahlan to!

The end

Shell функция также может получать параметры.

kahlan@solexp11$ cat addfunc.ksh

#!/bin/ksh

function plus {

let result="$1 + $2"

echo $1 + $2 = $result

}

plus 3 10

plus 20 13

plus 20 22

Данный скрипт производит следующий вывод.

kahlan@solexp11$ ./addfunc.ksh

3 + 10 = 13

20 + 13 = 33

20 + 22 = 42


Дата добавления: 2018-04-05; просмотров: 367; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!