当前位置:

首页 > 软件教程 > Linux Shell脚本中特殊字符的用法

Linux Shell脚本中特殊字符的用法

在LinuxShell脚本中,预定义了一些特殊参数,它们分别代表不同的含义和返回值,下面逐一进行总结。1.【$0】:脚本名$0返回当前执行的shell脚本的名称。2.【1-9】:命令行参数1到9$1-$9这9个分别代表脚本执行命令第一个参数、第二个参数、第三个参数……第9个参数。例如,假设我们有一个名为test.sh的Shell脚本,它的内容如下:#!/bin/bashecho"Scriptname:$0"echo"Firstargument:$1"echo"Secondargument:$2"在运行脚本

本文目录

    在Linux Shell脚本中,预定义了一些特殊参数,它们分别代表不同的含义和返回值,下面逐一进行总结。

    1. 【$0】:脚本名

    $0返回当前执行的shell脚本的名称。

    2.【1-9】:命令行参数1到9

    $1-$9这9个分别代表脚本执行命令第一个参数、第二个参数、第三个参数……第9个参数。

    例如,假设我们有一个名为 test.sh 的Shell脚本,它的内容如下:

    #!/bin/bash
    
    echo "Script name: $0"
    echo "First argument: $1"
    echo "Second argument: $2"

    在运行脚本时,我们可以给它传递两个参数,比如:

    ./test.sh hello world

    这时候脚本会输出:

    Script name: test.sh
    First argument: hello
    Second argument: world

    说明 代表脚本名,1 代表第一个参数,$2代表第二个参数。

    3.【 $#】:参数个数

    它表示所有参数的个数。

    #!/bin/bash
    
    echo "Number of arguments: $#"

    运行脚本 ./test.sh hello world,输出 Number of arguments: 2

    4. 【$*】:所有参数

    $*表示所有参数。

    #!/bin/bash
    
    echo "All arguments: $*"

    运行脚本 ./test.sh hello world,输出 All arguments: hello world

    5. 【$@】:所有参数

    $@也表示所有参数:

    #!/bin/bash
    
    echo "All arguments: $@"

    运行脚本 ./test.sh hello world,输出 All arguments: hello world

    上面$*和$@都是用来获取所有脚本参数的特殊变量。它们之间的区别在于,如何将参数作为单个字符串或多个独立字符串进行处理。

    • $*会把所有的参数解释成一个单词(单个字符串),即每个参数之间不会加上空格,全部组合成一个字符串,用IFS(默认是空格)分隔。所以,将*放在双引号里,预处理$符号,保持长字符串的完整性:
    #!/bin/bash
    
    echo "Using $*:"
    for arg in "$*"; do
    echo $arg
    done
    • $@会把所有的参数看成是独立的单词(多个独立的字符串),即每个参数之间加上空格,将每个参数作为一个独立的字符串处理。
    #!/bin/bash
    
    echo "Using $@:"
    for arg in "$@"; do
    echo $arg
    done

    下面我们可以通过一个示例来理解两者的区别。假设我们有一个shell脚本,名为 test.sh 并拥有以下内容:

    #!/bin/bash
    
    echo "Using $*:"
    for arg in "$*"; do
    echo $arg
    done
    
    echo "Using $@:"
    for arg in "$@"; do
    echo $arg
    done

    然后,在终端上执行以下命令:

    $ ./test.sh one two three

    当我们执行脚本时,输出如下所示:

    Using $*:
    one two three
    Using $@:
    one
    two
    three

    我们可以看到,使用∗时,所有参数都解释为单个字符串,由空格分隔。

    而使用@时,每个参数都被解释为一个单独的字符串,并独立处理。

    在大多数情况下,使用$@是更加灵活和安全的选项,因为它可以独立处理每个参数,而不会将它们合并为单个字符串。

    6. 【$?】:上一个命令的退出状态码

    #!/bin/bash
    
    ls /
    echo "Exit status code: $?"

    由于ls /应该会执行成功,因此运行脚本后输出 Exit status code: 0,表示上一个命令执行成功。

    7. 【$$】:当前进程ID号

    $$ 是一个特殊的变量,用于获取当前正在运行的Shell脚本的进程ID(PID)。

    这个变量对于在Shell脚本中跟踪和识别进程非常有用,或者将PID用于生成唯一的临时文件名。

    以下是一个简单的示例脚本,它使用$$变量来创建一个唯一的临时文件名:

    #!/bin/bash
    
    tempfile=/tmp/myprog.$$
    
    echo "Program is running with PID $$."
    echo "Temp filename is $tempfile."
    
    #rest of the script goes here...

    在上述示例中,我们使用了$$变量来创建一个唯一的文件名,将其存储在$tempfile变量中,并在控制台输出当前脚本运行的进程ID。这个唯一的文件名将被用于存储程序输出或其他的过程。

    使用$$变量时,需要注意它只能获取当前Shell脚本的PID而不能获取任何子进程或后台任务的PID。

    8. 【$!】:最近一次在后台运行的进程的PID号

    在Linux Shell脚本中,!是一个特殊变量,用于获取最近一次在后台运行的进程的PID号(进程ID号)。

    ! 通常用于在脚本中启动后台进程,并且需要获取后台进程的PID号。

    以下是一个示例脚本 test.sh,它使用&运算符来将程序启动到后台运行,并使用$!变量获取需要的PID号:

    #!/bin/bash
    
    echo "Starting background process..."
    sleep 5 &
    background_pid=$!
    echo "The background process PID is: $background_pid"

    上述脚本中的sleep命令会在后台执行5秒钟,并执行$!将其PID号赋值给变量background_pid。

    最后,脚本会输出后台进程的PID号。

    执行该脚本的命令是:./test.sh,其输出如下:

    Starting background process...
    The background process PID is: 12345

    其中,12345应该是实际执行中sleep进程的PID号,其值随机。

    9. 【$-】:获取当前Shell的选项标志

    $- 是一个特殊变量,用于获取当前Shell的选项标志(Option Flags)。选项标志是Shell用来控制其行为的一些特殊设置。

    $- 可以用来获取当前Shell所使用的选项标志,通常应用于Shell脚本的调试中,可以帮助我们诊断问题。

    以下是一个示例脚本 test.sh,它使用$-变量获取当前Shell的选项标志及其含义:

    #!/bin/bash
    
    echo "Value of $-: $-"

    上述脚本中,echo命令会输出当前Shell的选项标志。

    执行该脚本的命令是:./test.sh,其输出如下:

    Value of $-: himBH

    上述输出中,选项标志中包含了5个字符,分别表示以下内容:

    • h:bash shell启用hash命令时将完成命令名和缓存条目之间的HASH值打印到标准错误输出中;
    • i:交互模式运行,即标准输入与终端相连;
    • m:启用作业控制功能;
    • B:启用Brace Expansion(花括号扩展)机制;
    • H:Shell扩展历史记录功能,寻找法:$HOME/.bash_history,如果该文件不存在则新建一个。

    10. 【$IFS】:指定Shell脚本中的字段分隔符

    $IFS是一个特殊变量,用于指定Shell脚本中的字段分隔符。字段分隔符是将一行输入或输出按照不同的字段拆分开来并存储在不同的变量中的标记。

    默认情况下,$IFS的值为空格,制表符和换行符。但是,我们可以将其设置为其他的分隔符来满足特定的需求。

    以下是一个示例脚本 test.sh,它使用$IFS变量来指定不同的分隔符,将一行输入按照分隔符分成不同的变量:

    #!/bin/bash
    
    echo "Enter a line of values separated by commas (','):"
    read line
    
    echo "Default IFS values: '$IFS'"
    IFS=","
    echo "Custom IFS value set to: '$IFS'"
    
    echo "Values entered:"
    for value in $line
    do
    echo "$value"
    done

    上述脚本中,通过read命令读取一行输入,并通过将$IFS设置为逗号来将输入行分隔成不同的变量。最后,使用for循环按顺序输出不同的变量。

    执行该脚本的命令是:./test.sh,它会提示用户输入一个以逗号分隔的值列表。然后,它将逗号设置为分隔符并按顺序输出每个值。下面是一些示例输入和输出:

    输入:

    a,b,c,d,e

    输出:

    Default IFS values: 'n'
    Custom IFS value set to: ','
    Values entered:
    a
    b
    c
    d
    e

    在上述输出中,$IFS的初始值为默认值(空格、制表符、换行符),该输入字符串以逗号分隔,然后按逗号分隔的方式打印每个值。

    这是一个非常有用的用法,可以将一行以逗号或其他字符分隔的值按分隔符分成不同的变量,进一步处理这些变量值。

    关于shell中这10个特殊变量,总结如下:

    Linux shell脚本中特殊字符含义有哪些

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程
    相关文章 更多
    Linux编程环境
    Linux编程环境

    接触Linux编程,首先得摸清它的脾气,理解几个关键点,再熟悉一下手头的工具,才能事半功倍。 一、Linux下的编程环境 在Linux系统的程序设计中,有一些重要特性要特别注意: 1. Linux天生就是多任务系统。同一时刻可以跑很多进程或线程,所以千万别以为你的程序是唯一的实例,同一个用户或不同用

    Linux Shell脚本之流程控制语句举例详解
    Linux Shell脚本之流程控制语句举例详解

    Shell脚本流程控制包含:if/elif/else条件判断实现分支执行;for/while/until循环实现重复任务;case分支选择处理多条件匹配;而break/continue则分别用于跳出当前循环和提前进入下一次循环。这些控制结构共同构成脚本的逻辑基础,使自动化任务灵活高效。

    WMV网页播放器参数中文详解
    WMV网页播放器参数中文详解

    下面这段代码,是一个基于经典的Windows Media Player ActiveX控件,用来在网页中嵌入视频播放器的完整示例。别看它现在似乎有点“古早”,但在某些特定场景下,这种实现方式依然有它的参考价值。 整段代码的核心是一个 标签,它负责在页面中引入并实例化播放器控件。我们来逐层拆解一下它的

    华为盘古 Ultra MoE 模型发布
    华为盘古 Ultra MoE 模型发布

    5月30日,华为推出了全新的AI模型——盘古UltraMoE,该模型的参数量达到了7180亿。作为一款接近万亿参数的MoE(MixtureofExperts)模型,它在整个训练过程中完全基于华为的昇腾AI平台完成,标志着华为在超大规模模型训练方面取得了重要进展。盘古UltraMoE的成功训练离不开盘古团队研发的一系列创新技术。例如,Depth-ScaledSandwich-Norm(DSSN)稳定架构的引入,显著改善了超大规模模型训练期间出现的梯度异常及

    在Docker中构建长时间运行的脚本的一些方法
    在Docker中构建长时间运行的脚本的一些方法

    文件系统作为持久数据结构:一个被低估的Docker实战技巧 今天要分享的,是一个关于Docker相当实用的应用场景。先别急着认为这又是一篇泛泛而谈Docker优点的文章,咱们的重点其实在于,如何把文件系统本身当作一个可持久化的数据结构来用。 所以,这篇文章的核心思路,并不仅限于Docker或AUFS

    Solaris 系统查看系统中CPU的数目
    Solaris 系统查看系统中CPU的数目

    要查看系统处理器信息,psrinfo(1M)命令是标准工具。不过,在多内核与多线程技术普及的今天,直接运行命令看到的可能并非物理CPU的实际数量。这时,加上-vp参数就非常关键了。 来看一个典型的例子: # psrinfo -vp The physical processor has 32 virt

    这些操作系统你一定听过!
    这些操作系统你一定听过!

    本文公众号来源:Java建设者作者:cxuan本文已收录至我的GitHub操作系统概念大部分操作系统提供了特定的基础概念和抽象,例如进程、地址空间、文件等,它们是需要理解的核心内容。下面我们会简要介绍一些基本概念,为了说明这些概念,我们会不时的从UNIX中提出示例,相同的示例也会存在于其他系统中,我们后面会进行介绍。进程操作系统一个很关键的概念就是进程(Process)。进程的本质就是操作系统执行的一个程序。与每个进程相关的是地址空间(addressspace),这是从某个最小值的存储位置(通常是

    PowerShell 后门配置 | Windows 安全隐患解析
    PowerShell 后门配置 | Windows 安全隐患解析

    PowerShell控制台与Bash不同,支持多个配置文件。这些配置文件的执行顺序如下:所有用户,所有主机:Windows:$PSHOME\Profile.ps1Linux:/opt/microsoft/powershell/7/profile.ps1macOS:/usr/local/microsoft/powershell/7/profile.ps1所有用户,当前主机:Windows:$PSHOME\Microsoft.PowerShell_profile.ps1Linux:/opt/m

    C++ 函数参数详解:避免参数过多带来的复杂性
    C++ 函数参数详解:避免参数过多带来的复杂性

    问题:如何避免函数参数过多带来的复杂性?答案:使用默认参数。将相关参数组合成结构。使用可变参数。重载函数。

    腾讯文档脚本怎么用?操作教程分享
    腾讯文档脚本怎么用?操作教程分享

    腾讯文档脚本功能基于GoogleAppsScript,通过编写JavaScript代码实现文档自动化操作。1.打开脚本编辑器:通过“工具”->“脚本编辑器”进入编写界面;2.编写脚本:使用JavaScript语言调用GASAPI,例如复制单元格内容;3.运行脚本:点击运行按钮并授权访问权限;4.调试脚本:查看日志排查错误;5.设置触发器:定义脚本自动运行的条件。脚本可实现数据处理、自定义公式、数据验证、批量操作和发送邮件等功能,但需注意安全性问题及学习成本、调试难度和性能限制等局限性。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。