рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдХрд┐рд╕ рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ
Bash
рдПрдХрдорд╛рддреНрд░ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдЭрдВрдбреЗ рдХреЗ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдХреЗ рд╕рд╛рде #!/bin/bash
рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╢реЗрд▓ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕реЗрдЯ set
рд▓рд┐рдП рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ bash <script_name>
рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рди рд╣реЛред
рдмреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдПрдХ рд╕реБрд╕рдВрдЧрдд рд╢реЗрд▓ рднрд╛рд╖рд╛ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рднреА рдорд╢реАрдиреЛрдВ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреА рд╣реИред
рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрди рд╢рд░реНрддреЛрдВ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЛрд▓рд╛рд░рд┐рд╕ рдПрд╕рд╡реАрдЖрд░ 4 рдкреИрдХреЗрдЬ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдмреЙрд░реНрди рд╢реЗрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╢реИрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рд╣реИ
рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЫреЛрдЯреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдпрд╛ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд░реИрдкрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдПрдХ рд╡рд┐рдХрд╛рд╕ рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реЗ Google рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╢реИрд▓реА рдЧрд╛рдЗрдб рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдзрд┐рдХ рдорд╛рдиреНрдпрддрд╛ рд╣реИред
рдХреБрдЫ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ:
- рдпрджрд┐ рдЖрдк рдЕрдХреНрд╕рд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рдбреЗрдЯрд╛ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢реЗрд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИред
- рдпрджрд┐ рдкреНрд░рджрд░реНрд╢рди рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рд╢реЗрд▓ рдирд╣реАрдВред
- рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ
${PIPESTATUS}
рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред - рдпрджрд┐ рдЖрдк рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ 100 рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЗрд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдврд╝ рд░рд╣реА рд╣реИрдВред рдмрд╛рдж рдореЗрдВ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реА рдкреБрдирд░реНрд▓реЗрдЦрди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗрдВред
рд╢реЗрд▓ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЙрд▓
рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди
рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рджреГрдврд╝рддрд╛ рд╕реЗ рдкрд╕рдВрджреАрджрд╛) рдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредред рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд┐рд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╢реЗрд▓ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд▓рдХреНрд╖реНрдпреЛрдВ рд╡рд╛рд▓реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд╛рдо рд╕реЗ рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦрд┐рдд рдирд╛рдо рдПрдХ рднрд╛рд╖рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рддреНрдпрдп рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
SUID / SGID
рдПрд╕рдпреВрдЖрдИрдбреА рдФрд░ рдПрд╕рдЬреАрдЖрдИрдбреА тАЛтАЛрд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдирд┐рд╖рд┐рджреНрдз рд╣реИрдВред
рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд SUID / SGID рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ bash SUID рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдмрдврд╝реА рд╣реБрдИ рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП sudo
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдкрд░реНрдпрд╛рд╡рд░рдг
рдПрд╕рдЯреАрдбреАрдЖрд░ рдмрдирд╛рдо рдПрд╕рдЯреАрдбреАрдЖрд░
рд╕рднреА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ STDERR
рдХреЛ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред
err() { echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $@" >&2 } if ! do_something; then err "Unable to do_something" exit "${E_DID_NOTHING}" fi
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░
рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред
рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдПрдХ рд╢реАрд░реНрд╖рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдХреЙрдкреАрд░рд╛рдЗрдЯ рд╕реВрдЪрдирд╛ рдФрд░ рд▓реЗрдЦрдХ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдлрд╝реАрдЪрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЙрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЛ рдЙрд╕рдХреА рд▓рдВрдмрд╛рдИ рдпрд╛ рдЬрдЯрд┐рд▓рддрд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ (рдФрд░ рдЖрддреНрдо-рд╕реБрдзрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛) рдХреЛ рдкрдврд╝рдХрд░ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдпрд╛ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рд╕рднреА рдлрд╝реАрдЪрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
- рд╕рдорд╛рд░реЛрд╣ рд╡рд┐рд╡рд░рдг
- рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд
- рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП
- рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░реЗрдВ рдЬреЛ рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдореЗрдВ рдорд╛рдирдХ рдирд┐рдХрд╛рд╕ рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдЬрдЯрд┐рд▓, рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ, рджрд┐рд▓рдЪрд╕реНрдк рдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВред
рдпрд╣ Google рдкрд░ рдХреЛрдб рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд░ рдмрд╛рдд рдкрд░ рдЯрд┐рдкреНрдкрдгреА рди рдХрд░реЗрдВред рдпрджрд┐ рдХреЛрдИ рдЬрдЯрд┐рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдпрд╛ рдЖрдк рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЫреЛрдЯреА рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВред
TODO рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рдХреЛрдб рдХреЗ рд▓рд┐рдП TODO рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдЕрд╕реНрдерд╛рдпреА, рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдпрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╣реА рдирд╣реАрдВ рд╣реИред
рдпрд╣ C ++ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдХрдиреНрд╡реЗрдВрд╢рди рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред
TODO рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ TODO рд╢рдмреНрдж рдХреЛ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЛрд╖реНрдардХ рдореЗрдВ рдЖрдкрдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛ред рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдЯреАрдУрдбреАрдУ рддрддреНрд╡ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдмрдЧ / рдЯрд┐рдХрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рднреА рдмреЗрд╣рддрд░ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдпрджреНрдпрдкрд┐ рдЖрдкрдХреЛ рдЙрд╕ рд╢реИрд▓реА рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╣реИ, рдХрд┐рд╕реА рднреА рдирдП рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЗрдВрдбреЗрдВрдЯ
рдЗрдВрдбреЗрдВрдЯ 2 рд░рд┐рдХреНрдд рд╕реНрдерд╛рдиред рдХреЛрдИ рдЯреИрдм рдирд╣реАрдВред
рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдХреЗ рдмреАрдЪ рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рджреЛ рдЬрдЧрд╣ рд╣реИред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЯреИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрддрдорд╛рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд░рд╣реЗрдВред
рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рдВрдмрд╛рдИ рдФрд░ рдореВрд▓реНрдп рд▓рдВрдмрд╛рдИ
рдЕрдзрд┐рдХрддрдо рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ 80 рд╡рд░реНрдг рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ 80 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреА рд▓рд╛рдЗрдиреЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ here document
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд newline
ред рд╢рд╛рдмреНрджрд┐рдХ рдореВрд▓реНрдп рдЬреЛ 80 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдпрдереЛрдЪрд┐рдд рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрдорддрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬреЗрдВред
рдкрд╛рдЗрдкрд▓рд╛рдЗрди
рдпрджрд┐ рд╡реЗ рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд▓рд╛рдЗрди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЗрд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдкрд░ рд╣реЛ рдФрд░ рдЕрдЧрд▓реЗ рдЦрдВрдб рдХреЗ рд▓рд┐рдП 2 рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рдЗрдВрдбреЗрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ 'рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдВрдпреБрдХреНрдд рдХрдорд╛рди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред' рд╕рд╛рде рд╣реА '' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рддрд╛рд░реНрдХрд┐рдХ рдХрдиреЗрдХреНрд╢рди || рдФрд░ '&&'ред
рдЪрдХреНрд░
рдЬрдЧрд╣ ; do
; do
рдФрд░ ; then
; then
рдЙрд╕реА рд▓рд╛рдЗрди рдкрд░, while
рдпрд╛ рдЙрд╕рдХреЗ for
ред
рд╢реЗрд▓ рдореЗрдВ рдЪрдХреНрд░ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣ рд╣реИ ; then
; then
рдФрд░ ; do
рдПрдХ рд╣реА рд▓рд╛рдЗрди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ if
/ рдХреЗ for
/ while
ред else
рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреНрд▓реЛрдЬрд┐рдВрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЕрдкрдиреА рд▓рд╛рдЗрди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╢реБрд░реБрдЖрддреА рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рд▓рдВрдмрд╡рдд рд╕рдВрд░реЗрдЦрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
for dir in ${dirs_to_cleanup}; do if [[ -d "${dir}/${ORACLE_SID}" ]]; then log_date "Cleaning up old files in ${dir}/${ORACLE_SID}" rm "${dir}/${ORACLE_SID}/"* if [[ "$?" -ne 0 ]]; then error_message fi else mkdir -p "${dir}/${ORACLE_SID}" if [[ "$?" -ne 0 ]]; then error_message fi fi done
рдХреЗрд╕ рдХрд╛ рдмрдпрд╛рди
- 2 рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдкред
- рд╕рд┐рдВрдЧрд▓ рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдмрд╛рдж рдФрд░ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
;;
ред - рд▓рдВрдмреЗ рдпрд╛ рдмрд╣реБ-рдХрдорд╛рдВрдб рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ, рдХрд╛рд░реНрдпреЛрдВ рдФрд░
;;
рд╕рд╛рде рдХрдИ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ;;
рдЕрд▓рдЧ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ред
рдкрддреНрд░рд╛рдЪрд╛рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ case
рдФрд░ esac
рд╕реЗ рдПрдХ рд╕реНрддрд░ рдХрд╛ esac
ред рдмрд╣реБрд╕реНрддрд░реАрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрддрд░ рдкрд░ рд╕рдВрдХреЗрдд рд╣реЛрддреЗ рд╣реИрдВред рднрд╛рд╡реЛрдВ рдореЗрдВ рднрд╛рд╡ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреИрдЯрд░реНрди рдЦреБрд▓реЗ рдХреЛрд╖реНрдардХ рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ &;
рдФрд░ ;;&
рд╕рдВрдХреЗрддрди
case "${expression}" in a) variable="..." some_command "${variable}" "${other_expr}" ... ;; absolute) actions="relative" another_command "${actions}" "${other_expr}" ... ;; *) error "Unexpected expression '${expression}'" ;; esac
рд╕рд░рд▓ рдХрдорд╛рдВрдб рдХреЛ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛рдЗрди рдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ ;;
рдЬрдмрдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрдардиреАрдп рд╣реИред рдпрд╣ рдЕрдХреНрд╕рд░ рдПрдХрд▓-рдкрддреНрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЬрдм рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдЕрдкрдиреА рд▓рд╛рдЗрди рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЫреЛрдбрд╝ рджреЗрдВ, рдЕрдЧрд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ, рдлрд┐рд░ ;;
рдЦреБрдж рдХреА рд▓рд╛рдЗрди рдореЗрдВ рднреАред рдЬрдм рдпрд╣ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд░реЗрдЦрд╛ рд╣реЛ, рддреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рдорд╛рдкрди рдХреЛрд╖реНрдардХ рдХреЗ рдмрд╛рдж рдФрд░ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ;;
ред
verbose='false' aflag='' bflag='' files='' while getopts 'abf:v' flag; do case "${flag}" in a) aflag='true' ;; b) bflag='true' ;; f) files="${OPTARG}" ;; v) verbose='true' ;; *) error "Unexpected option ${flag}" ;; esac done
рдЪрд░ рд╡рд┐рд╕реНрддрд╛рд░
рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдХреНрд░рдо рдореЗрдВ: рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ; рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдЪрд░; "${var}"
"$var"
рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдЖрдБрдЦ рдХреЗ рд╕рд╛рдеред
рдпреЗ рдмрд▓реНрдХрд┐ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╖рдп рдЕрдирд┐рд╡рд╛рд░реНрдп рд╡рд┐рдирд┐рдпрдорди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИред рд╡реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдХреНрд░рдо рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред
- рдЙрд╕реА рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рдорд┐рд▓рддреА рд╣реИред
- рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рдЪрд░ рдбрд╛рд▓реЗрдВ, рдиреАрдЪреЗ рдХреЛрдЯреЗрд╢рди рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВред
рдЬрдм рддрдХ рдХрдбрд╝рд╛рдИ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рди рд╣реЛ рдФрд░ рдЧрд╣рд░реЗ рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рд╡рд░реНрдгреЛрдВ рдХреЛ рд╢реЗрд▓ / рдкреЛрдЬрд┐рд╢рдирд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рди рд░рдЦреЗрдВред
рдЕрдиреНрдп рд╕рднреА рдЪрд░ рдХреЗ рд▓рд┐рдП рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред
рдЙрджреНрдзрд░рдг
- рд╣рдореЗрд╢рд╛ рдЙрди рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд┐рдирдореЗрдВ рдЪрд░, рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдпрд╛ рд╢реЗрд▓ рдореЗрдЯрд╛рдЪреИрдХрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЛ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
- рдЙрди рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ рдЬреЛ "рд╢рдмреНрдж" рд╣реИрдВ (рдХрдорд╛рдВрдб рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рдкрде рдирд╛рдореЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд)
- рдХрднреА рднреА рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ рдЙрджреНрдзрд░рдг рди рджреЗрдВред
- рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рдореИрдЪ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
[[
ред "$@"
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ $*
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред
рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдБ
рдХрдорд╛рди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
рдмреИрдХрдЯрд┐рдХреНрд╕ рдХреЗ рдмрдЬрд╛рдп $(command)
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдиреЗрд╕реНрдЯреЗрдб рдмреИрдХрдЯрд┐рдХреНрд╕ рдХреЛ \
_ рдХреЗ рд╕рд╛рде рдЖрдВрддрд░рд┐рдХ рдЙрджреНрдзрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред $ (command)
рдкреНрд░рд╛рд░реВрдк рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдЬрд╛рдБрдЪ, [
рдФрд░ [[
[[ ... ]]
test
, рдпрд╛ /usr/bin/[
рддреБрд▓рдирд╛ [[ ... ]]
рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реИред
[[ ... ]]
рддреНрд░реБрдЯрд┐ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ [[
рдФрд░ ]]
, рдФрд░ [[ ... ]]
рдмреАрдЪ рдХреЛрдИ рдкрде рд╕рдВрдХрд▓реНрдк рдпрд╛ рд╢рдмреНрдж рдкреГрдердХреНрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ [ ... ]
рдирд╣реАрдВ рд╣реИред
рдорд╛рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ, рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдмреИрд╢ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдЦрд╛рд▓реА / рдЧреИрд░-рд░рд┐рдХреНрдд рдорд╛рди рдпрд╛ рдЦрд╛рд▓реА рдорд╛рди рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЖрдк рдЬреЛ рдЬрд╛рдБрдЪ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ -z
рдпрд╛ -n
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рднрд╛рд╡
рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рд╕реНрдкрд╖реНрдЯ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЪреВрдВрдХрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо -
рдЪрд░рд┐рддреНрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ ./*
рдмрдЬрд╛рдпред
eval
eval
рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрд╡рд▓ рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ рдореЗрдВ рдкрд╛рд░рд┐рдд рдЪрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рдЪрд░ рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдВрдЪрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд┐рдирд╛ред
рдореЗрдВ рдкрд╛рдЗрдк
рдЖрджреЗрд╢ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдпрд╛ рд▓реВрдк рдХреЗ for
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, while
рдкрд╛рдЗрдк рдореЗрдВред рдЪрд░ while
рдореЗрдВ рдмрджрд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдЕрднрд┐рднрд╛рд╡рдХ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдлреИрд▓рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд▓реВрдк рдХрдорд╛рдВрдб рдХреЛ рдПрдХ рдЙрдк-рд╢реЗрд▓ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
while
рдкрд╛рдЗрдк рдореЗрдВ рдПрдХ рдирд┐рд╣рд┐рдд рдЙрдк-рд╢реЗрд▓ рддреНрд░реБрдЯрд┐ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
last_line='NULL' your_command | while read line; do last_line="${line}" done
рдПрдХ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдЗрдирдкреБрдЯ рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдпрд╛ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ (рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ)ред
total=0
рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрдк-рд╢реЗрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЙрдк-рд╢реЗрд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ while
рд▓рд┐рдП рдмреИрд╢ рдмрдирд╛рддрд╛ рд╣реИред
total=0 last_file= while read count filename; do total+="${count}" last_file="${filename}" done < <(your_command | uniq -c)
рдРрд╕реЗ рдЫреЛрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдореВрд▓ рд╢реЗрд▓ рдореЗрдВ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рддрдм рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдЬрдм рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ "рдкрд╛рд░реНрд╕рд┐рдВрдЧ" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХрднреА-рдХрднреА рдЬрд╛рдЧ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рддрдм рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореВрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЪрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди
рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо
рд╢рдмреНрджреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдирд┐рдЪрд▓рд╛ рдорд╛рдорд▓рд╛ред рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде ::
ред рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЗ рдмрд╛рдж рдмреНрд░реИрдХреЗрдЯ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдХреАрд╡рд░реНрдб рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред
рдпрджрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЕрд░рдХреЗрд╕ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдкреИрдХреЗрдЬ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкреИрдХреЗрдЬ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ ::
рдЕрд▓рдЧ рдХрд░реЗрдВред рдмреНрд░реИрдХреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо (Google рдкрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддрд░рд╣) рдХреЗ рд╕рдорд╛рди рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдФрд░ рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЗ рдмрд╛рдж "()" рдЖрддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреАрд╡рд░реНрдб рдЕрдирд╛рд╡рд╢реНрдпрдХ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреА рддреНрд╡рд░рд┐рдд рдкрд╣рдЪрд╛рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЪрд░ рдирд╛рдо
рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рд▓реВрдк рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд╛рдо рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдирд╛рдорд┐рдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
for zone in ${zones}; do something_with "${zone}" done
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдирд┐рд░рдВрддрд░ рдирд╛рдо
рд╕рднреА рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП, рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд▓рдЧрд╛рддрд╛рд░ рдФрд░ рд╕рдм рдХреБрдЫ рдЬреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдКрдкрд░реА рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╕реНрдерд┐рд░ рд░рд╣рддреА рд╣реИрдВ рдЬрдм рд╡реЗ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреА рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, getopts
рдорд╛рдзреНрдпрдо рд╕реЗ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, getopts
рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдПрдХ рд╢рд░реНрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдареАрдХ рдмрд╛рдж рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ declare
рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╛ export
рд╕рд┐рдлрд╛рд░рд┐рд╢ export
рдЬрд╛рддреА рд╣реИред
VERBOSE='false' while getopts 'v' flag; do case "${flag}" in v) VERBOSE='true' ;; esac done readonly VERBOSE
рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
рдирд┐рдЪрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЕрд▓рдЧ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рдеред
рдпрд╣ Google рдкрд░ рдХреЛрдб рдХреА рдЕрдиреНрдп рд╢реИрд▓рд┐рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ: maketemplate
рдпрд╛ make_template
, рд▓реЗрдХрд┐рди make-template
ред
рдХреЗрд╡рд▓ рдЪрд░ рдкрдврд╝реЗрдВ
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝реЗрдВ рдпрд╛ declare -r
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
shell, . , , .
zip_version="$(dpkg --status zip | grep Version: | cut -d ' ' -f 2)" if [[ -z "${zip_version}" ]]; then error_message else readonly zip_version fi
, , local
. .
, , local
. , .
, ; local
exit code .
my_func2() { local name="$1"
. .
, . , set , .
. .
main
, main
, , .
, main
. , ( , ). main:
main "$@"
, , , main
тАФ , .
.
$?
if
, .
:
if ! mv "${file_list}" "${dest_dir}/" ; then echo "Unable to move ${file_list} to ${dest_dir}" >&2 exit "${E_BAD_MOVE}" fi
, PIPESTATUS
, - , , PIPESTATUS
( , [
PIPESTATUS
).
tar -cf - ./* | ( cd "${DIR}" && tar -xf - ) return_codes=(${PIPESTATUS[*]}) if [[ "${return_codes[0]}" -ne 0 ]]; then do_something fi if [[ "${return_codes[1]}" -ne 0 ]]; then do_something_else fi
shell , .
, bash, ( , sed
).
:
рдирд┐рд╖реНрдХрд░реНрд╖
.
рдХреГрдкрдпрд╛ C ++ рдореИрдиреБрдЕрд▓ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдкрд╛рд░реНрдЯрд┐рдВрдЧ рд╡рд░реНрдбреНрд╕ рд╕реЗрдХреНрд╢рди рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд┐рдирдЯ рд▓реЗрдВ ред