Bash 脚本是 Linux 系统中最受欢迎且易于掌握的编程方式之一。 本文将通过一些简单的脚本示例,帮助大家理解 Bash 编程的基础原理。
1. 在 Bash 中输出 “Hello World”
“Hello World” 程序是学习任何编程语言的经典入门案例, Bash 也不例外。
以下是如何使用 Bash 输出 “Hello World” 的步骤:
#!/bin/bash
这个叫做 Shebang 的命令 (#!/bin/bash) 非常重要,它告诉系统使用哪个解释器来运行此脚本。 在这个例子中,我们指定了 Bash 解释器。
# This script prints "Hello World"
echo
命令可以将内容打印到标准输出。 在 echo
命令后添加要打印的文本。 例如,在第三行添加:
echo "Hello World"
.sh
作为文件扩展名,例如 hello_world.sh
。 虽然扩展名不是必须的,但这是一种良好的约定。chmod
命令,加上 +x
参数,以及脚本文件名即可:
chmod +x hello_world.sh
./hello_world.sh

2. 通过读取用户输入创建目录
在脚本中,你可以运行任何你通常在命令行上执行的命令。 例如,可以使用 mkdir
命令在脚本中创建新目录。
#!/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
命令会返回错误。 为了避免这种情况,可以自己检查一下参数是否存在,并给出更友好的错误提示:
#!/bin/bash
mkdir
之前,检查第一个参数是否为空 (即没有参数)。 可以使用 Bash 的 if
语句来实现,它可以根据条件执行相应的代码:
if [ "$1" = "" ]; then
echo "请提供一个新目录的名称作为第一个参数"
exit
fi
关键字 (if
的倒写) 表示 Bash 中 if
语句的结束:
fi
mkdir $1
当运行这个新版本的脚本时,如果你忘记传递参数,将会收到一条友好的错误消息:
4. 使用 Bash 函数删除文件
如果发现自己重复编写相同的代码,可以考虑将其封装在一个函数中。 这样,可以在需要时调用该函数。
下面是一个删除指定文件的函数示例。
#!/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 aecho "请输入第二个数字: "
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`
;;
esacecho "结果: $result"
注意 case ... esac
的用法,它相当于其他语言中的 switch
语句。 它允许你针对多个固定的值测试一个变量 (在本例中是 choice
变量) 并执行相应的代码。
此脚本使用 bc
命令来执行所有计算。