今天台湾地震了,日本台风又到,先来看下我今天给大家分享的良许哥的代码解读
首先不多说代码注释先给它噶好,几个必须的代码逻辑还是要的
先来今天题目#输入数字每三位,隔开
#!/bin/bash
#键入数字
read -p "please input a number" nu
#获取数字长度位数
n=`echo $nu |wc -L`
#把数字按照位数一个个空格隔开123 》》》1 2 3
for d in `echo $nu|sed 's/./& /g'`
do
#获取位数是否能被三整除
n2=$[$n%3]
#如果整除是三倍数
if [ "$n2" -eq 0 ]
then
#用逗号隔开否则输出
echo -n ",$d"
else
echo -n "$d"
fi
#下标右边移动位数从左往右
let n-=1
#隐藏开头最开始的逗号消失如,123123>>>123123
done | sed 's/^,//g'
解读这段代码你必须了解按位循环,这边按位循环for d in `echo $nu|sed 's/./& /g'`
do done
其次注意输出的时候判断完,首位会有逗号必须应用 | sed 's/^,//g'
第二题#输入两次数字,生成两数字之间序列
#!/bin/bash
#键入数字
read -p "please input a number:" n
#如果不是数字就提示非数字
if ! echo "$n" |grep "^[[:digit:]]*$"
then
echo "please input a number"
fi
#循环1到数字次数打印出来
for i in `seq 1 $n`
do
echo "$i"
done
#键入是否要继续y/n
read -p "if continue? y/n" c
#走case条件判断是否继续
case $c in
n|N)
exit
;;
y|Y)
#是继续键入新数字
read -p "please input a number:" n2
#过滤数字保留非数字
n3=`echo "$n2" | sed 's/[0-9]//g'`
#判断非数字部分是否有长度
if [ -n "$n3" ]
then
echo "please input a number"
exit
fi
#判断后键入的数字要大于前面数字
if [ "$n2" -le "$n" ]
then
echo "$n2 should granter than $n"
exit
fi
#输出从第一次键入的数字到第二次键入的数字之间的所有序列
for j in `seq $[$n+1] "$n2"`
do
echo "$j"
done
;;
*)
echo "error not a choice"
;;
esac
这题唯一可以看的重点是这个写法if ! echo "$n" |grep "^[[:digit:]]*$"
是否是数字的判断 ,其次是for和序列函数的用法seq