shell脚本基本概念和命令小结

cnblogs 2024-06-14 16:15:00 阅读 94

如果把shell命令比成盖房子的砖瓦,那shell脚本就是用一块块砖瓦建起来的房子。

脚本的第一行必须写成类似下面这样的形式:

#!/bin/bash #指定解释器,其他还有dash,Python 等

变量

1.变量定义,赋值,引用

变量由字母和数字组成,值由双引号包含,赋值号的两边不能有空格,例:

A=“I like apple”

echo $A #和makefile一样,用$引用,且不能加括号

2.变量种类

  • 自定义变量,如上的A

  • 系统预定义变量,如PATH

    单独记录下PATH:

    PATH 是一个环境变量,它指定了系统查找可执行文件的目录列表。当你在终端中输入命令时,系统会在 PATH 变量中定义的目录中搜索该命令对应的可执行文件,环境变量 PATH 中的不同路径是用冒号 (:) 分隔。

    # 将 /opt/myapp/bin 目录添加到 PATH 开头

    export PATH=/opt/myapp/bin:$PATH

    # 或者,将 /opt/myapp/bin 目录添加到 PATH 末尾

    export PATH=$PATH:/opt/myapp/bin

    # 仅在 /usr/local/bin 和 /usr/bin 中查找命令

    PATH=/usr/local/bin:/usr/bin

    # 在脚本中设置 PATH 为你所需要的值

    #!/bin/bash

    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/custom/path

  • 命令行的变量,$#,$*等。

在 Shell 脚本中,有一些特殊变量用于处理脚本的参数和其他相关信息。以下是一些常见的特殊变量及其含义(所用不多,暂不举例):

  1. $#:传递给脚本或函数的参数个数。

  2. $*:以一个单词显示所有参数(参数被视为一个整体)。

  3. $@:以各自独立的形式显示所有参数(每个参数仍然是独立的)。

  4. $0:脚本或命令本身的名称。

  5. $1$2、...、$N:传递给脚本或函数的各个参数(第一个参数是 $1,第二个参数是 $2,依此类推)。

  6. $?:上一个命令的退出状态(返回值)。

  7. $$:当前 Shell 进程的进程 ID (PID)。

  8. $!:后台运行的最后一个进程的进程 ID (PID)。

  9. $_:上一个命令的最后一个参数。在交互式 Shell 中,还可以是上一条命令的结果。

特殊符号

双引号,单引号,反引号

  • 双引号 (")

    在双引号内,除了 $、``` 和 \ 以外,其他字符都保持字面值。这意味着变量替换和命令替换仍然有效。

    name="World"

    echo "Hello, $name!"

    # 输出: Hello, World!

  • 单引号 (')

    单引号内的所有字符都保持字面值,不进行任何特殊处理(例如变量替换或命令替换)。

    name="World"

    echo 'Hello, $name!'

    # 输出: Hello, $name!

  • **反引号 (`` `)

    反引号的作用就是在双引号中标识出命令,即将命令的输出赋值给变量或插入到字符串中。使用 $(...) 是更推荐的写法。

    echo "Current date and time: `date`"

    # 示例:date作为一个命令,输出当前日期,并输出

    echo "Current date and time: $(date)"

    # 使用 $()能达到同样的效果

管道 |(竖杠)

管道符号用于将一个命令的输出作为另一个命令的输入。

ls -al | grep "myfile"

# 列出当前目录下全部信息,并筛选出包含 "myfile" 的行

重定向>(大于号)和<(小于号)

  • 输出重定向 (>>>)

    > 将标准输出重定向到文件,会覆盖文件内容。>> 将标准输出追加到文件末尾。

    echo "Hello, World!" > output.txt

    # 将 "Hello, World!" 写入 output.txt,覆盖原内容

    echo "Hello again!" >> output.txt

    # 将 "Hello again!" 追加到 output.txt 末尾

  • 输入重定向 (<)

    < 从文件读取标准输入。

    echo 0<a.txt

    # 读取 a.txt 并打印

  • 错误重定向 (2>2>>)

    2> 将标准错误重定向到文件,会覆盖文件内容。2>> 将标准错误追加到文件末尾。

    ls non_existent_file 2> error.log

    # 将错误信息写入 error.log,覆盖原内容

    ls another_non_existent_file 2>> error.log

    # 将错误信息追加到 error.log 末尾


上一篇: Jenkins持续化集成

下一篇: Linux用wget/curl 发起post请求

本文标签

shell&makefile   


声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。