服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

Bash 特殊变量,功能强大的 Shell

日期: 来源:Linux公社收集编辑:聆听世界的鱼

点击上方蓝字 ● 关注Linux公社     

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.comecho "当前运行的脚本是: $0"
例如,假设您有一个名为“www.linuxmi.com.sh”的脚本,您想从任何目录运行它。那么,您可以使用 $0 变量来确定正在执行的脚本的名称:
#!/bin/bash# Linux迷 www.linuxmi.comSCRIPT_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.comecho "Hello, $1!"
如果脚本需要访问超过九个命令行参数,则可以使用 ${10}、${11},...,${N} 变量来检索它们。这些变量可以与 shift 命令一起使用,以批处理方式处理命令行参数。确保变量用 {} 括起来。
$# - 命令行参数的数量
$# 变量包含传递给脚本的命令行参数数量。此变量对于创建验证用户输入的 shell 脚本非常有用。
例如,假设您有一个名为“linuxmi.sh”的脚本,需要两个命令行参数。在这种情况下,您可以使用 $# 变量来确保提供了正确数量的参数。
#!/bin/bash# Linux迷 www.linuxmi.comif [[ $# -ne 2 ]]then    echo "Usage: linuxmi.sh [username] [password]"    exit 1fi
$* - 将所有命令行参数作为一个字符串
$* 变量包含作为单个字符串传递给脚本的所有命令行参数。该变量对于需要操作整个命令行字符串的Shell脚本非常有用。
例如,假设您有一个名为“join.sh”的脚本,用于连接作为命令行参数提供的两个字符串。在这种情况下,您可以使用$*变量来连接这些字符串。
#!/bin/bash# Linux迷 www.linuxmi.comjoined="$*
$@ - 将所有命令行参数作为数组
$@ 变量包含作为数组传递给脚本的所有命令行参数。该变量对于需要操作单个命令行参数的Shell脚本非常有用。
例如,假设您有一个名为“list.sh”的脚本,用于列出作为命令行参数提供的目录中的所有文件。在这种情况下,您可以使用$@变量来迭代每个目录名称并列出该目录中的文件。
#!/bin/bash# Linux迷 www.linuxmi.comfor directory in "$@"do    echo "正在列出中的文件 $directory:"    ls -l $directorydone
$? - 最近执行命令的退出状态
$? 变量包含最近执行命令的退出状态。该变量对于需要处理错误或根据命令的成功或失败采取不同操作的Shell脚本非常有用。
例如,假设您有一个名为“create-file.sh”的脚本,用于创建一个文件并返回表示成功或失败的退出状态。在这种情况下,您可以使用$?变量来检查退出状态并采取适当的操作。
#!/bin/bash# Linux迷 www.linuxmi.comtouch linuximi.txtif [[ $? -eq 0 ]]then    echo "文件创建成功"else    echo "创建文件时出错"fi
$$ 变量包含当前脚本的进程ID
该变量对于需要管理多个进程或创建唯一文件名的Shell脚本非常有用。例如,假设您有一个名为“log.sh”的脚本,用于记录信息到一个基于进程ID的唯一文件名的文件中。在这种情况下,您可以使用$$变量来生成一个唯一的文件名。
#!/bin/bash# Linux迷 www.linuxmi.comLOG_FILE="log_$$.txt"echo "正在记录到文件 $LOG_FILE"
$! - 最近后台命令的进程ID
$! 变量包含脚本执行的最近后台命令的进程ID。该变量对于需要管理多个进程或监视长时间运行的命令的Shell脚本非常有用。
例如,假设您有一个名为“www.linuxmi.com.sh”的脚本,用于在后台运行一个命令并记录其进度。在这种情况下,您可以使用$!变量来监视命令的进度。
#!/bin/bash# Linux迷 www.linuxmi.commycommand &pid=$!while ps -p $pid >/dev/null; do    echo "命令仍在运行"    sleep 1doneecho "命令已完成"
总结
Bash 特殊变量提供了有关脚本运行环境的重要信息。这些变量使您能够创建更加灵活、健壮和不容易出现异常或崩溃的Shell脚本。通过掌握这些变量的用法,您可以将自己的Shell脚本技能提升到更高的水平。

感谢 Linux迷 www.linuxmi.com 的精彩分享。
OK,这就是本文的内容。如果还有什么疑问,请在下面的评论区告诉我们。
需要 Linux 精美艺术壁纸的朋友请加小编微信linuxgs口令壁纸)。
来自:Linux迷
链接:https://www.linuxmi.com/bash-special-variables.html
关注我们

长按或扫描下面二维码关注 Linux公社



关注 Linux公社,添加“ 星标 

每天 获取 技术干货,让我们一起成长

合作联系:root@linuxidc.net

相关阅读

  • 用友GRP-U8行政事业财务管理软件漏洞

  • 0x00 前言这两天在客户现场对其内网系统进行渗透时,遇到了用友GRP-U8,是用友GRP-U8R10行政事业财务管理软件(新政府会计制度专版)。于是从网上搜了相关漏洞,这里简单汇总下网上
  • 超实用!带货千万的直播脚本该怎么写?(附模板)

  • 一场直播,主播、选品的重要性不言而喻,但是一场成功的直播,绝对离不开一份逻辑严密,条理分析的直播脚本。很多人在准备写直播脚本的时候,往往无从下手,不懂得如何掌握要点。今天分
  • 杨迪恋爱17年不结婚,分手就该被骂?

  • ☝点击上方观看完整视频☝1今天我很想聊一聊前段时间的一个热搜:杨迪 这次分手与离婚无异。为什么在这个事件已经从热点变成冷点的时候,我还特别想去聊这个事情呢?就是因为我看
  • 意图脚本:简单的自定义指令

  • 我想听周杰伦的歌、我想听林俊杰的歌、快进一分钟、快进五分钟、我想看中央一台、我想看电影频道意图脚本就是为了匹配通用语句,提取关键词,然后根据关键词自由发挥的解决方案
  • 【第2882期】JavaScript中的环境变量: process.env

  • 前言通过在 vercel 部署项目时,需要配置相关环境参数。今日前端早读课文章由 @飘飘翻译分享。正文从这开始~~环境变量是在 JavaScript 执行环境之外定义的。有一组环境变量是由
  • 复活谷歌翻译!

  • “ 大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的全指南,再比如一些限时福利,错过了就是错过了。所以建议大家加个星标,就能

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 漫画科普:如何利用兵法击溃病毒?

  • 本文授权转载自微信公众号“混知”(ID:hey-stone)文章来源于【混知】(ID:hey-stone),这个公众号最擅长的,就是用清晰、贱萌的图片,分享健康领域的知识。谢绝二次转载,如需授权请联系原
  • Bash 特殊变量,功能强大的 Shell

  • 点击上方蓝字 ● 关注Linux公社 Bash 是一个功能强大的 Shell,提供了各种特殊变量,可以用于操作和控制脚本的行为。这些变量提供了有关脚本运行环境的基本信息,包括命令行