ЁЯФБ рдзрдбрд╛ 06 тАФ Conditions рдЖрдгрд┐ loops: рдХреЗрдЕрд░рдЯреЗрдХрд░рдЪреЗ рдирд┐рд░реНрдгрдп
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 06 ┬╖ рдкреБрдвреЗ: lesson-07-functions-arguments
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ06. рдлрд╛рдЯреЗ рдШреЗрдгреЗ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдкреБрдиреНрд╣рд╛ рдХрд░рдгреЗ тАФ рдЖрдгрд┐ shell рдЪреЗ logic рдЗрддрд░ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖реЗрдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реЗ рдХрд░рдгрд╛рд░реА рдЧреЛрд╖реНрдЯ.
- bin/school.sh тАФ
valid_class,if grep -q,mainрдордзрд▓рд╛case,while [[ $# -gt 0 ]]рд╣рд╛ flags рдЪрд╛ loop
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдХреЗрдЕрд░рдЯреЗрдХрд░рдХрдбреЗ "true" рдЖрдгрд┐ "false" рдирд╕рддрд╛рдд. рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ exit codes рдЕрд╕рддрд╛рдд: 0 рдиреЗ рд╕рдВрдкрдгрд╛рд░рд╛
command рдореНрд╣рдгрдЬреЗрдЪ "рд╣реЛрдп". рдореНрд╣рдгреВрди if grep -q "^Zoya," register.csv рдореНрд╣рдгрдЬреЗ "grep рд▓рд╛
рддреА рд╕рд╛рдкрдбрд▓реА рддрд░". [[ тАж ]] рд╣рд╛ рдПрдХ command рдЖрд╣реЗ рдЬреНрдпрд╛рдЪреЗ рдПрдХрдЪ рдХрд╛рдо рдореНрд╣рдгрдЬреЗ рдХрд╛рд╣реАрддрд░реА рддрдкрд╛рд╕рдгреЗ рдЖрдгрд┐
0 рдХрд┐рдВрд╡рд╛ 1 рдиреЗ exit рд╣реЛрдгреЗ. Loops рд╕реБрджреНрдзрд╛ рддрд╕реЗрдЪ: command рд╣реЛрдп рдореНрд╣рдгрдд рд░рд╛рд╣рддреЛ рддреЛрдкрд░реНрдпрдВрдд while
рдЪрд╛рд▓реВ рд░рд╛рд╣рддреЛ; for рдПрдХрд╛ рдпрд╛рджреАрддреВрди рдлрд┐рд░рддреЛ. cmd && next рдлрдХреНрдд рд╣реЛрдп рд╡рд░ next рдЪрд╛рд▓рд╡рддреЛ; cmd || other
рдлрдХреНрдд рдирд╛рд╣реА рд╡рд░.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart TD
C["grep -q '^Zoya,' register"] -->|exit 0| Y["then: already enrolled"]
C -->|exit 1| N["else: append the row"]
тЭУ рдХрд╛рдп
if cmd; then тАж; elif cmd; then тАж; else тАж; fiтАФ рдХреЛрдгрддрд╛рд╣реА command рдирд┐рд░реНрдгрдп рдШреЗрддреЛ.- Tests:
[[ -f file ]]рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗ ┬╖[[ -d dir ]]┬╖[[ -z "$s" ]]рд░рд┐рдХрд╛рдореЗ ┬╖[[ -n "$s" ]]рд░рд┐рдХрд╛рдореЗ рдирд╛рд╣реА ┬╖[[ "$a" == "$b" ]]┬╖[[ $n -gt 3 ]]┬╖[[ "$s" == *.csv ]]pattern ┬╖[[ "$s" =~ ^[0-9]+$ ]]regex. [ ]рд╣рд╛ рдЬреБрдирд╛ portable test рдЖрд╣реЗ (quotes рд▓рд╛рдЧрддрд╛рдд, patterns рдирд╛рд╣реАрдд);[[ ]]рд╣рд╛ bash рдЪрд╛ рдЬрд╛рд╕реНрдд рд╕реБрд░рдХреНрд╖рд┐рдд test рдЖрд╣реЗ.case "$x" in a|b) тАж;; *.csv) тАж;; *) тАж;; esac.for x in a b c┬╖for f in *.csv┬╖for i in $(seq 1 5)┬╖for ((i=0;i<5;i++))┬╖while read -r line; do тАж; done < file┬╖break┬╖continue.cmd && ok || fallbackтАФ рдЕрдЧрджреА if/else рдирд╛рд╣реА (okfail рдЭрд╛рд▓рд╛ рддрд░fallbackрд╕реБрджреНрдзрд╛ рдЪрд╛рд▓рддреЛ).
ЁЯдФ рдХрд╛
рдкреНрд░рддреНрдпреЗрдХ deploy script рдореНрд╣рдгрдЬреЗ "health check pass рдЭрд╛рд▓рд╛ рддрд░ рдкреБрдвреЗ рдЪрд▓рд╛; рдирд╛рд╣реАрддрд░ roll
back рдХрд░рд╛". рдкреНрд░рддреНрдпреЗрдХ batch job рдореНрд╣рдгрдЬреЗ "рдкреНрд░рддреНрдпреЗрдХ file рд╕рд╛рдареА". exit-code рдЪреЗ model рдиреАрдЯ
рд╕рдордЬрд▓реЗ рдХреА set -e (рдзрдбрд╛ 08) рддреБрдордЪреНрдпрд╛ рдЕрдкреЗрдХреНрд╖реЗрдкреНрд░рдорд╛рдгреЗ рд╡рд╛рдЧрддреЛ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
valid_class() { [[ " $CLASSES " == *" $1 "* ]]; } тАФ рдПрдХ function рдЬреНрдпрд╛рдЪрд╛ рдирд┐рдХрд╛рд▓
рдореНрд╣рдгрдЬреЗ test рдЪрд╛ exit code. main case рдиреЗ рдХрд╛рдо рд╡рд╛рдЯрддреЛ. cmd_list
while [[ $# -gt 0 ]] тАж shift 2 рдиреЗ flags рдЦрд╛рддреЛ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
if bin/school.sh list 2>/dev/null | grep -q Aishwarya; then echo "enrolled"; else echo "not enrolled"; fi
for c in 3A 3B 9Z; do bin/school.sh list --class "$c" >/dev/null 2>&1 && echo "$c: ok" || echo "$c: nothing"; done
while read -r line; do echo "row: $line"; done < <(tail -n +2 data/register.csv)
[[ "grade.csv" == *.csv ]] && echo "a csv"
n=0; for f in bin/*.sh; do n=$((n+1)); done; echo "$n scripts"
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
enrolled; 3A: ok, 3B: ok, 9Z: ok (рд░рд┐рдХрд╛рдорд╛ рд╡рд░реНрдЧ рд╕реБрджреНрдзрд╛ header рджрд╛рдЦрд╡рддреЛ
тАФ exit 0 тАФ рд╣реА design рдЪреА рдирд┐рд╡рдб рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреА рдЖрд╣реЗ); рдкрд╛рдЪ row: рдУрд│реА;
a csv; 3 scripts.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рддреБрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛рд╣реА command рдЪреНрдпрд╛ рдпрд╢рд╛рд╡рд░ рдлрд╛рдЯреЗ рдШреЗрдК рд╢рдХрддрд╛ рдЖрдгрд┐ loop рдХрд░реВ рд╢рдХрддрд╛, рдЖрдгрд┐ рдЦрд▒реНрдпрд╛ CLI рдЪрд╛
case/while рд╕рд╛рдВрдЧрд╛рдбрд╛ рд╡рд╛рдЪреВ рд╢рдХрддрд╛.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
xрд░рд┐рдХрд╛рдорд╛ рдЕрд╕рддрд╛рдирд╛if [ $x == 5 ]: syntax error. quote рдХрд░рд╛, рдХрд┐рдВрд╡рд╛[[ ]]рд╡рд╛рдкрд░рд╛.for f in $(ls): spaces рд╡рд░ рддреБрдЯрддреЛ; glob рд╡рд╛рдкрд░рд╛.for line in $(cat f)рдиреЗ file рд╡рд╛рдЪрдгреЗ: рдкреНрд░рддреНрдпреЗрдХ space рд╡рд░ рддреБрдЯрддреЗ;while read -rрд╡рд╛рдкрд░рд╛.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ:
until curl -sf /health; do sleep 2; doneрд╣рд╛ рд╣рдЬрд╛рд░реЛ deploy scripts рдордзрд▓рд╛ readiness wait рдЖрд╣реЗ тАФ exit code рд╡рд░рдЪрд╛ рдПрдХ loop, рдмрд╛рдХреА рдХрд╛рд╣реА рдирд╛рд╣реА.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 07 тАФ functions рдЖрдгрд┐ arguments: рдирд╛рд╡ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рджрд┐рдирдЪрд░реНрдпрд╛, рдЖрдгрд┐ рдЦрд▒реНрдпрд╛ script рдЪрд╛ рд╕рд╛рдВрдЧрд╛рдбрд╛.