📜  shell 编程 - Shell-Bash (1)

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

Shell 编程 - Shell/Bash

Shell 编程是一种在 Unix/Linux 操作系统下使用的计算机编程语言。它以 Unix/Linux 的 Shell 作为脚本解释器,由一系列命令组成,可以完成自动化、批处理和系统管理等任务。其中,Bash 是一个常用的 Shell 编程语言,它是 Bourne Shell 的增强版。

本文介绍 Shell 编程和 Bash,旨在帮助程序员学习和使用这个强大的工具。

Shell 编程基础
Shell 脚本

Shell 脚本是一组 Shell 命令的集合,通常以 .sh 为扩展名,可以通过 Shell 解释器执行。Shell 脚本可以自动化许多任务,例如文件备份、进程监控和系统管理等。

下面是一个简单的 Shell 脚本示例,用于显示当前目录下的文件列表:

#!/bin/bash
echo "当前目录中的所有文件:"
ls -al

上面的脚本包含两个命令:第一行指定 Shell 解释器为 Bash,第二行使用命令行工具 echo 在终端中输出一条消息,第三行使用命令行工具 ls 显示当前目录中的所有文件。

变量和参数

Shell 中的变量使用 $ 符号引用,可以存储字符串、整数和其他类型的值。Shell 脚本还支持传递参数,参数用 $1,$2, $3,以此类推,来引用。

下面是一个详细的示例,演示如何使用 Shell 变量和参数:

#!/bin/bash
name="John"
echo "Hello, $name!"
echo "你传递的第一个参数是 $1"
echo "你传递的第二个参数是 $2"

上面的脚本包含一个变量 $name,它存储了字符串 "John"。在 echo 命令中,使用 $name 对变量进行引用,输出一条问候消息。

脚本还接收两个参数 $1$2,并将它们打印出来。例如,运行脚本使用以下命令:

$ bash script.sh Alice Bob

这将输出:

Hello, John!
你传递的第一个参数是 Alice
你传递的第二个参数是 Bob
条件语句

Shell 脚本可以根据条件执行不同的命令。使用 ifelse 语句可以实现条件执行逻辑。

下面是一个简单的示例,演示如何使用条件语句:

#!/bin/bash
if [ -d "/usr/local/bin" ]
then
  echo "/usr/local/bin 目录存在"
else
  echo "/usr/local/bin 目录不存在"
fi

上面的脚本使用 ifelse 语句,对 /usr/local/bin 目录进行测试。如果目录存在,则输出 "/usr/local/bin 目录存在",否则输出 "/usr/local/bin 目录不存在"。

循环语句

Shell 脚本可以通过 forwhile 循环执行重复任务。使用 breakcontinue 控制语句可以从循环中跳出或跳过迭代。

下面是一个简单的循环语句示例,演示如何遍历目录中的所有文件并进行操作:

#!/bin/bash
for file in /usr/local/bin/*
do
  if [ -x "$file" ]
  then
    echo "$file 可执行"
  else
    echo "$file 不可执行"
  fi
done

上面的脚本使用 for 循环遍历 /usr/local/bin 目录中的所有文件。如果文件可执行,则输出 "$file 可执行",否则输出 "$file 不可执行"。

Bash 简介
Bash 的历史

Bash 是 Bourne-Again SHell 的缩写,它是 Unix/Linux 系统下最常用的 Shell。它的语法类似于 Bourne Shell (sh),但包括许多额外的功能,例如命令补全和命令历史。

Bash 最早在 1987 年由 Brian Fox 开发,是自由软件基金会的一部分。

Bash 的安装

Bash 已经打包包含在几乎所有的 Unix/Linux 发行版中。如果你需要安装 Bash,可以在终端中运行以下命令:

$ sudo apt-get install bash

这将安装 Bash 应用程序并将它设置为默认 Shell。

Bash 的特性

Bash 具有许多特性,使得它成为了系统管理员和开发人员们最喜欢的 Shell 之一。

以下是一些 Bash 的主要特性:

  • 命令补全:按下 Tab 键可以自动补全命令和文件名。
  • 命令别名:可以创建自定义命令别名,简化常用命令的输入。
  • 命令历史:可以查看之前执行的命令历史,并重新运行这些命令。
  • 颜色输出:可以为命令输出设置颜色,使输出更可读。
  • 脚本编程:可以使用 Bash 编写自动化脚本,以完成常见任务。
Shell 编程实践

了解 Shell 编程的基础知识后,下面给出一个更复杂的示例。

该示例基于一个常见的场景:将指定目录中的所有 Word 文档(.docx 文件)转换为 PDF 格式。该示例包含多个步骤,包括查找文件、转换文件以及输出结果。

#!/bin/bash

# 定义要转换的文件扩展名
ext=".docx"

# 定义转换命令
command="libreoffice --convert-to pdf"

# 显示脚本信息
echo "搜索指定目录下的 $ext 文件并将其转换为 PDF"
echo ""

# 检查脚本参数
if [ $# -ne 1 ]; then
  echo "脚本参数错误!"
  echo "使用方法:$0 目录名"
  exit 1
fi

# 检查指定目录是否存在
if [ ! -d "$1" ]; then
  echo "$1 目录不存在!"
  exit 1
fi

# 开始查找并转换 Word 文档
echo "开始查找并转换 Word 文档..."

for file in $1/*$ext
do
  if [ -f "$file" ]; then
    echo "转换 $file 到 PDF ..."
    $command "$file"
  fi
done

# 输出完成信息
echo ""
echo "所有 Word 文档均已转换为 PDF!"

上面的脚本执行以下任务:

  1. 定义要转换的文件扩展名和转换命令。
  2. 显示脚本信息和用法,并检查脚本参数。
  3. 检查指定目录是否存在并开始查找和转换符合条件的 Word 文档。
  4. 输出完成信息。

运行脚本使用以下命令:

$ bash script.sh /path/to/directory

这将查找指定目录中的所有 Word 文档并将其转换为 PDF。

总结

Shell 编程是一种强大的工具,可以帮助程序员自动化、批处理和管理系统。本文介绍了 Shell 编程和 Bash,包括 Shell 脚本、变量和参数、条件语句和循环语句等基础知识,以及 Bash 的历史、安装和特性等内容。最后给出了一个完整的示例,演示 Shell 编程实践。希望读者通过本文的介绍,能够更好地理解和应用 Shell 编程。