Bash 特殊变量($0,$?,$#,$@,$$,$*)
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脚本技能提升到更高的水平。
The post Bash 特殊变量($0,$?,$#,$@,$$,$*) first appeared on Linux迷.
共有 0 条评论