鸡兔同笼
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
假设全部为鸡
[root@wenzi data]#vim chook_rabbit.sh
#!/bin/bash
head=$1
foot=$2
rabbit=$((($foot-$head*2)/2))
chook=$[$head-$rabbit]
echo rabbit is $rabbit
echo chook is $chook
[root@wenzi data]#bash chook_rabbit.sh 35 94
rabbit is 12
chook is 23
说明:
实现算术方式有 var=$((算术表达式))或 var=$[算术表达式],若嵌套则加入小括号,优先计算小括号内的。sum=$(((1+3)/3))等价于sum=$[(1+3)/3]
生成0-49间随机数
[root@wenzi data]#vim rd.sh
#!/bin/bash
echo "$[$RANDOM%50]"
[root@wenzi data]#bash rd.sh
3
[root@wenzi data]#bash rd.sh
49
[root@wenzi data]#bash rd.sh
21
[root@wenzi data]#bash rd.sh
5
说明:
生成0~x间随机数,即对x+1取余数
生成m~n间随机数,即对n+1+m取余数
判断合法IP
[root@wenzi data]#vim checkIP.sh
#!/bin/bash
ip=$1
if [[ "$ip" =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]];then
echo $ip is valid
else
echo $ip is invalid
fi
[root@wenzi data]#bash checkIP.sh 192.168.29.141
192.168.29.141 is valid
[root@wenzi data]#bash checkIP.sh 192.168.29.1411
192.168.29.1411 is invalid
[root@wenzi data]#bash checkIP.sh 00.168.29.141
00.168.29.141 is invalid
说明:
对个位数IP(范围:0~9)、十位数IP(范围:10~99)、百位数IP(范围:100~199和200~249和250~255)依次进行判断
[[ 判断式 ]]中 =~ 表示左侧字符串是否能够被右侧的拓展正则表达式所匹配
^指待查找的字符串(word)在行首;$指待查找的字符串(word)在行尾
[n1-n2]在括号内列出待查找的范围,[0-9]表示任意数字
|指逻辑上的或
[0-9]对个位数IP匹配;[1-9][0-9]对十位数IP匹配;1[0-9][0-9]与2[0-4][0-9]与
对个位数IP匹配:[0-9]
对十位数IP匹配:[1-9][0-9]
将个位与十位匹配规则合并即 [0-9]变为[1-9]?[0-9]
?指0个或一个的前一个字符
对百位数IP匹配:1[0-9][0-9]|2[0-4][0-9]|25[0-5] 合并为 1[0-9]{2}|2[0-4][0-9]|25[0-5]
\.使用转义符将.作为普通字符
()使用小括号将上述内容作为整体
{3}重复三次,匹配IP地址前三段
第四段IP无需以.分割
计算1+2+3+...+100的和
[root@wenzi data]#cat sum.sh
#!/bin/bash
sum=0
for i in {1..100};do
let sum+=i
done
echo "1+2+3+...+100的和为:$sum"
[root@wenzi data]#bash sum.sh
1+2+3+...+100的和为:5050
计算1到100内所有奇数之和
[root@wenzi data]#vim sumOdd.sh
#!/bin/bash
sumOdd=0
for i in {1..100..2};do
let sumOdd+=i
done
echo "从1到100所有奇数之和为:$sumOdd"
[root@wenzi data]#bash sumOdd.sh
从1到100所有奇数之和为:2500
[root@wenzi data]#vim oddSum.sh
#!/bin/bash
oddSum=0
for ((i=1;i<=100;i+=2))
do
let oddSum+=i
done
echo "从1到100所有奇数之和为:$oddSum"
[root@wenzi data]#bash oddSum.sh
从1到100所有奇数之和为:2500
九九乘法表
[root@wenzi data]#vim 9x9.sh
#!/bin/bash
for i in {1..9}
do
for j in `seq $i`
do
echo -e "${i}x${j}=$[i*j]\t\c"
done
#换行
echo
done
[root@wenzi data]#bash 9x9.sh
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
[root@wenzi data]#cat 9x9.sh
#!/bin/bash
for i in {1..9}
do
for j in $(seq `echo $[10-i]`)
do
echo -ne "${j}x`echo $[10-i]`=$[(10-i)*j]\t"
done
#换行
echo
done
[root@wenzi data]#bash 9x9.sh
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x4=4 2x4=8 3x4=12 4x4=16
1x3=3 2x3=6 3x3=9
1x2=2 2x2=4
1x1=1
说明:
seq n 指生成从1到n之间的整数
echo默认会在末尾添加换行符;-e指使用转义符\;\t是制表符,即Tab;\c是取消行末的换行符,不换行。
持续更新