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


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



相关文章
|
15天前
|
存储 运维 Shell
shell中for while until 三种循环的用法
shell编程中,有几种常见的循环结构,包括for循环、while循环和until循环,总的来说,循环shell编程中扮演着至关重要的角色,它们使得自动化任务变得更加容易,提高了效率,并且可以处理各种各样的编程需求。
shell中for while until 三种循环的用法
|
2月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
59 0
|
7天前
|
监控 Shell 开发工具
Shell编程
Shell编程
|
27天前
|
存储 Java Shell
bigdata-04-shell编程基础
bigdata-04-shell编程基础
12 0
|
29天前
|
Shell Linux C++
【Shell 编程设计】 编写自己的清理后台的Shell脚本
【Shell 编程设计】 编写自己的清理后台的Shell脚本
30 1
|
29天前
|
存储 Shell 数据安全/隐私保护
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
23 0
|
29天前
|
Shell C语言 C++
【Shell 编程指南】shell中的(),{}几种语法用法
【Shell 编程指南】shell中的(),{}几种语法用法
17 0
|
29天前
|
Shell 程序员 Linux
【Shell 编程指南】shell运算操作符之(())
【Shell 编程指南】shell运算操作符之(())
19 0
|
2月前
|
Shell
shell脚本for循环复杂用法
shell脚本for循环复杂用法
46 5
|
2月前
|
算法 Shell Linux
Linux的shell命令——判断与循环
Linux的shell命令——判断与循环
38 1