Bash 编程精粹:从新手到高手的全面指南之逻辑控制

这篇具有很好参考价值的文章主要介绍了Bash 编程精粹:从新手到高手的全面指南之逻辑控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 Unix 和 Linux 系统中,Bash(Bourne-Again Shell)是一种广泛使用的 shell,提供了强大的脚本编程能力。本文将详细介绍 Bash 脚本中的逻辑控制结构,包括条件判断、分支选择、循环控制以及退出控制等内容。

条件判断:if

在 Bash 脚本中,我们常常需要根据某些条件来决定是否执行某个命令或者某段代码,这时就需要用到 if 语句。

  1. 基础的 if 结构:
if [ condition ] ; then ...;fi

如果 condition 为真,则执行 then 后面的代码块,否则跳过。

  1. if-else 结构:
if [ condition ] ; then ...;else ...;fi

如果 condition 为真,则执行 then 后面的代码块,否则执行 else 后面的代码块。

  1. if-elif-else 结构:
if [ condition ] ; then ...;elif ...;fi

如果 condition 为真,则执行 then 后面的代码块,否则检查 elif 的条件,如果为真则执行 elif 后的代码块,否则执行 else 后的代码块。

  1. 使用 && 和 || 替代 if:
[ -f file ] && echo file exist || echo file not exist

如果 -f file 为真,则输出 “file exist”,否则输出 “file not exist”。

分支选择:case、select

在某些情况下,我们可能需要根据变量的值来执行不同的代码块,这就需要使用到 case 或 select 语句。

  1. case 结构:
case $var in
p1) ... ;;
p2) ... ;;
...
pn) ... ;;
*) ...;;
esac

根据变量 var 的值,选择执行相应的代码块。

  1. select 结构:
Select var in var_list;do ....;done;

用户从 var_list 中选择一个值赋给 var,然后执行相应的代码块。

循环控制:for、while、until

在 Bash 脚本中,我们可以使用 for、while 或 until 语句来重复执行某段代码。

  1. for 循环:
for(( c1 ; c2 ; c3 ));
do
... ;
done

在 c1 和 c3 之间,每次增加 c2,执行一次循环体。

  1. for 遍历循环:
for f in $array[*];
do
.....
done

遍历数组 array 的每个元素,对每个元素执行一次循环体。

  1. while 循环:
i=0;
while ((i<3)) ;do
echo $i; ((i=i+1));
done

当 i 小于 3 时,执行一次循环体,并使 i 加 1。

  1. until 循环:
i=0;
until ((i>3));do
echo $i;
((i+=1));
done

当 i 不大于 3 时,执行一次循环体,并使 i 加 1。注意,until 循环与 while 循环的功能是相同的,只是判断条件的方向不同。

退出控制:return、exit、break、continue

在 Bash 脚本中,我们可以使用 return、exit、break 或 continue 语句来控制程序的流程。

  1. return:用于函数的返回,返回一个整数值。

  2. exit:用于结束当前的 shell 进程,后面可以跟一个整数值作为退出状态。

  3. break:用于跳出当前的循环。

  4. continue:用于跳过当前循环的剩余部分,进入下一次循环。

高级条件判断

在复杂的脚本中,我们经常需要基于多个条件进行判断。这时可以使用逻辑运算符 -a (AND), -o (OR), 和 ! (NOT) 来组合条件。

if [ $var -eq 1 -a $other -eq 2 ]; then
    echo "Both conditions are true."
elif [ $var -eq 1 -o $other -eq 2 ]; then
    echo "At least one condition is true."
else
    echo "Neither condition is true."
fi

我们还可以使用括号 () 来对条件进行分组,以及使用 ! 对条件取反。

if [ $var -eq 1 ] && [ $other -eq 2 ]; then
    echo "Both conditions are true."
fi

if ! [ $var -eq 1 ]; then
    echo "var is not equal to 1."
fi

循环控制技巧

在处理文件和数据时,我们经常需要编写复杂的循环。这里有一些有用的技巧:

  • 使用 {start..end} 进行整数序列的迭代:

    for i in {1..5}; do
        echo $i
    done
    
  • 使用 seq 命令生成数字序列:

    for i in $(seq 1 5); do
        echo $i
    done
    
  • 利用 {start..end..step} 指定步长:

    for i in {0..10..2}; do
        echo $i
    done
    
  • 使用 {commands;...} 在循环体中执行一组命令:

    for file in *; do
        if [ -d "$file" ]; then
            ls "$file"
        fi
    done
    

代码组织与函数

随着脚本的增长,我们需要更好地组织代码以提高可读性和可维护性。在 Bash 中,我们可以使用函数来封装重复的任务或逻辑。

function greet() {
    echo "Hello, $1"
}

greet "World"

我们也可以使用源代码文件包含的方式来重用代码段。使用 source. 命令可以包含其他脚本文件。

source common_functions.sh
or
. common_functions.sh

信号处理

Bash 脚本还可以处理来自用户或系统的中断信号,如 Ctrl+C。我们可以捕获这些信号,并定义自己的处理行为。

trap 'echo "Interrupted!"; exit 1' INT

上面的代码会在用户按下 Ctrl+C(发送 INT 信号)时输出一条消息并退出脚本。

结论

通过掌握 Bash 的逻辑控制结构,你可以编写出功能复杂且强大的脚本。记住,好的脚本不仅仅是工作的,还应该是其他人(包括未来的你)能够理解和维护的。因此,始终关注代码的清晰性、一致性和文档。当你的脚本变得越来越复杂时,不妨考虑使用函数、源代码包含和注释来保持代码的整洁和有序。最后,不要忘记测试你的脚本以确保它们按预期工作,特别是在不同的边缘情况下。文章来源地址https://www.toymoban.com/news/detail-852136.html

到了这里,关于Bash 编程精粹:从新手到高手的全面指南之逻辑控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rust 全面指南:从基础到高级,一网打尽 Rust 的编程知识

    因为在学习Rust过程中,因为代码量不是太多,所以有一些学完就忘了,特此记录一些Rust知识点 Rust是什么? Rust是一种现代的、强类型的、系统级编程语言。它被设计用于编写高性能、并发、安全的系统,并且可以避免常见的内存安全问题,如空指针和数据竞争。Rust的特点包

    2024年02月08日
    浏览(50)
  • 从新手到高手:AI绘画实战中的Midjourney

    💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】 🤟 基于Web端打造的:👉轻量化工具创作平台 💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 随着人工智能(AI)技术的飞速发展,AI绘画逐渐成为艺术领域的一项令人瞩目的技术。本文将带领你踏上

    2024年02月04日
    浏览(50)
  • 从新手到高手,oppo手机录屏功能全掌握!

    “有人知道oppo手机录屏功能在哪吗?之前用不上的时候还见到过,现在着急需要录屏,却找不到了,真的很绝望,大家有了解oppo手机怎么录屏的吗,教教我,非常感谢!” 随着智能手机的普及和移动应用的多样化,手机录屏成为了人们日常生活中经常用到的功能。oppo手机作

    2024年01月22日
    浏览(56)
  • 从新手到高手:一站式 SQL Server 学习平台!

    介绍:SQL Server是由微软公司开发的关系数据库管理系统(RDBMS),自1989年推出以来,已成为全球主流的数据库之一。以下是对SQL Server的详细介绍: 易用性与可伸缩性:SQL Server以其易用性和良好的可伸缩性著称,能够在从个人笔记本到高倍云服务器集群等多种计算环境中运行

    2024年03月11日
    浏览(63)
  • 【兔子王赠书第13期】AI绘画实战:Midjourney从新手到高手

    如今AI技术已经进入了我们的日常学习生活中,如何用一本书轻松玩转AI绘画,领略无限艺术可能呢? AI绘画是指利用人工智能技术进行绘画创作的一种艺术形式。人工智能绘画可以通过计算机程序模拟艺术家的绘画风格和技巧,自动生成具有艺术价值的绘画作品。 人工智能

    2024年02月04日
    浏览(52)
  • Spring高手之路7——事件机制与监听器的全面探索

      观察者模式是一种行为设计模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个模式中,改变状态的对象被称为主题,依赖的对象被称为观察者。 举个实际的例子: 事件源(Event Source) :可以视

    2024年02月11日
    浏览(44)
  • 钡铼技术集IO数据采集可编程逻辑控制PLC无线4G环保物联网关

    背景        数据采集传输对于环保企业进行分析和决策是十分重要的,而实时数据采集更能提升环保生产的执行力度,从而采取到更加及时高效的措施。因此实时数据采集RTU成为环保企业的必备产品之一。 产品介绍 在推进环保行业物联网升级过程中,环保RTU在环保方面发

    2024年02月03日
    浏览(48)
  • 【机器人仿真Webots教程】-控制器编程指南

    1.1 controller与场景树节点 在Webots中,场景树节点(Scene Tree Nodes)是Webots仿真环境中的各种对象,包括机器人模型、传感器、环境物体等。每个节点都有其在场景树中的位置,节点之间可以形成层次结构,以便组织和管理模拟环境。 控制器程序(Controller Program)是用于控制机

    2024年02月06日
    浏览(48)
  • Spring高手之路15——掌握Spring事件监听器的内部逻辑与实现

    在阅读本文之前需要你已经对事件监听器有了简单的了解,或去阅读前面的文章《 Spring高手之路7——事件机制与监听器的全面探索 》   在 Spring 中, ApplicationContext 可以形成一个层次结构,通常由主容器和多个子容器组成。一个常见的疑问是:当一个事件在其中一个容器

    2024年02月06日
    浏览(48)
  • XILINX XC7A200T-2FBG676C PLC可编程逻辑控制器

    FPGA, Artix-7, MMCM, PLL, 400 I/O, 628 MHz, 215360单元, 950 mV至1.05 V, FCBGA-676 XILINX Artix®-7 FPGA系列是一款高性价比FPGA,提供高性能/功耗比, 高收发器线路速率, DSP处理,集成AMS。该系列具有MicroBlaze™软处理器, 支持1066Mb/s DDR3,是成本和功耗敏感应用的最佳选择,例如软件定义无线电

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包