Shell脚本语法--for/do/done

Shell脚本的for循环结构和C语言很不一样,它类似于某些编程语言的foreach循环。例如:

#! /bin/sh

for FRUIT in apple banana pear; do
  echo "I like $FRUIT"
done

FRUIT是一个循环变量,第一次循环$FRUIT的取值是apple,第二次取值是banana,第三次取值是pear。再比如,要将当前目录下的chap0chap1chap2等文件名改为chap0~chap1~chap2~等(按惯例,末尾有~字符的文件名表示临时文件),这个命令可以这样写:

$ for FILENAME in chap?; do mv $FILENAME $FILENAME~; done

也可以这样写:

$ for FILENAME in `ls chap?`; do mv $FILENAME $FILENAME~; done
### Shell 脚本流程控制基础知识 Shell 脚本中的流程控制语句用于管理程序执行的顺序和条件,使得脚本能根据不同的情况做出响应。以下是常见的几种流程控制结构及其基本用法。 #### 条件分支 `if` 语句 `if` 语句允许基于特定条件执行代码块。其语法如下: ```bash #!/bin/bash num=10 if [ $num -eq 10 ]; then echo "Number is equal to 10" fi ``` 上述例子中,当变量 `$num` 的值等于 10 时会打印消息[^1]。如果需要处理多个条件,则可以扩展为 `elif` 和 `else` 结构: ```bash #!/bin/bash num=5 if [ $num -lt 10 ]; then echo "Number is less than 10." elif [ $num -gt 10 ]; then echo "Number is greater than 10." else echo "Number is exactly 10." fi ``` 此段代码展示了如何根据不同数值范围输出相应信息[^3]。 #### 循环结构 循环使我们可以重复运行一段代码直到满足某个终止条件为止。常用的有三种形式:`for`, `while`, 及 `until`. ##### 使用 `for` 进行迭代 `for` 循环非常适合遍历列表或者一系列数字。下面是一个简单的计数器示例: ```bash #!/bin/bash for i in {1..5}; do echo "$i times Hello!" done ``` 这段脚本将依次显示从 1 到 5 各自乘以字符串 “Hello!” 的结果[^4]。 另外一种写法利用 C 风格的语法完成相同的功能: ```bash #!/bin/bash for ((i=1;i<=5;i++)); do echo "${i}th iteration." done ``` 这里采用双括号表达式定义初始值、测试条件以及增量操作符。 ##### 应用 `while` 实现持续检测 当需要不断检查某一状态直至改变之前保持某动作不变的情况下适用 `while`: ```bash #!/bin/bash count=1 while [ $count -le 5 ]; do echo "Counting...$count" count=$((count + 1)) done ``` 在这个实例里,只要计数器小于等于五就一直增加并报告当前进度[^2]。 ##### 借助 `until` 达到相反效果 与 `while` 不同的是,`until` 是等到指定条件变为真才停止循环活动: ```bash #!/bin/bash number=0 until [ ! $number -lt 5 ]; do echo "Current number: ${number}" number=$((number+1)) done ``` 上面的例子表明,在整型变量未达到或超过界限前都会继续累加展示过程。 #### 综合应用案例分析 考虑这样一个场景需求:监控特定服务是否存活,并在其崩溃后自动重启它。这可以通过组合前面提到的各种技术手段达成目标: ```bash #!/bin/bash SERVICE_NAME="my_service" ps aux | grep -v grep | grep $SERVICE_NAME &> /dev/null if [ $? -ne 0 ]; then echo "$(date): Service '$SERVICE_NAME' not running, restarting..." systemctl restart $SERVICE_NAME else echo "$(date): Service '$SERVICE_NAME' already up and running." fi ``` 该片段先查找是否有匹配的服务进程存在;如果没有发现则记录日志并向系统发出启动指令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值