рдмреИрд╢ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рддрдХрдиреАрдХ

рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдмреИрд╢ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рд╣реЛрддрд╛ рд╣реИред рдиреАрдЪреЗ рдореИрдВ рдЗрд╕ рдХрд╛рдо рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЯрд┐рдкреНрд╕ рджреЗрддрд╛ рд╣реВрдВред

рдЯрд┐рдк 1

рдРрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рди рд▓рд┐рдЦреЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдкреВрдЫреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддреА рд╣реИрдВред рдРрд╕реА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреА рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ, рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрдЪреНрдЫреЗ" рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░, рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХред рдФрд░ рдЕрдЧрд░ рдЖрдкрдиреЗ рдЕрдЪрд╛рдирдХ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдорд┐рдбрдирд╛рдЗрдЯ рдХрдорд╛рдВрдбрд░ рдореЗрдВ рдЧрд▓рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЯреНрд░реИрдлрд┐рдХ рдирд┐рдпрдореЛрдВ рдХреА рддрд░рд╣ рд╣реИ - "рдЦреВрди рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред"

рдЯрд┐рдк 2

рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдХреБрдЫ рдбрд╛рд▓рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ:
read -n 1 -p " ,     (y/[a]): " AMSURE [ "$AMSURE" = "y" ] || exit echo "" 1>&2 
рдЗрдХреЛ рдХрдорд╛рдВрдб, рд╡реИрд╕реЗ, рдпрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ <y> рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкрдВрдХреНрддрд┐ рдлрд╝реАрдб рдирд╣реАрдВ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП, рдХреЛрдИ рднреА рдЕрдиреНрдп рдЖрдЙрдЯрдкреБрдЯ рдЙрд╕реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬрд╛рдПрдЧрд╛ред

рдЯрд┐рдк 3

рдпрд╣ рд╕рднреА рдХреА рдкреНрд░рдореБрдЦ рдЯрд┐рдк рд╣реИред рд╣рд░ рдмрд╛рд░ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдлрдВрдХреНрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдмреИрд╢ рдкрд░ рдХрдИ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдереЛрдбрд╝рд╛ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╕рдмреВрдд рдХреА рд╡рдЬрд╣ рд╕реЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдмреБрд▓рд╛рдирд╛ рдЬрд░реВрд░реА рд╕рдордЭрддрд╛ рд╣реВрдВред So.
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬреИрд╕реЗ рдХрд┐ myfunc.sh, рдФрд░ рдЗрд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, / usr / bin рдореЗрдВ рд░рдЦреЗрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдпрд╣ рди рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдмрд▓реНрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдЧрд┐рд░ рдЧрдП рдЭрдкрдЯреНрдЯрд╛ рдореЗрдВ рдХрдИ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд┐рдк 2 рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ, рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 myAskYN() { local AMSURE if [ -n "$1" ] ; then read -n 1 -p "$1 (y/[a]): " AMSURE else read -n 1 AMSURE fi echo "" 1>&2 if [ "$AMSURE" = "y" ] ; then return 0 else return 1 fi } 
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╢реНрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред рдпрджрд┐ рд▓рд╛рдЗрди рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪреБрдкрдЪрд╛рдк рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ (рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реА рд╣реИ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрд╡реЗрджрди рд╕рдВрднрд╡ рд╣реИ:
 myAskYN " ,    ?" || exit 
рдЖрдк рдПрдХ рдФрд░ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди myAskYNE рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдВрдд рдореЗрдВ рдИ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдкрд╕реА рдХреЛ рдирд┐рдХрд╛рд╕ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд░рд┐рдХреЙрд░реНрдб рднреА рд╕рд░рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛:
 myAskYNE " ,    ?" 
рд▓рд╛рдн рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ: рдП) рдЖрдк рдХрдо рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдмреА) рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЧ) рдЖрдк рдЯреНрд░рд╛рдЗрдлрд▓реНрд╕ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЙрдкрд╕рд░реНрдЧ "(y / [a]):" рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП (I рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ [a] рдХрд╛ рдЕрд░реНрде рд╣реИ рдХреЛрдИ, рдФрд░ рд╡рд░реНрдЧ рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ) рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ)ред
рдФрд░ рдпрд╣рд╛рдБ рдЖрдЦрд┐рд░реАред рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реА рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:
 #!/bin/bash a1=myfunc.sh ; source "$a1" ; if [ $? -ne 0 ] ; then echo " тАФ    $a1" 1>&2 ; exit 1 ; fi myAskYN " ,    ?" echo Run! 
рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдкреВрд░реА рдХреЙрд▓ рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд░рдЦрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдорд╛рдирдХ рдЪреАрдЬ рд╣реИ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрд░реНрдХ рдкрд░ рд╕реАрдзреЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рдЖрдзреА рд╕реНрдХреНрд░реАрди рддрдХ рдХреНрдпреЛрдВ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдП? рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╛рдо рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╛рдо рдХреЛ рдПрдХ рдмрд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреВрд╕рд░реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм, рдЗрди рддреАрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рдирд╛ рдкреБрд╖реНрдЯрд┐ рдХреЗ рдХрднреА рднреА рдХреБрдЫ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧреАред рдореИрдВ рдЗрд╕реЗ рдЖрдк рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВ myAskYN myAskYESNO рдмреБрд▓рд╛рдпрд╛ред

рдЯрд┐рдк 4

рд╣рдо рд╕рдлрд▓рддрд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдиреНрдпреВрдирддрдо рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
 sayWait() { local AMSURE [ -n "$1" ] && echo "$@" 1>&2 read -n 1 -p "(    )" AMSURE echo "" 1>&2 } cdAndCheck() { cd "$1" if ! [ "$(pwd)" = "$1" ] ; then echo "!!     $1 -  . ." 1>&2 exit 1 fi } checkDir() { if ! [ -d "$1" ] ; then if [ -z "$2" ] ; then echo "!!  $1 -  . ." 1>&2 else echo "$2" 1>&2 fi exit 1 fi } checkFile() { if ! [ -f "$1" ] ; then if [ -z "$2" ] ; then echo "!!  $1 -  . ." 1>&2 else echo "$2" 1>&2 fi exit 1 fi } checkParm() { if [ -z "$1" ] ; then echo "!!$2.  . ." 1>&2 exit 1 fi } 
рдпрд╣рд╛рдБ рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рдХреЗ рдмрд╛рдж рд▓рдЧрд╛рддрд╛рд░ 1> & 2 рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдБред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдпрдж рдХреБрдЫ рдореВрд▓реНрдпрд╡рд╛рди рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреАред рдФрд░ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд╣рдореЗрд╢рд╛ рд╕реНрдХреНрд░реАрди рдкрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рдпрд╛ рдЗрд╕реЗ рдХрдо рдкрд░ рднреЗрдЬрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдпреЛрдЬрди 1> рдФрд░ 2 рдХрд╛ рдорддрд▓рдм рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдПрдХ рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред рдФрд░ рдЬрдм рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
 my-script.sh > out.txt my-script.sh | less 
рдЗрд╕рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧрд▓рдд рдФрд░ рд╕реЗрд╡рд╛ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╡рд╣реА рдЬреЛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЯрд┐рдк 5

рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдмреИрд╢ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдорджрдж рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред рдмрд╕ рдЙрд╕ рдЪрд░ рдХреЛ рджрд░реНрдЬ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди рджрд░реНрдЬ рдХрд░реЗрдЧрд╛, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░, рдЗрд╕ рдЪрд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рд╡реИрд╕реЗ, рдПрдХ рдЪрд░ рдШреЛрд╖рдгрд╛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдиреНрдп рдЪрд░ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рд╣рд░ рдЬрдЧрд╣ рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ:
 curPath= #     ,    cRes= #        pYes= #  --yes,    
рдЕрдм рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
 input1() { local a1 if [ -n "$1" ] ; then read -p "$1" -sn 1 cRes else read -sn 1 cRes fi #    while [ "$2" = "${2#*$cRes}" ] ; do read -sn 1 cRes done echo $cRes 1>&2 } 
рдпрд╣рд╛рдБ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
 cat <<'EOF'   : ------------------------ a)  1 b)  2 .)  EOF input1 " : " "ab." echo " : $cRes" 
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдП, рдмреА рдФрд░ рдЕрд╡рдзрд┐)ред рдХреЛрдИ рдЕрдиреНрдп рдХреБрдВрдЬреА рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ рдЬрдм рджрдмрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдХреБрдЫ рднреА рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рд░рд┐рдЯрд░реНрди рдЪрд░ ($ cRes) рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рднреА рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рдкрддреНрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЯрд┐рдк 6

рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХреНрдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ? рдЙрдирдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЯрди рд╕рд╛рд╣рд┐рддреНрдп рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреА рджреГрд╖реНрдЯрд┐ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред
  1. рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЙрдирдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
  2. рдореБрдЭреЗ рдЗрд╕ рд╕рд░рд▓ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХрд▓-рдкрддреНрд░ рдорд╛рдкрджрдВрдбреЛрдВ (рдФрд░ рдЗрд╕рд▓рд┐рдП рдЧреЗрдЯрдЯреЙрдкреНрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдХреБрдЫ рдЕрдХреНрд╖рд░ рд╣реИрдВред рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП, -r рдХрд╛ рдорддрд▓рдм рд╣реИ, рджреВрд╕рд░реЗ рдХреА рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП, рдФрд░ рддреАрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╣рдЯрд╛рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ 2 рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ: a) --show-files-only, b) -sfo (рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ)ред рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рдЪрд╛рдмрд┐рдпрд╛рдБ рддреБрд░рдВрдд рдФрд░ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдпрд╛рдж рдХреА рдЬрд╛рддреА рд╣реИрдВред
  3. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдкрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рд▓рд┐рдЦрддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдорджрдж рдХрд░реЗрдЧрд╛ред
  4. рдЯрд┐рдк 2 рд╕реЗ рд╣рдо рдирд┐рдпрдо рд▓реЗрддреЗ рд╣реИрдВ: рдмрд┐рдирд╛ рдкреБрд╖реНрдЯрд┐ рдХреЗ рдХрднреА рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рди рдЪрд▓рд╛рдПрдВред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдкрд╡рд╛рдж рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ - рдпрджрд┐ --yes рдХреБрдВрдЬреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ (рдХреБрдВрдЬреА, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ)ред
  5. рдорд╛рди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдирд┐рдореНрди рдирд┐рдпрдо рд▓рдВрдмреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ: - рд╕реНрд░реЛрдд-рдлрд╝рд╛рдЗрд▓ = my.txt (рдмрд░рд╛рдмрд░ рдореЗрдВ рд╡рд░реНрддрдиреА), рдФрд░ рдЫреЛрдЯреА рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП: -sf my.txt (рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ)ред
рдЗрд╕ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
 while [ 1 ] ; do if [ "$1" = "--yes" ] ; then pYes=1 elif [ "${1#--source-file=}" != "$1" ] ; then pSourceFile="${1#--source-file=}" elif [ "$1" = "-sf" ] ; then shift ; pSourceFile="$1" elif [ "${1#--dest-file=}" != "$1" ] ; then pDestFile="${1#--dest-file=}" elif [ "$1" = "-df" ] ; then shift ; pDestFile="$1" elif [ -z "$1" ] ; then break #   else echo ":  " 1>&2 exit 1 fi shift done checkParm "$pSourceFile" "   " checkParm "$pDestFile" "   " if [ "$pYes" != "1" ] ; then myAskYNE " ,    ?" fi echo "source=$pSourceFile, destination=$pDestFile" 
рдпрд╣ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:рдпрд╣ рдореВрд▓ рднрд╛рдЧ рд╣реИ, рдЬрд┐рд╕реЗ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛрдбрд╝реЗрдВ:
 procParmS() { [ -z "$2" ] && return 1 if [ "$1" = "$2" ] ; then cRes="$3" return 0 fi return 1 } procParmL() { [ -z "$1" ] && return 1 if [ "${2#$1=}" != "$2" ] ; then cRes="${2#$1=}" return 0 fi return 1 } 
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрдХреНрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрдкрд╛рдЪреНрдп рд▓рдЧреЗрдЧрд╛:
 while [ 1 ] ; do if [ "$1" = "--yes" ] ; then pYes=1 elif procParmS "-sf" "$1" "$2" ; then pSourceFile="$cRes" ; shift elif procParmL "--source-file" "$1" ; then pSourceFile="$cRes" elif procParmS "-df" "$1" "$2" ; then pDestFile="$cRes" ; shift elif procParmL "--dest-file" "$1" ; then pDestFile="$cRes" elif [ -z "$1" ] ; then break #   else echo ":  " 1>&2 exit 1 fi shift done 
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдЪрдХреНрд░ рдХреЛ рдХреБрдВрдЬреА рдХреЗ рдирд╛рдо рдФрд░ рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рдЪрд░ рдирд╛рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗ рдмрд┐рдирд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рджреЛрд╣рд░рд╛рдП рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдкреВрд░реНрдгрддрд╛ рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ "рд╕реБрдзрд╛рд░" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, procParmS рдореЗрдВ, рдПрдХ рдЧреИрд░-рдЦрд╛рд▓реА рдорд╛рди рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЧрд▓рддреА рд╕реЗ рдЧрд┐рд░ рдЬрд╛рдПрдВред рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдпрд╣рд╛рдБ ред


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


All Articles