首页 > 其他分享 >#渗透测试#SRC漏洞挖掘#网络运维# 黑客脚本编写07之for循环判断与while循环

#渗透测试#SRC漏洞挖掘#网络运维# 黑客脚本编写07之for循环判断与while循环

时间:2024-11-22 19:16:39浏览次数:3  
标签:count SRC 07 do echo while 循环 done

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。                                                              #陇羽sec#

目录

一、Shell脚本for循环嵌套

示例1:简单的嵌套for循环

示例2:嵌套for循环处理文件

示例3:嵌套for循环与数组

二、shell脚本while 循环

1、while循环的基本语法

2、使用break和continue控制循环

三、shell脚本while循环处理文件

1、示例代码

2、代码解释

 四、shell脚本中while循环优化技巧

优化技巧

1. 使用IFS处理空格

2. 避免不必要的子壳进程

3. 使用done < <(command)替代command | while

4. 提前退出循环

5. 批量处理数据

五、 Shell脚本循环性能测试方法

1. 使用time命令

2. 使用date命令

3. 使用SECONDS变量

4. 使用perf工具

5. 使用strace命令


一、Shell脚本for循环嵌套

在Shell脚本中,for循环用于遍历一组值或执行一系列命令。嵌套for循环意味着在一个for循环内部再嵌套另一个for循环,通常用于处理多维数据或需要多次迭代的情况。

示例1:简单的嵌套for循环

以下是一个简单的嵌套for循环示例,它将打印出从1到3的所有数字对:

#!/bin/bash 
 
for i in {1..3} 
do 
    for j in {1..3} 
    do 
        echo "i=$i, j=$j" 
    done 
done 

示例2:嵌套for循环处理文件

假设我们有两个文件夹folder1folder2,每个文件夹中都有一些文件。我们可以使用嵌套for循环来遍历这些文件:

#!/bin/bash 
 
for file1 in folder1/* 
do 
    for file2 in folder2/* 
    do 
        echo "Comparing $file1 with $file2" 
        # 这里可以添加比较文件内容的逻辑 
    done 
done 

示例3:嵌套for循环与数组

我们可以使用数组来存储一组值,并在嵌套for循环中使用这些数组:

#!/bin/bash 
 
array1=("apple" "banana" "cherry") 
array2=("dog" "elephant" "fox") 
 
for fruit in "${array1[@]}" 
do 
    for animal in "${array2[@]}" 
    do 
        echo "Fruit: $fruit, Animal: $animal" 
    done 
done 

二、shell脚本while 循环

在shell脚本中,while循环用于在条件为真时重复执行一组命令。只要给定的条件为真,while循环就会继续执行。

1、while循环的基本语法

while [ condition ] 
do 
    command1 
    command2 
    ... 
done 
  • condition:一个测试条件,通常是一个比较表达式。
  • command1, command2, ...:在条件为真时要执行的命令。
  • dodone:分别标记循环的开始和结束。

示例:简单的while循环

以下是一个简单的示例,展示如何使用while循环来计数:

#!/bin/bash 
 
count=1 
while [ $count -le 5 ] 
do 
    echo "Count: $count" 
    count=$((count + 1)) 
done 

示例解释

  • count=1:初始化计数器变量count为1。
  • while [ $count -le 5 ]:当count小于或等于5时,循环继续。
  • echo "Count: $count":在循环中打印当前的计数值。
  • count=$((count + 1)):每次循环结束时,将count增加1。

无限循环

如果条件始终为真,while循环将变成无限循环。要创建一个无限循环,可以使用以下语法:

while true 
do 
    echo "This is an infinite loop" 
    sleep 1 
done 

示例解释

  • while true:条件始终为真,因此循环将无限执行。
  • echo "This is an infinite loop":在循环中打印消息。
  • sleep 1:每次循环暂停1秒,以防止CPU过载。

2、使用break和continue控制循环

  • break:用于立即退出循环。
  • continue:用于跳过当前循环的剩余部分,直接进入下一次循环。

示例:使用break和continue

#!/bin/bash 
 
count=1 
while [ $count -le 10 ] 
do 
    if [ $count -eq 5 ]; then 
        count=$((count + 1)) 
        continue 
    fi 
 
    if [ $count -eq 8 ]; then 
        break 
    fi 
 
    echo "Count: $count" 
    count=$((count + 1)) 
done 

示例解释

  • if [ $count -eq 5 ]; then continue; fi:当count等于5时,跳过本次循环的剩余部分,直接进入下一次循环。
  • if [ $count -eq 8 ]; then break; fi:当count等于8时,立即退出循环。

三、shell脚本while循环处理文件

在Shell脚本中,while循环是一种常用的控制结构,用于重复执行一组命令,直到某个条件不再满足。通常,while循环可以与文件处理结合使用,逐行读取文件内容并进行处理。

1、示例代码

以下是一个使用while循环逐行读取文件内容的Shell脚本示例:

#!/bin/bash 
 
# 定义文件路径 
FILE_PATH="example.txt"  
 
# 检查文件是否存在 
if [ ! -f "$FILE_PATH" ]; then 
  echo "文件 $FILE_PATH 不存在" 
  exit 1 
fi 
 
# 使用 while 循环逐行读取文件内容 
while IFS= read -r line 
do 
  # 在这里处理每一行的内容 
  echo "处理行: $line" 
done < "$FILE_PATH" 
 
echo "文件处理完成" 

2、代码解释


    文件路径定义:

    FILE_PATH="example.txt"  

    这里定义了要处理的文件路径。

    文件存在性检查:

    if [ ! -f "$FILE_PATH" ]; then 
      echo "文件 $FILE_PATH 不存在" 
      exit 1 
    fi 

    检查文件是否存在,如果不存在则输出错误信息并退出脚本。

    while 循环读取文件:

    while IFS= read -r line 
    do 
      echo "处理行: $line" 
    done < "$FILE_PATH" 

        IFS=:设置内部字段分隔符为空,防止前导/尾随空格被忽略。
        read -r line:逐行读取文件内容,并将每一行的内容存储在变量line中。
        echo "处理行: $line":示例处理逻辑,输出当前处理的行内容。
        done < "$FILE_PATH":将文件内容重定向到while循环中。

    处理完成提示:

    echo "文件处理完成" 

    当文件处理完成后,输出提示信息。

 四、shell脚本中while循环优化技巧

在Shell脚本中,while循环是一种常用的控制结构,用于重复执行一组命令,直到某个条件不再满足。优化while循环可以提高脚本的执行效率,减少资源消耗。以下是一些常见的优化技巧。

优化技巧

1. 使用IFS处理空格

在读取文件内容时,设置IFS(内部字段分隔符)为空字符串,可以防止前导和尾随空格被忽略。

while IFS= read -r line 
do 
  # 处理每一行的内容 
done < "file.txt" 
2. 避免不必要的子壳进程

while循环中,尽量避免频繁创建子壳进程,因为这会增加开销。例如,使用内置命令代替外部命令。

# 不推荐 
while IFS= read -r line 
do 
  result=$(external_command "$line")  # 创建子壳进程 
done < "file.txt" 
 
# 推荐 
while IFS= read -r line 
do 
  result=$(echo "$line" | external_command)  # 使用管道避免子壳进程 
done < "file.txt" 
3. 使用done < <(command)替代command | while

这种方式可以确保while循环在当前Shell环境中执行,而不是在子壳进程中执行。

# 不推荐 
command | while IFS= read -r line 
do 
  # 处理每一行的内容 
done 
 
# 推荐 
while IFS= read -r line 
do 
  # 处理每一行的内容 
done < <(command)
4. 提前退出循环

如果在循环中已经满足了某个条件,可以使用break提前退出循环,避免不必要的处理。

while IFS= read -r line 
do 
  if [[ "$line" == "target_line" ]]; then 
    echo "找到目标行"
    break  # 提前退出循环 
  fi 
done < "file.txt" 
5. 批量处理数据

如果可能,尽量批量处理数据,减少循环次数。例如,使用xargs命令批量处理数据。

# 不推荐 
while IFS= read -r line 
do 
  process_command "$line"
done < "file.txt" 
 
# 推荐 
xargs -n 1 process_command < "file.txt" 

五、 Shell脚本循环性能测试方法

在Shell脚本中,循环是常见的控制结构,用于重复执行一组命令。为了评估和优化循环的性能,可以采用以下几种方法进行测试:

1. 使用time命令

time命令可以测量执行一个命令所需的时间,包括用户态时间和内核态时间。

time (
  while [ condition ]; do 
    # 循环体 
  done 
)
2. 使用date命令

通过记录循环开始和结束时的时间戳,可以计算出循环的执行时间。

start=$(date +%s)
 
while [ condition ]; do 
  # 循环体 
done 
 
end=$(date +%s)
echo "Execution time: $(($end - $start)) seconds"
3. 使用SECONDS变量

Bash内置的SECONDS变量可以记录脚本启动后的秒数,通过记录循环开始和结束时的SECONDS值,可以计算出循环的执行时间。

SECONDS=0 
 
while [ condition ]; do 
  # 循环体 
done 
 
duration=$SECONDS 
echo "Execution time: $(($duration / 60)) minutes and $(($duration % 60)) seconds"
4. 使用perf工具

perf是一个Linux性能分析工具,可以用于分析Shell脚本中循环的性能。

sudo perf record -g -F 99 sh script.sh  
sudo perf report 
5. 使用strace命令

strace命令可以跟踪Shell脚本中每个系统调用及其执行时间,从而帮助识别性能瓶颈。

strace -c sh script.sh  

 未完待续~~~!!!!!

标签:count,SRC,07,do,echo,while,循环,done
From: https://blog.csdn.net/m0_62828084/article/details/143978304

相关文章

  • day07(单片机高级)继电器模块绘制
    目录继电器模块绘制原理图布局添加板框布线按tab修改线宽度布线换层泪滴铺铜铺铜的作用铺铜的使用规范添加丝印步骤总结继电器模块绘制到淘宝找一个继电器模块继电器模块的使用(超详细)_继电器模块工作原理-CSDN博客文章浏览阅读4.8w次,点赞116次,收藏464......
  • DTS207TC Database Development and Design
    Database Development and Design (DTS207TC)Assessment002:IndividualCourseworkDue: Dec 24th, 2024 @ 23:59Weight: 40%Maximum Marks: 100Overview&OutcomesThiscourseworkwillbeassessedforthefollowinglearningoutcomes:C.Illustrateth......
  • C#基础while循环语句
    语法:while(条件表达式){    循环体}“条件表达式”是一个布尔表达式,他决定了循环是否继续执行。当条件表达式的值为true时,循环体中的语句就会被执行,当条件表达式为false时,循环结束,程序继续执行循环后面的语句演示:特点:先判断后执行:while循环会先判断条件表达式......
  • 22207334-章莲祥-第二次博客
    一、前言这两次大作业中关于电路的分析与设计的开发让我对java这门语言的理解和应用又得到了提升,面向对象的编程对于解决实际生活中的问题拥有其他编程方式所没有的优势。在两次的类设计中我的考虑并不周全,忽视了电路设备之间共性从而没怎么用到继承,这个问题在第一次串联电路的......
  • 洛谷 P1841 [JSOI2007] 重要的城市 做题记录
    前置芝士:floyd,组合数学思路因为要所有点的距离不变,所以我们需要一个全源最短路算法,理所当然的用上了floyd(下文循环顺序默认为\(k,i,j\))。我们在记录最短路长度的时候,同时记录最短路的数量\(sum\)。最后我们枚举所有三个点组成的三元组,如果有\(i\tok\toj\)的最短路,且有......
  • 毕业论文设计 Python实现基于改进的鲸鱼优化算法(IWOA)和门控循环单元(GRU)进行时间序列预
    目录Python实现基她改进她鲸鱼优化她法(UZIWOA)和门控循环单元(GTT)进行时间序列预测模型她详细项目实例    2项目背景介绍...2项目目标她意义...2项目目标:...2项目意义:...3项目挑战...3项目特点她创新...3项目应用领域...3项目效果预测图她程序设计...4项......
  • 你对事件循环有了解吗?说说看!
    我了解事件循环(EventLoop),它是JavaScript引擎中处理异步操作的核心机制,对于前端开发至关重要。它负责协调JavaScript的单线程执行模型与浏览器或Node.js环境提供的各种异步任务(例如网络请求、定时器、用户交互等)。以下是事件循环的关键概念和运作方式:调用栈(CallStack......
  • AT32F403a/407开启RAM扩展,增加RAM到224K字节
    打开artery的AN0026应用笔记(AN0026_Extending_SRAM_in_User's_Program_ZH_V2.0.0.pdf),可以看到AT32的出厂预设的SRAM的大小为96K字节,可以修改EOPB0扩展到224K字节。EOPB0的寄存器设置如下,根据下方可知需要将EOPB0的0-7位设置位0xFE。但是在设置EOPB0之后,必须执行系统复位的命......
  • LOJ2818 循环排序
    题目传送门首先考虑排列怎么做,排序时显然是可以将1移到下标为1的位置,然后把下标为1的位置移到它所应到的位置……直到点应到的位置为1原来的位置,就可以操作一次,使得这些点都归位。于是建图\(G=\langleV,E\rangle,V=\{i\|\1\lei\len\},E=\{(i,a_i)\|\1\le......
  • 【题解】AT_joisc2007_mall ショッピングモール (Mall)
    原题传送门温馨提示:岛国题要换行!需要求一个矩阵的和,考虑二维前缀和。题目中不允许矩阵中有负数,结合求和的最小值,我们把负数赋为最大值不就行了吗。接下来就是求二维前缀和了。基于容斥原理,二维前缀和有如下递推关系:\[sum_{i,j}=sum_{i-1,j}+sum_{i,j-1}-sum_{i-1,j-1}+c_{i......