Bash 特殊变量($0,$?,$#,$@,$$,$*) 您所在的位置:网站首页 linux$0 Bash 特殊变量($0,$?,$#,$@,$$,$*)

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

2023-03-28 21:52| 来源: 网络整理| 查看: 265

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

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

“$0”–  正在执行的脚本的名称。  ”$1-$9” – 前九个命令行参数。 “ $#”– 命令行参数的数量。  ”$*“ – 所有命令行参数作为单个字符串。 ”$@” – 所有命令行参数作为一个数组。 “ $?” – 上次执行的命令的退出状态。  ”$$“   – 当前shell的进程ID。  ”$!“  – 最后一个后台命令的进程 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脚本技能提升到更高的水平。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有