第十篇 shell脚本练习

该收收心了,再进步一点点

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$ 

分别用正则匹配,并排除,可以参考前几章,正则的用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值