Bash 特殊变量($0,$?,$#,$@,$$,$*)

Bash 是一个功能强大的 Shell,提供了各种特殊变量,可以用于操作和控制脚本的行为。这些变量提供了有关脚本运行环境的基本信息,包括命令行参数、当前进程 ID 和上次执行命令的状态。

在本文中,我们将提供所有 Bash 特殊变量的深入指南,包括它们的使用示例和常见的问题避免方法。

  1. $0–  正在执行的脚本的名称。
  2.  ”$1-$9 – 前九个命令行参数。
  3. $#– 命令行参数的数量。
  4.  ”$*– 所有命令行参数作为单个字符串。
  5. $@ – 所有命令行参数作为一个数组。
  6. $? – 上次执行的命令的退出状态。
  7.  ”$$  – 当前shell的进程ID。
  8.  ”$! – 最后一个后台命令的进程 ID。

让我们详细讨论特殊变量并提供示例。

$0 – 正在执行的脚本的名称

在 Bash 中,$0 是一个特殊参数,它保存当前正在执行的脚本或Shell的名称。它也被称为脚本的“名称”或“零号参数”。

#!/bin/bash
# Linux迷 www.linuxmi.com
echo "当前运行的脚本是: $0"

例如,假设您有一个名为“www.linuxmi.com.sh”的脚本,您想从任何目录运行它。那么,您可以使用 $0 变量来确定正在执行的脚本的名称:

#!/bin/bash
# Linux迷 www.linuxmi.com
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "脚本正在从 $SCRIPT_DIR 运行"

$1,$2,…,$9 – 命令行参数

$1,$2,…,$9 变量包含传递给脚本的前九个命令行参数。这些变量对于创建接受用户输入的 shell 脚本非常有用。

例如,假设您有一个名为“greet.sh”的脚本,它将一个名称作为其第一个命令行参数。在这种情况下,您可以使用 $1 变量来检索名称,然后在脚本的输出中使用它。

#!/bin/bash
# Linux迷 www.linuxmi.com
echo "Hello, $1!"

如果脚本需要访问超过九个命令行参数,则可以使用 ${10}、${11},…,${N} 变量来检索它们。这些变量可以与 shift 命令一起使用,以批处理方式处理命令行参数。确保变量用 {} 括起来。

$# – 命令行参数的数量

$# 变量包含传递给脚本的命令行参数数量。此变量对于创建验证用户输入的 shell 脚本非常有用。

例如,假设您有一个名为“linuxmi.sh”的脚本,需要两个命令行参数。在这种情况下,您可以使用 $# 变量来确保提供了正确数量的参数。

#!/bin/bash
# Linux迷 www.linuxmi.com
if [[ $# -ne 2 ]]
then
    echo "Usage: linuxmi.sh [username] [password]"
    exit 1
fi

$* – 将所有命令行参数作为一个字符串

$* 变量包含作为单个字符串传递给脚本的所有命令行参数。该变量对于需要操作整个命令行字符串的Shell脚本非常有用。

例如,假设您有一个名为“join.sh”的脚本,用于连接作为命令行参数提供的两个字符串。在这种情况下,您可以使用$*变量来连接这些字符串。

#!/bin/bash
# Linux迷 www.linuxmi.com
joined="$*

$@ – 将所有命令行参数作为数组

$@ 变量包含作为数组传递给脚本的所有命令行参数。该变量对于需要操作单个命令行参数的Shell脚本非常有用。

例如,假设您有一个名为“list.sh”的脚本,用于列出作为命令行参数提供的目录中的所有文件。在这种情况下,您可以使用$@变量来迭代每个目录名称并列出该目录中的文件。

#!/bin/bash
# Linux迷 www.linuxmi.com
for directory in "$@"
do
    echo "正在列出中的文件 $directory:"
    ls -l $directory
done

$? – 最近执行命令的退出状态

$? 变量包含最近执行命令的退出状态。该变量对于需要处理错误或根据命令的成功或失败采取不同操作的Shell脚本非常有用。

例如,假设您有一个名为“create-file.sh”的脚本,用于创建一个文件并返回表示成功或失败的退出状态。在这种情况下,您可以使用$?变量来检查退出状态并采取适当的操作。

#!/bin/bash
# Linux迷 www.linuxmi.com
touch linuximi.txt
if [[ $? -eq 0 ]]
then
    echo "文件创建成功"
else
    echo "创建文件时出错"
fi

$$ 变量包含当前脚本的进程ID

该变量对于需要管理多个进程或创建唯一文件名的Shell脚本非常有用。 例如,假设您有一个名为“log.sh”的脚本,用于记录信息到一个基于进程ID的唯一文件名的文件中。在这种情况下,您可以使用$$变量来生成一个唯一的文件名。

#!/bin/bash
# Linux迷 www.linuxmi.com
LOG_FILE="log_$$.txt"
echo "正在记录到文件 $LOG_FILE"

$! – 最近后台命令的进程ID

$! 变量包含脚本执行的最近后台命令的进程ID。该变量对于需要管理多个进程或监视长时间运行的命令的Shell脚本非常有用。

例如,假设您有一个名为“www.linuxmi.com.sh”的脚本,用于在后台运行一个命令并记录其进度。在这种情况下,您可以使用$!变量来监视命令的进度。

#!/bin/bash
# Linux迷 www.linuxmi.com
mycommand &
pid=$!
while ps -p $pid >/dev/null; do
    echo "命令仍在运行"
    sleep 1
done
echo "命令已完成"

总结

Bash 特殊变量提供了有关脚本运行环境的重要信息。这些变量使您能够创建更加灵活、健壮和不容易出现异常或崩溃的Shell脚本。通过掌握这些变量的用法,您可以将自己的Shell脚本技能提升到更高的水平。

The post Bash 特殊变量($0,$?,$#,$@,$$,$*) first appeared on Linux迷.

版权声明:
作者:congcong
链接:https://www.techfm.club/p/40893.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>