实验1
实验要求:将一个点分十进制格式的IP地址转换成点分二进制格式。
创建脚本:
#!/bin/bash
#将一个点分十进制格式的IP地址转换成点分二进制格式
read -p "请输入IP地址:" ip
#借用一个临时变量先保存IFS的原始值
IFS_OLD=$IFS
#将"."设置为分隔符
IFS='.'
j=0
for num in $ip
do
sum=
for i in {1..8}
do
#除以2取余数
var=$[num%2]
#余数倒序排列
sum=$var$sum
num=$[num/2]
done
echo -n "$sum"
let j++
#在前3个字段后面加"."
if [ $j -le 3 ]
then
echo -n "."
fi
done
#用于换行
echo " "
#还原变量IFS的原始值
IFS=$IFS_OLD
执行脚本:
[root@localhost ~]# bash f09.sh
请输入IP地址:192.168.72.15
11000000.10101000.01001000.00001111
[root@localhost ~]# bash f09.sh
请输入IP地址:192.168.72.129
11000000.10101000.01001000.10000001
实验2
实验要求:写一个逛网上商城选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
创建脚本:
#!/bin/bash
#写一个逛网上商城选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户>是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#n代表去了几家店购物
n=1
#sum代表购物总额
sum=0
#只要不退出就会一直执行下去
while true
do
echo "欢迎来到第${n}家店铺"
read -p "是否进入看看?(yes/no)" doing
while [ "$doing" = "yes" ]
do
echo -e "1:衣服500元\n2:裤子400元\n3:鞋子350元\n4:帽子150元\n5:袜子50元\n6:放弃购物"
read -p "请选择你想购买的商品序号:" num
case $num in
1)
echo "衣服购买成功"
sum=$[sum+500]
;;
2)
echo "裤子购买成功"
sum=$[sum+400]
;;
3)
echo "鞋子购买成功"
sum=$[sum+350]
;;
4)
echo "帽子购买成功"
sum=$[sum+150]
;;
5)
echo "袜子购买成功"
sum=$[sum+50]
;;
6)
echo "放弃购买"
;;
*)
echo "输入有误"
esac
read -p "是否继续在本店购物?(yes/no)" doing
done
read -p "是否换一家店继续购物?(yes/no)" go
if [ "$go" = "yes" ]
then
let n++
else
break
fi
done
echo "您一共逛了 ${n} 家店"
echo "您一共消费了 ${sum} 元"
执行脚本:
[root@yuji sh]# bash yan2.sh
欢迎来到第 1 家店铺
是否进入看看?(yes/no)yes
1:衣服500元
2:裤子400元
3:鞋子350元
4:帽子150元
5:袜子50元
6:放弃购物
请选择你想购买的商品序号:5
袜子购买成功
是否继续在本店购物?(yes/no)no
是否换一家店继续购物?(yes/no)yes
欢迎来到第 2 家店铺
是否进入看看?(yes/no)yes
1:衣服500元
2:裤子400元
3:鞋子350元
4:帽子150元
5:袜子50元
6:放弃购物
请选择你想购买的商品序号:3
鞋子购买成功
是否继续在本店购物?(yes/no)no
是否换一家店继续购物?(yes/no)no
您一共逛了 2 家店
您一共消费了 400 元
实验3
实验要求:输出环境变量PATH的目录所包含的所有可执行文件。
创建脚本:
#!/bin/bash
#输出环境变量PATH的目录所包含的所有可执行文件
IFS_OLD=$IFS
IFS=$IFS':'
for dir in $PATH
do
for file in $(find $dir -type f)
do
if [ -x $file ]
then
echo "$file 有执行权限"
fi
done
done
IFS=$IFS_OLD
实验4
实验要求:
首先执行mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt。 之后输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件。
创建脚本:
[root@localhost sh]# mkdir -p /root/bin/aa/bb/cc/dd
[root@localhost sh]# touch /root/bin/aa/bb/cc/dd/abc.txt
[root@localhost sh]# vim yan4.sh
#!/bin/bash
#mkdir -p /root/bin/aa/bb/cc/dd
#touch /root/bin/aa/bb/cc/dd/abc.txt
#输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
IFS_OLD=$IFS
IFS=$IFS':'
for fd in $PATH
do
#查找所有目录文件和普通文件
files=$(find $fd -type f -o -type d)
for a in $files
do
#判断是否为目录,是则输出
if [ -d $a ]
then
echo "$a 为目录"
#判断是否为普通文件且没有执行权限,满足条件则输出
elif [ -f $a ]&&[ ! -x $a ]
then
echo "$a 文件没有执行权限"
fi
done
done
IFS=$IFS_OLD
执行脚本:
[root@yuji sh]# bash yan4.sh
/usr/local/sbin 为目录
/usr/local/bin 为目录
/usr/sbin 为目录
/usr/bin 为目录
/root/bin 为目录
/root/bin/aa 为目录
/root/bin/aa/bb 为目录
/root/bin/aa/bb/cc 为目录
/root/bin/aa/bb/cc/dd 为目录
/root/bin/aa/bb/cc/dd/abc.txt 文件没有执行权限
实验5
实验要求:输出菱形,并实现可通过输入数值的大小来伸缩菱形的大小。
创建脚本:
[root@localhost /sh]# vim yan5.sh
#!/bin/bash
#输出菱形,并实现可通过输入数值的大小来伸缩菱形的大小
read -p "请定义菱形的大小:" size
for ((i=1;i<=$size;i++))
do
for ((a=$size;a>=$i;a--))
do
echo -n " "
done
chang=$[ 2*$i -1 ]
for ((b=1;b<=$chang;b++))
do
echo -n "*"
done
echo
done
for ((i=2;i<=$size;i++))
do
for ((c=1;c<=$i;c++))
do
echo -n " "
done
for ((d=$size;d>=$i;d--))
do
echo -n "*"
done
for ((e=$[$size-1];e>=$i;e--))
do
echo -n "*"
done
echo
done
执行脚本:
[root@yuji sh]# bash yan5.sh
请定义菱形的大小:6
*
***
*****
*******
*********
***********
*********
*******
*****
***
*