📜  bash 脚本 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:29:35.652000             🧑  作者: Mango

Bash 脚本 - Shell-Bash

Bash 是一个 Unix Shell 和命令语言。它向用户提供一个命令行界面(CLI)来与操作系统进行交互,并且通过编写脚本来自动化各种操作。Bash 是 Linux 和 macOS 等操作系统默认的 Shell。本文将介绍 Bash 脚本的一些基本概念和使用方法。

基本语法

Bash 脚本的文件名通常以 .sh 结尾。在脚本文件的第一行,需要指定解释器的路径,以告诉操作系统如何执行脚本。常用的解释器路径为:

#!/bin/bash

之后就可以在脚本中写入各种命令和逻辑语句了。下面是一些常见的语法:

变量

使用 $ 符号来引用变量。变量名不需要事先声明,可以随时赋值和使用。

# 赋值
foo="Hello World!"

# 引用
echo $foo # 输出:Hello World!
参数传递

脚本可以接受命令行参数,并且可以使用 $1$2 等变量来引用这些参数。特殊变量 $0 表示脚本文件名本身。

#!/bin/bash

echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"
流程控制

Bash 支持各种流程控制语句,比如:

  • if:条件语句
  • for:循环语句
  • while:循环语句
  • case:多重条件语句

下面是一个简单的示例脚本,演示了如何使用 iffor

#!/bin/bash

if [ $# -eq 0 ]; then
    echo "Usage: $0 <list of files>"
    exit 1
fi

for file in "$@"; do
    if [ -f "$file" ]; then
        echo "$file is a file."
    elif [ -d "$file" ]; then
        echo "$file is a directory."
    else
        echo "$file is not a valid file or directory."
    fi
done
函数

Bash 支持定义函数来封装一段可重用的代码。函数可以带参数,也可以有返回值。

#!/bin/bash

# 定义函数
function add() {
    local sum=$(($1 + $2)) # 局部变量
    echo $sum
}

# 调用函数
result=$(add 2 3)
echo "Result: $result"
实战演练

下面展示一个使用 Bash 脚本的实际案例。该脚本通过解析 Nginx 访问日志来统计访问量最高的 IP 地址。具体的实现过程可以参考脚本中的注释。

#!/bin/bash

# 解析日志文件,提取 IP 地址并统计访问量
function analyze_log() {
    awk '{print $1}' $1 | sort | uniq -c | sort -rn
}

# 获取访问量最高的 IP
function get_top_ip() {
    result=$(analyze_log $1 | head -n 1)
    echo $result | awk '{print $2}'
}

# 运行脚本
if [ $# -eq 0 ]; then
    echo "Usage: $0 <access log file>"
    exit 1
fi

access_log=$1
echo "Access log file: $access_log"

top_ip=$(get_top_ip $access_log)
echo "Top IP address: $top_ip"
总结

Bash 脚本是一种强大的自动化工具,可以帮助程序员快速、高效地完成各种任务。本文介绍了 Bash 脚本的一些基本语法和实战案例,希望能够帮助初学者快速入门。