星途物语 星途物语
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
留言板
归档
GitHub (opens new window)

星途物语

尚记时,记之
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
留言板
归档
GitHub (opens new window)
  • Shell学习笔记

    • 定义变量
    • 特殊变量
    • 转义字符
    • 命令替换
    • 变量替换
    • 运算符
    • 字符串和数组
    • 条件控制
    • 函数
    • 变量取值处理
    • 常见shell有哪些?缺省的是哪个
  • Python学习笔记

    • Python基础
  • 编程
  • Shell学习笔记
星途物语
2025-01-01

条件控制

1.if

语法格式:

注意:expression 和方括号([ ])之间必须有空格,否则会有语法错误

if [ expression ]
then
   Statement(s) to be executed if expression is true
fi
1
2
3
4

if 语句通过关系运算符判断表达式的真假来决定执行哪个分支。Shell 有三种 if ... else 语句

if ... fi 语句
if ... else ... fi 语句
if ... elif ... else ... fi 语句
1
2
3

if 和 elif 后的条件表达式必须跟随 then,以明确指示在条件为真时要执行的命令块,then 起到区分条件部分和执行部分的作用,省略 then 会使解析器无法正确理解语句结构,从而导致语法错误

实例:

#!/bin/bash/

a=10
b=20
if [ $a == $b ]
then
	echo "a is equal to b"
elif [ $a -gt $b ]
then
	echo "a is greater to b"
else
	echo "a is less to b"
fi

# if ... else 语句也可以写成一行,以命令的方式来运行
a=10;b=20;if [ $a == $b ];then echo "a is equal to b";else echo "a is not equal to b";fi;

# if ... else 语句也经常与 test 命令结合使用,作用与上面一样
if test $a == $b
then
	echo "a is equal to b"
else
	echo "a is not equal to b"
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

2.case

case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分支选择结构

#!/bin/bash/

grade="B"

case $grade in
	"A") echo "Very Good!";;
	"B") echo "Good!";;
	"C") echo "Come On!";;
	*)
		echo "You Must Try!"
		echo "Sorry!";;
esac

# 转换成C语言是:
#include <stdio.h>
int main(){
    char grade = 'B';
    switch(grade){
        case 'A': printf("Very Good!");break;
        case 'B': printf("Very Good!");break;
        case 'C': printf("Very Good!");break;
        default:
            printf("You Must Try!");
            printf("Sorry!");
            break;
    }
    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

需要注意的是: 取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;

;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令

3.for

语法:

for 变量 in 列表
do
    command1
    command2
    ...
    commandN
done
1
2
3
4
5
6
7

实例:

#!/bin/bash/

for value in 1 2 3 4 5
do
	echo "The value is $value"
done

# 输出
The value is 1
The value is 2
The value is 3
The value is 4
The value is 5

# 顺序输出字符串中的字符
for str in This is a string
do
    echo $str
done

# 输出
This
is
a
string

# 遍历目录下的文件
# 在 Bash 脚本中,* 是一个通配符(wildcard),用于匹配当前目录下的所有文件和目录,在 for 循环中使用 *,它会扩展为当前目录中所有的# 文件和目录名
for FILE in *
do
   echo $FILE
done

# 遍历文件内容
citys=`cat city.txt`
for city in $citys
do
   echo $city
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

4.while

只要while后面的条件满足,就一直执行do里面的代码块

语法:

while command
do
   Statement(s) to be executed if command is true
done
1
2
3
4

实例:

#!/bin/bash

c=0;
while [ $c -lt 3 ]
do
	echo "Value c is $c"
	# 这里由于shell本身不支持算数运算,所以使用expr命令进行自增
	c=`expr $c + 1`
done

# 输出
Value c is 0
Value c is 1
Value c is 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14

5.util

until 循环执行一系列命令直至条件为 true 时停止

#!/bin/bash

c=0;
# do里面的语句块一直在运行,直到满足了until的条件就停止
until [ $c -eq 3 ]
do
	echo "Value c is $c"
	c=`expr $c + 1`
done
1
2
3
4
5
6
7
8
9

6.break、continue

break命令允许跳出所有循环

在嵌套循环中,break 命令后面还可以跟一个整数,表示跳出第几层循环:break n,break 会退出最内层的 n 个循环

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环

#Shell
字符串和数组
函数

← 字符串和数组 函数→

Theme by Vdoing | Copyright © 2025-2025 | 鄂ICP备2024086820号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式