帮助您学习 Linux 编程的 5 个 Bash 脚本示例

Bash 脚本是 Linux 系统中最受欢迎且易于掌握的编程方式之一。 本文将通过一些简单的脚本示例,帮助大家理解 Bash 编程的基础原理。

1. 在 Bash 中输出 “Hello World”

“Hello World” 程序是学习任何编程语言的经典入门案例, Bash 也不例外。

以下是如何使用 Bash 输出 “Hello World” 的步骤:

  • 首先,打开一个文本编辑器,创建一个新文件,并输入以下代码:
  • Bash 脚本的第一行应该始终是:
     #!/bin/bash 

    这个叫做 Shebang 的命令 (#!/bin/bash) 非常重要,它告诉系统使用哪个解释器来运行此脚本。 在这个例子中,我们指定了 Bash 解释器。

  • 任何以 # 符号开头的行都是注释。 Shebang 行是特殊注释,你也可以添加自己的注释来解释你的代码。 例如,在第二行添加如下注释:
     # This script prints "Hello World" 
  • 使用 echo 命令可以将内容打印到标准输出。 在 echo 命令后添加要打印的文本。 例如,在第三行添加:
     echo "Hello World" 
  • 保存脚本,推荐使用 .sh 作为文件扩展名,例如 hello_world.sh。 虽然扩展名不是必须的,但这是一种良好的约定。
  • 要运行脚本,需要赋予文件可执行权限。 使用 chmod 命令,加上 +x 参数,以及脚本文件名即可:
     chmod +x hello_world.sh 
  • 最后,使用以下命令从脚本所在的目录运行脚本:
     ./hello_world.sh 
  • 执行脚本后,终端将会显示文本 “Hello World”:
  • 2. 通过读取用户输入创建目录

    在脚本中,你可以运行任何你通常在命令行上执行的命令。 例如,可以使用 mkdir 命令在脚本中创建新目录。

  • 和之前的例子一样,以 Shebang 行开始:
     #!/bin/bash 
  • 使用 echo 命令提示用户输入目录名称:
     echo "请输入新目录的名称:" 
  • 使用内置的 read 命令获取用户输入。 read 命令接受一个参数,用于指定一个变量名,并将用户的输入存储到该变量中:
     read newdir 
  • 当需要使用变量中存储的值时,在变量名前加上美元符号 ($)。 将用户输入的变量作为参数传递给 mkdir 命令,即可创建新目录:
     mkdir $newdir 
  • 运行此脚本时,它会提示你输入。 输入一个有效的目录名,脚本将会在当前目录下创建该目录:
  • 3. 使用命令行参数创建目录

    除了交互式读取输入之外,大多数 Linux 命令都支持通过命令行参数来控制其行为。 你可以在运行程序时传递参数。

    在脚本中,可以使用 $1 来引用第一个参数的值,$2 引用第二个参数,以此类推。

  • 使用上一个示例中的 mkdir 命令来创建一个目录。 但是,这次使用内置变量 $1
     #!/bin/bash
    mkdir $1
  • 运行脚本时,将你想要创建的新目录名称作为参数传递:
     ./arg_dir.sh Test 
  • 你可能会好奇,如果没有提供参数就运行脚本会发生什么。 尝试一下看看,你会收到一个以“usage: mkdir”开头的错误消息:

    如果没有命令行参数, $1 的值为空。 当脚本调用 mkdir 时,并没有传递任何参数,因此 mkdir 命令会返回错误。 为了避免这种情况,可以自己检查一下参数是否存在,并给出更友好的错误提示:

  • 和往常一样,从 Shebang 行开始:
     #!/bin/bash 
  • 在调用 mkdir 之前,检查第一个参数是否为空 (即没有参数)。 可以使用 Bash 的 if 语句来实现,它可以根据条件执行相应的代码:
     if [ "$1" = "" ]; then 
  • 如果第一个参数为空,则打印错误消息并退出脚本:
        echo "请提供一个新目录的名称作为第一个参数"
    exit
  • fi 关键字 (if 的倒写) 表示 Bash 中 if 语句的结束:
     fi 
  • 现在,你的脚本可以像以前一样继续处理存在参数的情况:
     mkdir $1 
  • 当运行这个新版本的脚本时,如果你忘记传递参数,将会收到一条友好的错误消息:

    4. 使用 Bash 函数删除文件

    如果发现自己重复编写相同的代码,可以考虑将其封装在一个函数中。 这样,可以在需要时调用该函数。

    下面是一个删除指定文件的函数示例。

  • 从 Shebang 行开始:
     #!/bin/bash 
  • 通过编写函数名、紧随其后的空括号,以及花括号内的命令来定义一个函数:
     del_file() {
    echo "正在删除 $1"
    rm $1
    }

    然后,你可以调用这个函数,并向其传递要删除的文件名:

     del_file test.txt 

  • 当你调用一个函数时,它会设置一个特殊的 $? 变量,其中保存着它最后执行的命令的退出状态。 退出状态对于错误检查很有用。 在这个例子中,可以检查 rm 命令是否成功执行:

     if [ $? -ne 0 ]; then
    echo "抱歉,无法删除该文件"
    fi

    5. 创建一个基本的算术计算器

    最后一个示例展示了一个非常基本的计算器。 当你运行它时,你需要输入两个数值,然后选择要执行的算术运算。

    以下是 calc.sh 脚本的代码:

     #!/bin/bash


    echo "请输入第一个数字: "
    read a

    echo "请输入第二个数字: "
    read b


    echo "请选择算术运算类型 :"
    echo "1. 加法"
    echo "2. 减法"
    echo "3. 乘法"
    echo "4. 除法"
    read choice


    case $choice in
    1)
    result=`echo $a + $b | bc`
    ;;

    2)
    result=`echo $a - $b | bc`
    ;;

    3)
    result=`echo $a \* $b | bc`
    ;;

    4)
    result=`echo "scale=2; $a / $b" | bc`
    ;;
    esac

    echo "结果: $result"

    注意 case ... esac 的用法,它相当于其他语言中的 switch 语句。 它允许你针对多个固定的值测试一个变量 (在本例中是 choice 变量) 并执行相应的代码。

    此脚本使用 bc 命令来执行所有计算。