目录
[1、if 语句](#1、if 语句)
[2、case 选择](#2、case 选择)
[3、while 循环](#3、while 循环)
[4、for 循环](#4、for 循环)
简介
Shell 脚本是一种强大的工具,广泛用于 Linux 系统中的自动化任务和脚本编写。本文将详细介绍 Shell 语言的基础知识,包括流程控制(if
语句、case
选择、while
循环、for
循环、select
扩展)和函数(定义、调用、传参、返回值、局部变量、全局变量)。
一、流程控制
流程控制是编程语言的核心部分,用于控制程序的执行流程。Shell 提供了多种流程控制结构,包括条件判断和循环。
1、if 语句
if
语句用于根据条件执行不同的代码块。Shell 中的if
语句有以下几种形式:
bash
if 条件; then
命令1
elif 条件; then
命令2
else
命令3
fi
-
if
:如果条件为真,执行then
后的命令。 -
elif
:如果前面的条件为假,检查下一个条件。 -
else
:如果所有条件都为假,执行else
后的命令。 -
fi
:结束if
语句。
常用条件表达式
表达式 | 描述 |
---|---|
-eq |
等于 |
-ne |
不等于 |
-gt |
大于 |
-lt |
小于 |
-ge |
大于等于 |
-le |
小于等于 |
-z |
字符串为空 |
-n |
字符串非空 |
-d 文件 |
文件是目录 |
-f 文件 |
文件是普通文件 |
2、case 选择
case
语句用于多条件选择,适合处理多个可能的值。
bash
case 变量 in
模式1)
命令1
;;
模式2)
命令2
;;
*)
默认命令
;;
esac
-
case
:开始case
语句。 -
模式
:可以是字符串、通配符(如*
)或正则表达式。 -
;;
:结束一个分支。 -
*)
:默认分支,类似于else
。 -
esac
:结束case
语句。
3、while 循环
while
循环用于在条件为真时重复执行代码块。
bash
while 条件; do
命令
done
-
while
:开始while
循环。 -
条件
:循环继续的条件。 -
do
:开始循环体。 -
done
:结束循环体。
4、for 循环
for
循环用于遍历列表或范围,执行代码块。
bash
for 变量 in 列表; do
命令
done
-
for
:开始for
循环。 -
变量
:当前迭代的元素。 -
列表
:可以是字符串、数组或范围。 -
do
:开始循环体。 -
done
:结束循环体。
范围循环
bash
for i in {1..5}; do
echo "数字: $i"
done
5、扩展使用select
select
语句用于创建一个简单的菜单,用户可以选择一个选项。
bash
select 变量名 in 选项列表
do
# 根据用户的选择执行相应的操作
case $变量名 in
选项1) 命令1 ;;
选项2) 命令2 ;;
*) 默认命令 ;;
esac
break # 通常需要 break,否则会循环显示菜单
done
-
select
:开始select
语句。 -
变量
:用户选择的选项。 -
选项列表
:显示给用户的选项。 -
break
:结束select
循环
举例
bash
#!/bin/bash
echo "请选择一个水果:"
select fruit in "苹果" "香蕉" "橙子" "退出"
do
case $fruit in
"苹果")
echo "你选择了苹果。"
;;
"香蕉")
echo "你选择了香蕉。"
;;
"橙子")
echo "你选择了橙子。"
;;
"退出")
echo "退出菜单。"
break
;;
*)
echo "无效的选择,请重新选择。"
;;
esac
done
bash
请选择一个水果:
1) 苹果
2) 香蕉
3) 橙子
4) 退出
#? 2
你选择了香蕉。
#? 4
退出菜单。
二、函数
函数是代码的封装,用于实现代码的复用和模块化。Shell 脚本中的函数与其他编程语言类似,但有一些特殊的语法和规则。
1、函数的定义
bash
函数名() {
命令
}
-
函数名
:函数的名称。 -
()
:定义函数的参数列表(可以为空)。 -
{}
:函数体。
2、函数的调用
调用函数时,直接使用函数名即可。
bash
greet "World" # 输出: Hello, World!
3、函数的传参
函数可以接受参数,参数通过
$1
,$2
,$3
, ... 访问
bash
#!/bin/bash
add() {
echo $(($1 + $2))
}
result=$(add 3 5)
echo "结果: $result" # 输出: 结果: 8
4、函数的返回值
函数可以通过
return
返回一个整数值,返回值通过$?
获取。
bash
#!/bin/bash
check_file() {
if [ -f $1 ]; then
return 0
else
return 1
fi
}
check_file "myfile.txt"
if [ $? -eq 0 ]; then
echo "文件存在"
else
echo "文件不存在"
fi
5、局部变量
函数内部可以使用
local
关键字定义局部变量,局部变量只在函数内部有效。
bash
#!/bin/bash
test_local() {
local var="局部变量"
echo $var
}
test_local # 输出: 局部变量
echo $var # 输出为空,因为 var 是局部变量
6、全局变量
全局变量在函数内外都有效,可以在函数中修改全局变量的值。
bash
#!/bin/bash
var="全局变量"
test_global() {
var="修改后的全局变量"
}
test_global
echo $var # 输出: 修改后的全局变量
总结
本文详细介绍了 Shell 语言的基础知识,包括流程控制(if
语句、case
选择、while
循环、for
循环、select
扩展)和函数(定义、调用、传参、返回值、局部变量、全局变量)。掌握这些知识后,您可以编写更复杂和高效的 Shell 脚本,实现自动化任务和系统管理。