小小白祈祷中...

Bash 脚本是一种用于自动化任务、管理系统和运行命令的强大工具。以下是 Bash 脚本的基本语法、结构和常用功能的详细介绍。


Bash 脚本的基本结构

脚本文件的格式

  • 文件开头指定解释器:使用 #!/bin/bash 告诉系统脚本应该由 Bash 解释器执行。
1
2
3
#!/bin/bash
# 这是一个简单的 Bash 脚本
echo "Hello, World!"
  • 保存文件:将文件保存为 .sh 后缀,例如 script.sh
  • 赋予执行权限
1
chmod +x script.sh
  • 运行脚本
1
./script.sh

注释

  • 单行注释:用 # 开头。
1
2
# 这是一个注释
echo "这是一条命令"
  • 多行注释:一般用 <<COMMENTCOMMENT
1
2
3
4
: <<'COMMENT'
这是多行注释
可以写多行内容
COMMENT

变量

定义变量

  • 定义变量时,中间不能有空格
1
2
name="Alice"
age=25

使用变量

  • 使用变量时需要加 $
1
2
echo "Name: $name"
echo "Age: $age"

读取用户输入

1
2
read -p "Enter your name: " user_name
echo "Hello, $user_name!"

环境变量

  • 访问系统环境变量,例如:
1
2
echo "Home directory: $HOME"
echo "Shell: $SHELL"

条件判断

if-else 语法

1
2
3
4
5
6
7
if [ 条件 ]; then
# 条件为真时执行
echo "条件为真"
else
# 条件为假时执行
echo "条件为假"
fi
  • 示例
1
2
3
4
5
6
7
#!/bin/bash
read -p "输入一个数: " num
if [ $num -gt 10 ]; then
echo "数值大于 10"
else
echo "数值小于或等于 10"
fi

循环

for 循环

1
2
3
for i in 1 2 3 4 5; do
echo "数字: $i"
done
  • 遍历文件
1
2
3
for file in *.sh; do
echo "文件: $file"
done

while 循环

1
2
3
4
5
count=1
while [ $count -le 5 ]; do
echo "计数: $count"
count=$((count + 1))
done

until 循环

1
2
3
4
5
count=1
until [ $count -gt 5 ]; do
echo "计数: $count"
count=$((count + 1))
done

函数

定义和调用函数

1
2
3
4
5
function greet() {
echo "Hello, $1!"
}

greet "Alice" # 调用函数并传递参数
  • 带返回值的函数
1
2
3
4
5
6
7
function add() {
result=$(( $1 + $2 ))
echo $result
}

sum=$(add 5 10)
echo "结果是: $sum"

文件操作

检查文件或目录

1
2
3
4
5
6
7
8
file="test.txt"
if [ -f "$file" ]; then
echo "$file 是一个文件"
elif [ -d "$file" ]; then
echo "$file 是一个目录"
else
echo "$file 不存在"
fi
  • 常用的文件测试符:
    测试符 描述
    -f 是否为普通文件
    -d 是否为目录
    -e 是否存在
    -r 是否可读
    -w 是否可写
    -x 是否可执行

读取文件内容

1
2
3
4
file="test.txt"
while read line; do
echo $line
done < "$file"

重定向输出

  • 输出到文件
1
echo "Hello, World!" > output.txt
  • 追加到文件
1
echo "追加内容" >> output.txt

运算

整数运算

  • 使用 $((表达式)) 进行整数运算:
1
2
3
4
a=10
b=5
sum=$((a + b))
echo "Sum: $sum"

浮点运算

  • 使用 bc 进行小数运算:
1
2
result=$(echo "scale=2; 10 / 3" | bc)
echo "结果: $result"

数组

定义数组

1
arr=("apple" "banana" "cherry")

访问数组元素

1
echo ${arr[0]}  # 输出第一个元素

获取数组长度

1
echo ${#arr[@]}

遍历数组

1
2
3
for item in "${arr[@]}"; do
echo $item
done

高级功能

参数传递

  • 脚本可以通过命令行参数接收输入。
1
2
3
4
5
#!/bin/bash
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "所有参数: $@"
echo "参数个数: $#"
  • 运行脚本
1
./script.sh arg1 arg2

条件表达式

  • 数值比较

    运算符 描述
    -eq 等于
    -ne 不等于
    -gt 大于
    -lt 小于
    -ge 大于等于
    -le 小于等于
  • 字符串比较

    运算符 描述
    = 等于
    != 不等于
    -z 字符串是否为空
    -n 字符串是否非空

捕获命令执行结果

  • 使用反引号 `` 或 $() 捕获命令输出:
1
2
current_date=$(date)
echo "当前时间: $current_date"

示例脚本

备份脚本

1
2
3
4
5
6
7
8
9
#!/bin/bash
backup_dir="/backup"
src_dir="/home/user"
timestamp=$(date "+%Y%m%d_%H%M%S")

mkdir -p $backup_dir
tar -czf $backup_dir/backup_$timestamp.tar.gz $src_dir

echo "备份完成: $backup_dir/backup_$timestamp.tar.gz"

检测服务运行状态

1
2
3
4
5
6
7
8
9
#!/bin/bash
service="nginx"

if systemctl is-active --quiet $service; then
echo "$service 正在运行"
else
echo "$service 未运行,尝试启动..."
sudo systemctl start $service
fi

通过掌握这些 Bash 脚本语法和功能,您可以轻松编写脚本来自动化日常任务或实现复杂的系统管理功能!

本文作者:LuoYing @ 小小白的笔记屋

本文链接:https://luoying.netlify.app/2024/10/08/fqhsjsca/

本文标题:Linux命令详解---bash脚本语法

本文版权:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!