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

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

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

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

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

$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脚本技能提升到更高的水平。

责任编辑:赵宁宁 来源: Linux迷
相关推荐

2010-07-20 12:52:26

Perl特殊变量

2023-07-12 14:13:03

BashLinux

2009-12-18 14:35:01

Ruby奇特变量

2018-12-24 09:15:51

BashLinux环境变量

2010-06-23 15:46:27

Linux Bash

2010-06-23 17:21:30

Linux Bash

2022-11-30 07:47:00

Bash脚本

2020-06-28 07:33:01

source命令BashLinux

2023-11-13 22:08:05

ShellLinux

2017-03-08 11:10:39

LinuxShell命令

2010-07-20 12:44:20

Perl特殊变量

2023-02-10 09:46:04

bash脚本变量

2022-09-22 07:31:14

Java变量计算

2023-01-04 10:17:19

LinuxBashshell

2022-05-09 07:08:14

LinuxBashShell

2015-08-10 14:37:27

LinuxBash环境变量

2022-12-13 12:55:15

Bash循环

2023-08-22 21:42:03

Bash函数

2022-12-14 10:08:00

BashLinux

2022-12-02 14:30:24

Bash脚本数组
点赞
收藏

51CTO技术栈公众号