shell编程——5个双重循环实验(带你玩转双重循环)

简介: 实验1实验要求:将一个点分十进制格式的IP地址转换成点分二进制格式。创建脚本:

实验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
      *
     ***
    *****
   *******
  *********
 ***********
  *********
   *******
    *****
     ***
      *
复制代码


网络异常,图片无法展示
|



相关文章
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
13天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
Shell
Shell编程(下)
Shell编程(下)
86 1
|
1月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
38 1
|
1月前
|
Shell Linux 开发工具
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
62 12
|
2月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
25天前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
68 1
|
11天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
35 2
6种方法打造出色的Shell脚本
|
2天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
13 2