Shell 是一种用户与计算机操作系统交互的接口,它提供了一个命令行界面(CLI),允许用户通过输入命令来执行各种系统操作。Shell 是计算机操作系统中的一个重要组件,它充当用户与系统内核之间的桥梁。
Shell 支持编写脚本文件(通常是 .sh
或 .bash
文件),用户可以将一系列命令组合在一起,形成一个脚本程序。
Bash Shell 是一种强大的脚本语言,用于编写自动化任务和系统管理脚本。以下是 Bash Shell 语言的基本语法和常用结构,帮助你快速入门。
1. 脚本的基本结构
一个 Bash 脚本通常以 Shebang 行开始,后面跟着一系列命令和逻辑结构。
#!/bin/bash
# 这是注释
echo "Hello, World!"
-
Shebang 行:
#!/bin/bash
或#!/usr/bin/env bash
,指定脚本的解释器。 -
注释:以
#
开头,用于说明代码的功能。
2. 变量
变量用于存储数据,可以是字符串、数字等。
# 定义变量
name="Kimi"
age=25
# 使用变量
echo "Name: $name, Age: $age"
-
定义变量:
变量名=值
,注意等号两边不能有空格。 -
使用变量:通过
$变量名
或${变量名}
引用变量。
3. 命令和参数
Bash 脚本可以执行系统命令,并处理命令的输出。
# 执行命令
date=$(date +%Y-%m-%d)
echo "Today's date is $date"
# 带参数的命令
ls -l /home/user
-
命令替换:
$(command)
,用于捕获命令的输出。 -
参数:命令后面的参数可以是文件路径、选项等。
4. 条件语句
Bash 提供了 if
、elif
和 else
语句,用于条件判断。
# if 语句
if [ $age -gt 18 ]; then
echo "You are an adult."
else
echo "You are a minor."
fi
# elif 语句
if [ $age -lt 10 ]; then
echo "You are a child."
elif [ $age -lt 20 ]; then
echo "You are a teenager."
else
echo "You are an adult."
fi
-
条件表达式:用
[ ... ]
或[[ ... ]]
包裹条件表达式。-
-eq
:等于 -
-ne
:不等于 -
-lt
:小于 -
-gt
:大于 -
-le
:小于等于 -
-ge
:大于等于 -
-z
:字符串为空 -
-n
:字符串不为空
-
5. 循环语句
Bash 提供了 for
、while
和 until
循环,用于重复执行代码块。
for
循环
# 遍历列表
for fruit in apple banana cherry; do
echo "I like $fruit"
done
# 遍历文件
for file in *.txt; do
echo "Processing $file"
done
# 使用序列
for i in {1..5}; do
echo "Number: $i"
done
while
循环
bash复制
# while 循环
count=1
while [ $count -le 5 ]; do
echo "Count: $count"
((count++))
done
until
循环
bash复制
# until 循环
count=1
until [ $count -gt 5 ]; do
echo "Count: $count"
((count++))
done
6. 函数
函数用于封装代码块,便于重复使用。
# 定义函数
greet() {
echo "Hello, $1!"
}
# 调用函数
greet "Kimi"
-
定义函数:使用
function_name()
或function function_name
。 -
传递参数:通过
$1
、$2
等特殊变量访问函数参数。
7. 输入和输出
Bash 支持从用户获取输入,并将输出重定向到文件。
输入
# 从用户获取输入
read -p "Enter your name: " name
echo "Hello, $name"
输出
bash复制
# 输出到文件
echo "Hello, World!" > output.txt
echo "This is line 2" >> output.txt
-
>
:将输出重定向到文件,覆盖文件内容。 -
>>
:将输出追加到文件。
8. 特殊变量
Bash 提供了一些特殊变量,用于访问脚本的运行环境。
# 脚本名称
echo "Script name: $0"
# 参数数量
echo "Number of arguments: $#"
# 所有参数
echo "All arguments: $@"
# 上一个命令的退出状态
echo "Exit status of last command: $?"
9. 数组
Bash 支持数组,用于存储多个值。
# 定义数组
fruits=("apple" "banana" "cherry")
# 访问数组元素
echo "First fruit: ${fruits[0]}"
# 遍历数组
for fruit in "${fruits[@]}"; do
echo "I like $fruit"
done
10. 退出状态和错误处理
Bash 脚本可以通过 exit
命令退出,并返回一个状态码。
# 退出脚本
exit 0 # 成功
exit 1 # 失败
# 检查命令是否成功
if [ $? -eq 0 ]; then
echo "Command succeeded."
else
echo "Command failed."
fi
-
$?
:上一个命令的退出状态。 -
set -e
:让脚本在遇到错误时立即退出。
示例脚本
以下是一个完整的示例脚本,展示了上述语法的综合应用:
bash复制
#!/bin/bash
# 定义变量
name="Kimi"
age=25
# 条件判断
if [ $age -ge 18 ]; then
echo "$name is an adult."
else
echo "$name is a minor."
fi
# 循环
for i in {1..3}; do
echo "Iteration $i"
done
# 函数
greet() {
echo "Hello, $1!"
}
# 调用函数
greet "$name"
# 输入
read -p "Enter your favorite fruit: " fruit
echo "You like $fruit."
# 输出到文件
echo "Name: $name, Age: $age, Favorite Fruit: $fruit" > user_info.txt