for 命令:
for i in 的各种用法 :
for i in “file1” “file2” “file3”
for i in /boot/*
for i in /etc/*.conf
for i in $(seq -w 10) –》等宽的01-10
for i in {1…10}
for i in $( ls )
for I in $(< file)
for i in “$@” –》取所有位置参数,可简写为for i
注意:bash shell支持C式for循环
#!/bin/bash
j=$1
for ((i=1; i<=j; i++))
do
t
在Shell脚本编程中,`for`循环是一种常用的控制流程结构,它允许我们对一系列的值进行迭代。本文将深入探讨`for`循环的各种用法及其在不同场景下的应用。
1. **基本for循环语法**:
```bash
for variable in value1 value2 value3 ...
do
commands
done
```
其中,`variable`是循环变量,`value1`, `value2`, `value3`等是迭代的值。
2. **字符串和文件名迭代**:
- `for i in "file1" "file2" "file3"`:迭代多个字符串。
- `for i in /boot/*`:遍历`/boot/`目录下的所有文件和子目录。
- `for i in /etc/*.conf`:遍历`/etc/`目录下的所有`.conf`文件。
3. **序列生成**:
- `for i in $(seq -w 10)`:使用`seq`命令生成等宽的01-10序列。
- `for i in {1...10}`:在Bash中,花括号扩展可以生成1到10的整数序列。
4. **命令输出迭代**:
- `for i in $(ls)`:使用`ls`命令的结果作为循环变量,迭代当前目录下的文件和目录。
- `for i in $(< file)`:从文件中读取每一行作为循环变量。
5. **特殊变量**:
- `$@`:包含所有位置参数,可以简化为`for i`。
- `$#`:返回位置参数的个数。
- `$0`:脚本名称。
- `$*`:所有位置参数的串联,用空格分隔。
6. **C风格的for循环**:
```bash
for ((initialization; condition; increment/decrement))
do
commands
done
```
这种形式更接近于C语言中的for循环,例如`for ((i=1; i<=$j; i++))`。
7. **注意事项**:
- 在脚本开头指定使用的Shell类型,如`#!/bin/bash`。
- 变量名和函数名应具有描述性,函数名建议采用动名词,首字母大写。
- 使用4个空格缩进,避免使用制表符。
- 使用`${varname}`来获取变量值,以防止特殊情况的混淆。
- 避免直接使用`cd`改变目录,因为这会影响脚本的可移植性。
- 在删除文件时,确保变量已初始化,避免误删重要文件。
- 尽量使用单一功能的函数,提高代码可读性和可维护性。
- 多使用注释,便于理解和调试。
8. **实践示例**:
- 实例1:清除ARP缓存。
- 实例2:生成随机数。
- 实例3:倒数计时器。
- 实例4:批量创建用户并设置密码。
- 实例5:查找并删除uid大于10000的用户。
- 实例6:正则匹配查找uid大于10000的用户。
- 实例7:检查网络中存活的主机。
9. **循环控制语句**:
- `break`:退出当前循环。
- `continue`:跳过当前循环的剩余部分,进入下一次循环。
10. **位置参数**:
- `$n`(n为数字):表示脚本接收到的第n个参数。
- `{n}`:用于访问大于9的位置参数。
理解并熟练掌握这些`for`循环用法,对于编写高效、可靠的Shell脚本至关重要。通过不断实践和应用,你可以创建出满足各种需求的自动化任务。