该收收心了,再进步一点点
10.1九九乘法口诀
for i in $(seq 1 10)
do
for j in $(seq 1 $i)
do
echo -n "$j*$i=$(($i*$j)) "
done
echo
done
输出:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
1*10=10 2*10=20 3*10=30 4*10=40 5*10=50 6*10=60 7*10=70 8*10=80 9*10=90 10*10=100
先回顾一下for循环
10.2 批量修改文件名
ls
for i in $(ls *.$1)
do
mv $i ${i%.*}.$2
done
ls
输出:
tianjain@tianjain-TM1701:~/lianxi$ ./hello.sh txt doc
1.txt.txt 2.txt.txt hello.sh hello.txt.txt
1.txt.doc 2.txt.doc hello.sh hello.txt.doc
这个脚本挺有用可以收藏
10.3查看连接本机的ip
#!/bin/bash
netstat -atn | awk '{print $5}' | awk '{print $1}' | sort -nr |uniq
netstat -atn 查看本机所有连接状态
sort -nr 排序
uniq删除重复的,并统计次数
10.4打印国际象棋棋盘
#!/bin/bash
for i in {1..8}
do
#echo $i
for j in {1..8}
do
sum=$((i+j))
if [ $((sum%2)) -eq 0 ];then
echo -ne "\033[46m \033[0m"
else
echo -ne "\033[47m \033[0m"
fi
done
echo
done
输出
两个嵌套循环,设定八行八列,用i和j的和来判断区块的颜色
echo -ne 打印色块,每打印一个大循环换行一次
10.5判断数据类型
#!/bin/bash
read -p "输入一个字符" key
case "$key" in
[a-z]|[A-Z]*)
echo "字母"
;;
[0-9]*)
echo "数字"
;;
*)
echo "空格,功能键或者其他控制字符"
esac
输出
tianjain@tianjain-TM1701:~/lianxi$ ./hello.sh
输入一个字符23
数字
tianjain@tianjain-TM1701:~/lianxi$ ./hello.sh
输入一个字符as
字母
tianjain@tianjain-TM1701:~/lianxi$ ./hello.sh
输入一个字符
空格,功能键或者其他控制字符
tianjain@tianjain-TM1701:~/lianxi$
主要看一下case的用法
10.6 数字进度条
#!/bin/bash
for i in $(seq 1 100)
do
echo -e "\033[6;8H["
echo -e "\033[6;9H$i%"
echo -e "\033[6;13H]"
sleep 0.1
done
输出
tianjain@tianjain-TM1701:~/lianxi$ ./hello.sh
[100%]
echo -e 选项后,可以指定参数H,设定需要打印的内容位置,第几行第几列
10.7制作一个简易的计算器
#!/bin/bash
if [ $# -ne 3 ];then
echo "你给的参数应该是3个"
exit
fi
if_number(){
n1="echo $1 | sed 's/[a-zA-Z]//g'"
if [ -z "$n1" ];then
echo "$1不是数字"
exit
fi
}
if_number $1
if_number $3
case $2 in
+)
echo $(($1+$3)) | bc
;;
-)
echo $(($1-$3)) | bc
;;
x)
echo "$(($1*$3))" | bc
;;
/)
echo "scale=2;$(($1/$3))" | bc
;;
*)
echo "你给的格式不对,只能给出,+,-,*,/"
;;
esac
输出
tianjain@tianjain-TM1701:~/lianxi$ ./hello.sh 2 + 2
4
tianjain@tianjain-TM1701:~/lianxi$ ./hello.sh 2 - 2
0
tianjain@tianjain-TM1701:~/lianxi$ ./hello.sh 2 x 2
4
tianjain@tianjain-TM1701:~/lianxi$ ./hello.sh 2 / 2
1
只能整数运算,小数格式会有问题
10.8 计算和,输入一个数计算从1到它的和,并排除字符,小数,负数。
#!/bin/bash
sum=0
while [ 0 ]
do
read -p "请输入一个数字" key
#echo $key
num=$(echo $key | grep "[0-9]\+")
nums=$(echo $key | grep ".\+\..\+")
#echo $num
if [ -n "$num" ];then
if [ -z $nums ];then
if [ $key -gt 1 ];then
for i in $(seq 1 $key)
do
sum=$(($i+$sum))
done
echo "数字之和为 $sum"
break
else
echo -e "请输入大于1的数 \n"
fi
else
echo -e "请输入整数 \n"
fi
else
echo -e "请输入数字 \n"
fi
done
看输出:
tianjain@tianjain-TM1701:~/lianxi$ ./hello.sh
请输入一个数字fangfang
请输入数字
请输入一个数字2.3
请输入整数
请输入一个数字-11
请输入大于1的数
请输入一个数字100
数字之和为 5050
tianjain@tianjain-TM1701:~/lianxi$
分别用正则匹配,并排除,可以参考前几章,正则的用法