코드를 보는 방식이 마음에 들지 않아서 모든 주요 "청크"를 함수로 압축했습니다. (이렇게 하면 오류가 있는 경우 코드가 실행되지 않게 됩니다.) 이것이 나쁜 습관인지는 모르겠습니다. 코드는 다음과 같습니다(첫 번째 줄: bash-4.3
에 설치됨 /usr/local/bin/bash
).
#!/usr/local/bin/bash
cat /dev/null > out.txt
resetcolor() {
echo -ne "\e[0m"
}
color() {
resetcolor
if [ $# -eq 1 ]
then
echo -ne "\033[38;5;${1}m"
elif [ $2 == "b" ]
then
echo -ne "\033[1;38;5;${1}m"
fi
}
prob() {
x=$(echo "scale=4;($1/$c)" | bc)
y=$(echo "scale=2;$x*100" | bc)
if [[ ${y%??} == *".00"* ]] ; then echo "${y%?????}%"
elif [[ ${y#????} == "000" ]] ; then echo "${y%????}%"
elif [[ ${y#???} == "3300" ]] ; then echo "${y%?????}.33%"
elif [[ ${y#???} == "6600" ]] ; then echo "${y%?????}.67%"
else echo "${y%??}%"
fi
}
readmessage() {
if [ $# -eq 1 ]
then
c=$1
echo "Flipping coins..."
else
echo "Enter number of coins to flip..."
read c
echo "Flipping coins..."
fi
}
flip() {
< /dev/urandom LC_CTYPE=C gtr -dc HT | head -c $c | while read -n 1 ccoin
do
echo -n "$ccoin"
echo "$ccoin" >> out.txt
done
echo -e "\n"
}
stats() {
if (($c<10))
then
exit 1
else
co=$( < out.txt )
color 035
echo "Heads:"
h=`grep -o "H" <<<"$co" | wc -l`
color 047 b
echo $h
resetcolor
color 027
echo "Tails:"
color 045 b
t=`grep -o "T" <<<"$co" | wc -l`
echo $t
color 255 b
echo " "
echo "Experimental probability"
echo "Heads:"
prob $h
echo "Tails:"
prob $t
fi
}
###
readmessage $1
flip
stats
###
답변1
전적으로아니요이것은 나쁜 습관입니다. 함수를 사용하는 것은 코드를 여러 덩어리로 나누는 좋은 방법 중 하나입니다. 이를 통해 다음을 쉽게 수행할 수 있습니다.
- 어떤 코드 섹션이 활성화되어 있는지 확인하세요.
- 일부 코드 비활성화
- 코드의 어느 부분이 어떤 작업을 수행하는지 확인하세요. 레이블이 지정되어 있고 함수별로 코드의 나머지 부분과 명확하게 구분되어 있기 때문입니다.