рдЦреИрд░, рдЧреЗрдЯрдЕрдк рдкрд░ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдиреЛрдЯ

рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдФрд░ рдпрд╣рд╛рдБ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рд╢реНрд░рдорд╕рд╛рдзреНрдп рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЖ рд╕рдХрддрд╛ рдерд╛

#!/bin/bash function check_arg(){ if [[ $2 == -* ]]; then echo "Option $1 requires an argument" >&2 exit 1 fi } function parse_param() { if [ -z "$1" ];then echo "Empty list of options" >&2 exit 1 fi while getopts ":np:" opt; do case $opt in p) check_arg "-p" "$OPTARG" echo "-p(param) was triggered, Parameter: '$OPTARG'" ;; n) echo "-n(no param) was triggered" ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument (getopts)" >&2 exit 1 ;; esac done } parse_param "$@" 

рдФрд░ рдпрд╣рд╛рдБ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
 [bash]$ ./test.sh Empty list of option [bash]$ ./test.sh -m Invalid option: -m [bash]$ ./test.sh -n -n(no param) was triggered [bash]$ ./test.sh -n -p -n(no param) was triggered Option -p requires an argument (getopts) [bash]$ ./test.sh -p -n Option -p requires an argument [bash]$ ./test.sh -p"1 2 3" -p(param) was triggered, Parameter: '1 2 3' 

рдореИрдВрдиреЗ рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рд▓рд┐рдЦрд╛? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рдВрднрд╡рддрдГ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЪрд┐рддреНрд░рд┐рдд рд╣реИред рдЕрднреА рд╕рдордЭрд╛рдКрдВрдЧрд╛ред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдореИрдВ рдЗрд╕ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдУрд░ рдмрдврд╝рд╛, рдореБрдЭреЗ рдЙрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрдИ рдмрд╛рд░ рдЧреЗрдЯрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛, рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЙрд╕ рд░реЗрдХ рдХреЗ рдиреАрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдореИрдВ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЙрдард╛ рдерд╛, рдФрд░ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд▓рд╛рдпрд╛, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЧреЗрдЯрдЯреЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ред
рдХрд╛рд░реНрдп рдореЗрдВ рдЧреЗрдЯрдЕрдк

рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдЭреВрда рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ рдЧрд▓рдд рддрд░реАрдХреЗ
 parse_param $1 $2 $3 parse_param "$1" "$2" "$3" 

рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ
 [bash]$ ./test.sh -p"1 2 3" 

рдлрд┐рд░ рд╡реЗ parse_param тАУp 1 2 3 рдХреЗ рд░реВрдк рдореЗрдВ parse_param рдлрд╝рдВрдХреНрд╢рди рддрдХ рдкрд╣реБрдВрдЪреЗрдВрдЧреЗ, рдЬреЛ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред
рддрд░реНрдХ-рд╡рд┐рддрд░реНрдХ рд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдм рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛
  :) echo "Option -$OPTARG requires an argument (getopts)" >&2 exit 1 ;; 

рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░, $ OPTARG рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдЧреА, рдЬреЛ рдЧреЗрдЯрдЯреЙрдкреНрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХрд╛рдлреА рдорд╛рдиреНрдп рд╣реИред
рддреЛ рдЗрд╕реЗ рдмрд╕ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд░реЗрдВ
 parse_param "$@" 

рддрд░реНрдХ рдФрд░ рддрд░реНрдХ рдЬрд╛рдБрдЪ рдХреЗ рд╡рд┐рдХрд▓реНрдк

рдПрдХ рддрд░реНрдХ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ ":" рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛
  :) echo "Option -$OPTARG requires an argument (getopts)" >&2 exit 1 ;; 

рдпрд╣рд╛рдБ рдпрд╣ рднрдЯрдХрд╛ рдХреНрдпреЛрдВ рд╣реИ?
 function check_arg(){ if [[ $2 == -* ]]; then echo "Option $1 requires an argument" >&2 exit 1 fi } 

рдпрд╣рд╛рдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
 check_arg "-p" "$OPTARG" 

рдФрд░ рдРрд╕реА рдкреБрдХрд╛рд░ рдХрд░реЛ
 [bash]$ ./test.sh -p -n 

рдФрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "-n" тАУp рд╡рд┐рдХрд▓реНрдк рдХрд╛ рддрд░реНрдХ рдмрди рдЬрд╛рдПрдЧрд╛ред рдХреНрдпрд╛ рдЖрдкрд╕реЗ рдпрд╣реА рдЙрдореНрдореАрдж рд╣реИ? рдореИрдВ рдирд╣реАрдВ рдХрд░рддрд╛
рдЕрдорд╛рдиреНрдп рддрд░реНрдХ

рдЖрджреЗрд╢ рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЖрдк рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
  \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; 

рдЧреЗрдЯрдЯреЙрдкреНрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА ":" (рдЧреЗрдЯрдЯреЙрдкреНрд╕ " : np:") рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд╛рд╡рдирд╛рддреНрдордХ рдирд╣реАрдВ рдерд╛, рдФрд░ рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред


Source: https://habr.com/ru/post/In169133/


All Articles