目录
在Unix/Linux Shell脚本中,流程控制指的是控制脚本执行顺序的方法。通过使用流程控制结构,可以实现条件分支、循环和其他逻辑控制,使得脚本可以根据不同的条件执行不同的操作。以下是一些基本的Shell流程控制结构的介绍和示例。
1. 条件判断:if
语句
if
语句是最基本的流程控制结构,用于根据条件执行不同的代码块。
语法:
bash
深色版本
1if condition; then
2 commands
3elif condition; then
4 commands
5else
6 commands
7fi
示例:
bash
深色版本
1#!/bin/bash
2num=10
3if [ "$num" -gt 0 ]; then
4 echo "Number is positive."
5elif [ "$num" -lt 0 ]; then
6 echo "Number is negative."
7else
8 echo "Number is zero."
9fi
2. 循环:for
循环
for
循环用于重复执行一组命令直到某个条件不再满足。
语法:
bash
深色版本
1for var in item list; do
2 commands
3done
示例:
bash
深色版本
1#!/bin/bash
2for i in 1 2 3 4 5; do
3 echo "Number: $i"
4done
3. 循环:while
循环
while
循环用于当某个条件为真时重复执行一组命令。
语法:
bash
深色版本
1while condition; do
2 commands
3done
示例:
bash
深色版本
1#!/bin/bash
2count=1
3while [ "$count" -le 5 ]; do
4 echo "Count: $count"
5 count=$((count + 1))
6done
4. 循环:until
循环
until
循环与while
类似,但是只有当条件为假时才会执行循环体内的命令。
语法:
bash
深色版本
1until condition; do
2 commands
3done
示例:
bash
深色版本
1#!/bin/bash
2count=1
3until [ "$count" -gt 5 ]; do
4 echo "Count: $count"
5 count=$((count + 1))
6done
5. 分支:case
语句
case
语句提供了一个多分支的选择机制,可以根据变量的不同值执行不同的命令。
语法:
bash
深色版本
1case var in
2 pattern1)
3 commands
4 ;;
5 pattern2)
6 commands
7 ;;
8 *)
9 commands
10 ;;
11esac
示例:
bash
深色版本
1#!/bin/bash
2day="Sunday"
3case $day in
4 Monday)
5 echo "Today is Monday."
6 ;;
7 Tuesday)
8 echo "Today is Tuesday."
9 ;;
10 Wednesday)
11 echo "Today is Wednesday."
12 ;;
13 Thursday)
14 echo "Today is Thursday."
15 ;;
16 Friday)
17 echo "Today is Friday."
18 ;;
19 Saturday)
20 echo "Today is Saturday."
21 ;;
22 Sunday)
23 echo "Today is Sunday."
24 ;;
25 *)
26 echo "Invalid day."
27 ;;
28esac
6. 选择:select
语句
select
语句提供了一种交互式的菜单选择机制。
语法:
bash
深色版本
1select name in list; do
2 commands
3done
示例:
bash
深色版本
1#!/bin/bash
2select choice in "Option1" "Option2" "Option3"; do
3 case $choice in
4 "Option1")
5 echo "You selected Option1."
6 break
7 ;;
8 "Option2")
9 echo "You selected Option2."
10 break
11 ;;
12 "Option3")
13 echo "You selected Option3."
14 break
15 ;;
16 *)
17 echo "Invalid option."
18 ;;
19 esac
20done
7. 退出:break
和 continue
break
:立即退出最近的循环。continue
:跳过当前循环的剩余部分,并开始下一个迭代。
示例:
bash
深色版本
1#!/bin/bash
2for i in {1..10}; do
3 if [ "$i" -eq 5 ]; then
4 continue
5 fi
6 if [ "$i" -eq 8 ]; then
7 break
8 fi
9 echo "Number: $i"
10done
8. 条件判断:[[
和 ]]
[[
和 ]]
提供了更加强大的条件测试能力,支持正则表达式匹配,并且可以进行更加复杂的字符串和数值比较。
示例:
bash
深色版本
1#!/bin/bash
2str="hello world"
3if [[ "$str" =~ hello ]]; then
4 echo "String contains 'hello'."
5else
6 echo "String does not contain 'hello'."
7fi
总结
通过上述的流程控制结构,你可以编写出复杂且功能丰富的Shell脚本。这些结构允许你在脚本中根据不同的条件执行不同的动作,从而提高脚本的灵活性和适应性。在实际编写脚本时,建议使用合适的缩进来保持代码的可读性,并确保所有的逻辑分支都得到了适当的处理。