庆祝六一,特奉上礼物一份,shell脚本的相关练习

这篇博客详细介绍了如何使用Shell脚本的for、while、until循环来输出1到100的偶数,展示了不同方式计算并输出变量值的技巧。此外,还讲解了如何定义和调用函数进行加法运算,并返回结果。最后,通过一个实际的脚本展示了遍历环境变量PATH中的目录及其子目录,查找非可执行文件的过程,以及如何对123.txt文件中的数字进行降序排序并去重。这些实例深入浅出地阐释了Shell脚本的基本操作和高级应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.用shell脚i本for,while,until这三种方式写出输出1到100的所有偶数的方法。

for循环

#!/bin/bash
for ((i=2;i<=100;i+=2))
do
   echo $i
done

在这里插入图片描述
在这里插入图片描述
while循环

#!/bin/bash
i=2
while [ $i -le 100 ]
do
   echo $i
   i=$[$i+2]
done

在这里插入图片描述
在这里插入图片描述
until循环

#!/bin/bash
i=2
until [ $i -gt 100 ]
do
    echo $i
    let i+=2
done

在这里插入图片描述
在这里插入图片描述

2.假设变量i=20 * 5,请用shell脚本格式写出4种方法输出 i 的值。

#!/bin/bash

planA

i=$[20*5]
echo $i

planB
i=$((20*5))
echo $i

planC
let i=20*5
echo $i

planD
i=$(expr 20 \* 5)
echo $i

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述

3.通过在命令行中执行./output 2i0 30 输出20+30的值,脚本中使用sum()函数封装代码并通过调用sum函数返回结果,用2种方法返回结果。

#!/bin/bash

#plan1
sum1 (){
   echo "第一个值为:$1"
   echo "第二个值为:$2"
   sum=$[$1+$2]
   echo $sum
}
sum1 $1 $2

#plan2
sum2 (){
     echo "第一个值为:$1"
     echo "第二个值为:$2"
     return $[$1+$2]
}
sum2 $1 $2
echo $?

在这里插入图片描述

4.先mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt再用递归函数输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

#!/bin/bash

listdir() {
for a in $1/*
do
   if [ -d $a ];then
      echo "$2$a"
      listdir $a " $2 "
   elif [ ! -x $a ] && [ -f $a ];then
     echo "$2$a"
   fi

done
}

OLDIFS=$IFS
IFS=':'
for i in $PATH
do
   echo "$i"
   listdir $i " "
done
IFS=$OLDIFS

在这里插入图片描述
在这里插入图片描述

5.结合使用shell数组排序算法的方式把 123.txt 文件中的数字按照降序排序输出在同一行当中,并要求没有重复数字。

#!/bin/bash

c=0
for i in `awk '{print $0}' 123.txt`
do
    accounts[$c]=$i
    let c++
done
echo "转为数组:${accounts[*]}"

paixu (){

    echo "原数组顺序为:${accounts[*]}"
    length=${#accounts[*]}

       for ((i=1; i<$length-1; i++))
       do

          for ((j=0; j<$length-$i; j++))
          do
              first=${accounts[$j]}
              m=$j+1
              second=${accounts[$m]}
              if [ $first -lt $second ];then
                temp=${accounts[$j]}
                 accounts[$j]=$second
                 accounts[$m]=$temp
              fi

           done

done
echo "排序后新的数组为:${accounts[*]}"
}

paixu $accounts

accounts=($(echo ${accounts[*]} | sed 's/ /\n/g'| sort -r | uniq))
echo "去重后:"${accounts[*]}

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值