else
echo "$i:非闰年"
fi
done
案例13:计算等差数列之和
[root@master shell]# cat sum.sh
#!/bin/bash
#功能描述(Description):计算等差数列之和1+2+3+,...,+100
sum=0;i=1
while [ $i -le 100 ]
do
let sum+=$i
let i++
done
echo -e "1+2+3+,...,+100的总和为:\033[1;32m$sum\033[0m"
案例14:判断用户输入
[root@master shell]# cat case1.sh
#!/bin/bash
read -p "请输入redhat|fedora:" key
case $key in
redhat)
echo "fedora.";;
fedora)
echo "redhat.";;
*)
echo "必须输入redhat或fedora."
esac
[root@master shell]# cat case2.sh
#!/bin/bash
read -p "Are you sure?[y/n]:" sure
case $sure in
y|Y|yes|YES)
echo "you enter $sure,OK";;
n|N|NO|no)
echo "you enter $sure,OVER";;
*)
echo "error";;
esac
案例15:倒计时脚本
[root@kube-node1 ~]# cat clock倒计时.sh
#!/bin/bash
#功能描述(Description):通过tput定位光标,在屏幕特定位置打印当前的计算机时间.
#使用Ctrl+C中断脚本时显示光标.
trap 'tput cnorm;exit' INT EXIT
#定义数组变量,该数字有9个元素,每行是1个元素,每一个数字占用12列.
#0的数组坐标位置为0-11,1的数组坐标位置为12-23,依此类推.
number=(
' 0000000000 111 2222222222 3333333333 44 44 5555555555 6666666666 777777777 888888888 9999999999 '
' 00 00 11111 22 33 44 44 55 66 77 77 88 88 99 99 '
' 00 00 111111 22 33 44 44 55 66 77 77 88 88 99 99 '
' 00 00 11 22 33 44 44 55 66 77 88 88 99 99 '
' 00 00 11 2222222222 3333333333 44444444444 5555555555 6666666666 77 888888888 9999999999 '
' 00 00 11 22 33 44 55 66 66 77 88 88 99 '
' 00 00 11 22 33 44 55 66 66 77 88 88 99 '
' 00 00 11 22 33 44 55 66 66 77 88 88 99 '
' 0000000000 1111111111 2222222222 3333333333 44 555555555 6666666666 77 888888888 9999999999 '
)
#获取计算机时间,并分别提取个位和十位数字.
get_time(){
if [ -z "$1" ];then
echo "Usage:$0 倒计时分钟"
exit
fi
sec=$[$1*60]
}
#将数组中的某个数组打印出来.
print_time(){
#从第几个位置开始提取数组元素,0就从0开始,1就从12开始,2就从24开始,依此类推.
begin=$[$1*12]
for i in `seq 0 ${#number[@]}` #0-9的循环.
do
tput cup $[i+5] $2
echo -en "\033[91m${number[i]:$begin:12}\033[0m"
done
}
#依次打印小时,分钟,秒(个位和十位分别打印).
get_time $1
while :
do
[ $sec -lt 0 ] && exit
tput civis #隐藏光标.
tput clear
tput cup 3 16
echo "倒计时:"
for j in `seq ${#sec}`
do
num=`echo $sec | cut -c $j`
y=$[j*16]
print_time $num $y
done
let sec--
echo
sleep 1
done
案例16:贪吃蛇
[root@kube-node1 ~]# cat snake.sh
#!/bin/bash
declare -i x=5
declare -i y=5
declare -i len=4
declare -i x_arr=(1 2 3 4 5)
declare -i y_arr=(5 5 5 5 5)
declare -i res=0
dir='d'
level_arr=(0.3 0.2 0.1 0.01 0.005)
init() {
clear
echo -e "\033[0m"
echo -e "\033[?25l"
gen_food
}
set_show() {
# \33[y;xH设置光标位置
for ((i = 1; i < $len; i++)); do
echo -e "\033[47m\033[36m"
echo -e "\033[${y_arr[$i]};${x_arr[$i]}H*\033[0m"
done
echo -e "\033[42m\033[37"
echo -e "\033[${y_arr[$i]};${x_arr[$i]}H+\033[0m"
echo -e "\033[${randomy};${randomx}H$\033[0m"
for ((i = 0; i <= 60; i++)); do
echo -e "\033[27;${i}H#\033[0m"
echo -e "\033[0;${i}H#\033[0m"
done
for ((i = 0; i <= 27; i++)); do
echo -e "\033[${i};0H#\033[0m"
echo -e "\033[${i};60H#\033[0m"
done
echo -e "\033[16;65Hsnake:${x},${y}\033[0m"
echo -e "\033[17;65Hfood :${randomx},${randomy}\033[0m"
echo -e "\033[28;0H\033[43mscore:${res}\033[0m"
}
move() {
case $dir in
"w") y=$y-1 ;;
"s") y=$y+1 ;;
"a") x=$x-1 ;;
*