Shell脚本用for循环遍历参数的方法技巧
在Shell脚本编程中,有时候我们需要处理多个命令行参数,这时使用`for`循环来遍历这些参数就显得非常实用。本文将详细讲解如何在Shell脚本中使用`for`循环遍历参数,并介绍其中的一些小技巧。 1. **基本的参数遍历** 在Shell脚本中,可以通过`$1`, `$2`, `$3`等变量来访问传递给脚本的参数,但当参数数量不确定时,使用`for`循环更加灵活。以下是一个简单的例子: ```bash #!/bin/bash number=65 # 定义一个退出值 index=1 # 定义一个计数器 if [ -z "$1" ]; then echo "Usage:$0 + canshu" # 如果未输入参数,显示使用方法并退出 exit $number fi echo "listing args with \$*:" for arg in $* # 使用$*遍历所有参数 do echo "arg: $index = $arg" let index+=1 done index=1 echo "listing args with \"\$@\":" for arg in "$@" # 使用"$@"遍历所有参数 do echo "arg: $index = $arg" let index+=1 done ``` 这段代码展示了如何通过`for`循环遍历脚本接收到的所有参数。 2. **`$*`与`$@`的区别** - `"$*"`:将所有参数视为一个单独的字符串,每个参数由空格分隔。这意味着在`for`循环中,`$*`会将所有参数视为一个整体,循环次数等于单词的数量(即参数个数)。 - `"$@"`:保留每个参数的独立性,每个参数被视为一个单独的字符串。在`for`循环中,`"$@"`会遍历每一个单独的参数,循环次数等于参数的实际个数。 下面是两个示例来演示`$*`与`$@`的区别: ```bash #!/bin/bash number=11 if [ $# -eq 0 ];then echo "Usage: $0 + canshu" exit $number fi for i in $* # 在$*中遍历,每个参数被视为独立的,循环次数等于参数个数 do echo $i done for i in "$*" # 在"$*"中遍历,所有参数被视为一个字符串,只遍历一次 do echo $i done ``` 3. **小技巧** - **技巧1**:`"$@"`和`$@`在遍历参数时没有本质区别,因为它们在大多数情况下都会保留参数的独立性。但在某些特定的上下文中,如双引号内的变量展开,`"$@"`会保持每个参数的独立性,而`$@`可能会因为展开规则而失去这一特性。 - **技巧2**:当使用`for`循环遍历参数时,记得使用`let`命令或`((...))`结构来执行数学运算,例如增加`index`的值,以避免因空格或其他特殊字符导致的问题。 4. **总结** Shell脚本中的`for`循环是处理命令行参数的强大工具。`$*`和`$@`的选择取决于你是否希望保持参数的独立性。在遍历参数时,使用`"$@"`通常是更安全的选择,因为它能确保每个参数作为单独的实体处理。了解这些技巧可以帮助你编写更高效、更健壮的Shell脚本。希望这些内容能对你在Shell脚本编程中有所帮助,如果你需要了解更多相关知识,请查阅更多的Shell脚本教程和实践案例。
- 粉丝: 6
- 资源: 881
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Anaconda3-2021.11-Windows-x86-64安装包
- 基于QT+C++实现的实现了仿Windows消息通知功能+支持交互(源码+说明)
- 俯视人体检测18-CreateML、Paligemma数据集合集.rar
- 基于lstm的情绪识别(Python源码),开箱即用
- 俯视交通工具公共设施检测27-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- IMG_20241219_112845.jpg
- VB.Net读写RUI网址唤醒小程序NDEF记录NFC
- STM32F103连接移远EC200U-4G模块发送GPS和多个传感器数据到ONENET物联网开放平台.zip
- DeepLearning量化交易项目,使用深度学习技术(CNN、RNN、LSTM以及复合神经网络)对价格数据进行预测(全套源码)
- 行政部门年度工作总结报告PPT