精华内容
下载资源
问答
  • bash脚本添加头注释In Bash script, it is common that multiple small commands run together connected by pipes (|) and the whole command is quite long. For clarity, we may write the command in multiple ...

    bash脚本添加头注释

    In Bash script, it is common that multiple small commands run together connected by pipes (|) and the whole command is quite long. For clarity, we may write the command in multiple lines. How to add comments for these long multi-line commands? In Bash, the content after # in a line is the comment. Using a single comment line before the multi-line command is not convenient as the command may be quite complex. The best way is still inline comments as we do in many other programming languages. In this post, we discuss 2 techniques used in 2 different scenarios.

    在Bash 脚本中 ,通常有多个小命令通过管道( | )连接在一起运行,并且整个命令很长。 为了清楚起见,我们可以多行编写命令。 如何为这些长的多行命令添加注释? 在Bash中,一行中#后面的内容是注释。 在多行命令之前使用单个注释行并不方便,因为该命令可能非常复杂。 最好的方法仍然是内联注释,就像我们在许多其他编程语言中所做的一样。 在本文中,我们讨论了在两种不同情况下使用的两种技术。

    多行管道连接命令的内联注释 (Inline comments for multi-line pipe-connected commands)

    For pipe-connected commands, we use the interesting feature of bash that the pipe | connects 2 subshells and the subshells can have empty lines before it. So we can add a comment after the | and a new line then the next command. One example is as follows.

    对于管道连接的命令,我们使用bash的有趣功能,即| 连接2个子Shell,子Shell之前可以有空行。 因此,我们可以在|后添加评论| 和新行,然后是下一个命令。 一个例子如下。

    echo -e "Aabcbb\nAabcbD\nAabcbb" |  # generate the content
         tr a-z A-Z |                   # translate to upper case
         sort |                         # sort the text
         uniq                           # remove duplicated lines

    Grammatically, the commend at the end of each line after | is actually part of the next command. But it is natural for readers of the script to consider the comment to describe the command before the |. Cool, right?

    在语法上,在| 实际上是下一个命令的一部分。 但是,对于脚本的读者来说,在|之前考虑注释来描述命令是很自然的| 。 酷吧?

    用\ <newline>分隔的多行命令的行内注释 (Inline comments for multi-line commands separated by \<newline>)

    Now, we don’t have the nice grammar help from the |. We need the techniques making use of the command substitution feature. The command of the subshell can include comment too and the comment ends at the end of the subshell command. So, a command as follows is valid and the comment in the substitution command can be considered as the "inline comment" for that line.

    现在,我们没有|语法帮助| 。 我们需要使用命令替换功能的技术。 子shell的命令也可以包含注释,并且注释在subshel​​l命令的结尾处结束。 因此,以下命令是有效的,并且替换命令中的注释可以视为该行的“行内注释”。

    perl -0777 `# whole input as a block` \
     -p `# loop andprint line also` \
     -e 's|<PRE>[\s{<BR>}{<HR>}]*</PRE>||g' 

    But note that this technique is expensive because it creates a subshell for each of such "inline comments" during execution. It is only suitable if the commands performance or cost is not a problem.

    但是请注意,此技术非常昂贵,因为它在执行过程中为每个此类“内联注释”创建了一个子外壳。 仅在命令性能或成本没有问题的情况下才适用。

    翻译自: https://www.systutorials.com/how-to-add-inline-comments-for-multi-line-command-in-bash-script/

    bash脚本添加头注释

    展开全文
  • Bash Shell 注释多行的几种方法

    千次阅读 2015-05-21 16:54:09
    WORD的内容为两个WORD间输入任意内容,这样就可以在脚本中用 cmd 来执行输入而不必再重建一文件。 Here Documents 常用在菜单屏幕中,例如: 复制代码 代码如下: cat 1.List 2.Help ...

    1、最简单方法

    复制代码代码如下:

    :<<BLOCK
    ....注释内容
    BLOCK

    把输入重定义到前面的命令,但是 : 是空命令,所以就相当于注释了。
    如果注释中有反引号的命令就会报错,反引号部分不会被注释掉,例如 var=`ls -l` 就不会被注释掉。

    2、解决注释中有反引号的问题

    A、方法一

    复制代码代码如下:

    :<<BLOCK'
    ....注释内容
    'BLOCK

    B、方法二

    复制代码代码如下:

    :<<'BLOCK
    ....注释内容
    BLOCK'

    C、方法三

    复制代码代码如下:

    :<<'
    ....注释内容
    '

    BLOCK 为 Here Documents 中的定义符号,名称任意,只要前后匹配就行。

    3、: 指令和 Here Documents
    : 就是什么也不做(do nothing)即空命令,一般用在 if...then... 条件中,用作什么也不做的命令,如:

    复制代码代码如下:

    if [ -d $DIRECTORY ]; then
        :
    else
        echo 'the directory do not exit !'
    fi

    下面的例子:

    复制代码代码如下:

    cmd<<WORD
    any input
    file content
    WORD

    是 Here Documents 的用法,意思是将以上的定义符WORD传给某脚本或命令。
    WORD的内容为两个WORD间输入任意内容,这样就可以在脚本中用 cmd 来执行输入而不必再重建一文件。

    Here Documents 常用在菜单屏幕中,例如:

    复制代码代码如下:

    cat <<Menu
    1.List
    2.Help
    3.Exit
    Menu

    至于

    复制代码代码如下:

    :<<WORD
    ....注释内容
    WORD 

    就类似于建一本地文件,然后对它执行空命令,什么也不做,亦即是相当于注释了。

    补充:

    代码如下:

    复制代码代码如下:

    for ((i=0; i<10; i++))
    do
    :<<_a_    
        if [  ]; then 
            ...
        fi
    _a_
        echo ""
    done

    上面的 :<<_a_ 和 _a_ 代表段注释,可以把中间的代码注释掉
     
    _a_ 为 Here Documents 中的定义符号,名称任意,只要前后匹配就行
     
    : 为空命令,相当于什么都不做(do nothing)即空命令,一般用在 if...then... 条件中,用作什么也不做的命令,如:

    复制代码代码如下:

    if [ -d $DIRECTORY ]; then
        :
    else
        echo 'the directory do not exit !'
    fi

     
    如果注释中有反引号的命令就会报错,反引号部分不会被注释掉,例如 var=`ls -l` 就不会被注释掉。
     
        解决注释中有反引号的问题

    复制代码代码如下:

    :<<_a_'
    ....注释内容
    '_a_

    单行的就不说了,井号#可以搞定.下面说多行的.

    一. 通过Here Documents实现:

    1)
    :<<EOF
    注释的代码...
    EOF
    冒号:表示什么都不做.
    说明: 这种方法当注释代码里出现变量引用或者是反引号时,bash会去尝试解析他们,会提示错误信息. 解决方法有下面几种:

    1. 

    复制代码代码如下:

    :<<\EOF
    注释的代码...
    EOF

    2.

    复制代码代码如下:

    :<<'EOF'
    注释的代码...
    EOF

    3.

    复制代码代码如下:

    :<<'EOF
    注释的代码...
    EOF'

    4.

    复制代码代码如下:

    :<<EOF'
    注释的代码...
    'EOF

    5.

    复制代码代码如下:

    :<<'
    注释的代码...
    '

    展开全文
  • bash脚本中单行及多行注释方法

    千次阅读 2019-05-13 15:01:59
    二、多行注释 利用:空命令 1.把输入重定义到前面的命令,而":" 是空命令,所以就相当于注释了。 :<<BLOCK ....我是注释内容 ....我是注释内容 ....我是命令`mkdir test` ....我是注释内容 BLOCK 2.建一本...

    一、单行注释

    直接在行首加"#",如:

    #单行注释,以换行符为界

    二、多行注释

    利用:空命令

    1.把输入重定义到前面的命令,而":" 是空命令,所以就相当于注释了。

    :<<BLOCK
    ....我是注释内容
    ....我是注释内容
    ....我是命令`mkdir test`
    ....我是注释内容
    BLOCK

    2.建一本地文件,然后对它执行空命令,什么也不做,相当于注释了

    :<<WORD
    ....我是注释内容
    ....我是注释内容
    ....我是命令`mkdir test`
    ....我是注释内容
    WORD

    注意:以上方法中如果在注释中出现反引号引用的命令将会执行,存在风险,以上方法均会创建test文件夹。

    三、vi/vim多行注释和取消注释

    1.多行注释:

    1. 进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来

    2. 按大写字母I,再插入注释符,例如#

    3. 按esc键就会全部注释了

    2.取消多行注释:

    1. 进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 # 需要选中2列

    2. 按字母j,或者k选中注释符号

    3. 按d键就可全部取消注释

    参考:https://blog.51cto.com/fufeng/1532877

    展开全文
  • WORD的内容为两个WORD间输入任意内容,这样就可以在脚本中用 cmd 来执行输入而不必再重建一文件。 Here Documents 常用在菜单屏幕中,例如: cat 至于 :注释内容 WORD 就类似于建一本地文件,然后对它执行空命令,...

    1、最简单方法

    :<

    ....注释内容

    BLOCK

    把输入重定义到前面的命令,但是 : 是空命令,所以就相当于注释了。

    如果注释中有反引号的命令就会报错,反引号部分不会被注释掉,例如 var=`ls -l` 就不会被注释掉。

    2、解决注释中有反引号的问题

    A、方法一

    :<

    ....注释内容

    'BLOCK

    B、方法二

    :<

    ....注释内容

    BLOCK'

    C、方法三

    :<

    ....注释内容

    '

    BLOCK 为 Here Documents 中的定义符号,名称任意,只要前后匹配就行。

    3、: 指令和 Here Documents

    : 就是什么也不做(do nothing)即空命令,一般用在 if...then... 条件中,用作什么也不做的命令,如:

    if [ -d $DIRECTORY ]; then

    :

    else

    echo 'the directory do not exit !'

    fi

    下面的例子:

    cmd<

    any input

    file content

    WORD

    是 Here Documents 的用法,意思是将以上的定义符WORD传给某脚本或命令。

    WORD的内容为两个WORD间输入任意内容,这样就可以在脚本中用 cmd 来执行输入而不必再重建一文件。

    Here Documents 常用在菜单屏幕中,例如:

    cat <

    1.List

    2.Help

    3.Exit

    Menu

    至于

    :<

    ....注释内容

    WORD

    就类似于建一本地文件,然后对它执行空命令,什么也不做,亦即是相当于注释了。

    补充:

    代码如下:

    for ((i=0; i<10; i++))

    do

    :<<_a_>

    if [  ]; then

    ...

    fi

    _a_

    echo ""

    done

    上面的 :<<_a_ _a_>

    _a_ 为 Here Documents 中的定义符号,名称任意,只要前后匹配就行

    : 为空命令,相当于什么都不做(do nothing)即空命令,一般用在 if...then... 条件中,用作什么也不做的命令,如:

    if [ -d $DIRECTORY ]; then

    :

    else

    echo 'the directory do not exit !'

    fi

    如果注释中有反引号的命令就会报错,反引号部分不会被注释掉,例如 var=`ls -l` 就不会被注释掉。

    解决注释中有反引号的问题

    :<<_a_>

    ....注释内容

    '_a_

    单行的就不说了,井号#可以搞定.下面说多行的.

    一. 通过Here Documents实现:

    1)

    :<

    注释的代码...

    EOF

    冒号:表示什么都不做.

    说明: 这种方法当注释代码里出现变量引用或者是反引号时,bash会去尝试解析他们,会提示错误信息. 解决方法有下面几种:

    1.

    :<

    注释的代码...

    EOF

    2.

    :<

    注释的代码...

    EOF

    3.

    :<

    注释的代码...

    EOF'

    4.

    :<

    注释的代码...

    'EOF

    5.

    :<

    注释的代码...

    '

    展开全文
  • #!/bin/sh mysql -u root -pcloud <<EOF 2>/dev/null use nova; alter table instance_types add column t_price double UNSIGNED ZEROFILL NULL DEFAULT NULL; exit; EOF
  • bash脚本创建变量 在本系列的第一篇文章中,您创建了一个很小的单行Bash脚本,并探讨了创建Shell脚本的原因,以及为什么它们是系统管理员而非编译程序最有效的选择。 在第二篇文章中,您将开始创建一个Bash脚本...
  • bash脚本

    2017-08-29 21:38:49
    bash脚本语法总结
  • 其实这就是一个多行逐一以纵向的方式输出,只不是行之间多了一个空格。 如果要把行变成纵向读的话,那我是不是可以把第行的字对应纵向拼出来就行了,思路如下: 1.上面有4行我们可以拿4个变量去存,分别为str1、str2...
  • 如何获取其中的目录路径的Bash脚本所在,该脚本里面 ? 例如,假设我要使用Bash脚本作为另一个应用程序的启动器。 我想将工作目录更改为Bash脚本所在的目录,以便可以对该目录中的文件进
  • Bash脚本教程之函数

    千次阅读 多人点赞 2020-07-07 10:13:33
    函数总是在当前 Shell 执行,这是跟脚本的一个重大区别,Bash 会新建一个子 Shell 执行脚本。如果函数与脚本同名,函数会优先执行。但是,函数的优先级不如别名,即如果函数与别名同名,那么别名优先执行Bash ...
  • BASH脚本 自动编译

    2020-01-14 15:16:26
    BASH脚本 自动编译 • 1. 自动下载代码 • 2. 为代码生成 makefile • 3. 检测 opencv 是否安装和版本,如果没有 安装则通过脚本自动安装 • 4. 编译生成可执行文件并执行 流程图 Created with Raphaël 2.2.0开始...
  • 所以,我就决定自己写一个Bash脚本,统计服务器的日志,顺便温习一下脚本知识。 事实证明,这件事比我预想的难。虽然最终脚本只有20多行,但花了我整整一天,反复查看手册,确认用法和合适的参数。下面就是我的...
  • Bash 脚本笔记

    2019-09-23 15:35:19
    bash 特殊字符(上) 1.将文件中内容清空而保留文件 cat /dev/null > example.file 因为 /dev/null 是空的,重定向到 example.file后,就清空了example.file里的内容。 2. 单分号(;)与双分号(;;) 使用单...
  • Bash脚本教程之变量

    2020-07-06 22:45:29
    环境变量是 Bash 环境自带的变量,进入 Shell 时已经定义好了,可以直接使用。它们通常是系统定义好的,也可以由用户从父 Shell 传入子 Shell。 env命令或printenv命令,可以显示所有环境变量。 $ env # 或者 $ ...
  • 生产力工具:shell 与 Bash 脚本 作者:吴甜甜 个人博客网站: wutiantian.github.io 注意:本文只是我个人总结的学习笔记,不适合0基础人士观看。 参考内容: 王顶老师 linux bash 视频教程 ...
  • 高级bash脚本编程指南

    2020-03-27 20:36:45
    高级bash脚本编程指南 本文仅为初步了解,并未涉及较深入的内容。 学习环境:实验楼(linux系统) bash介绍与入门 什么是Bash? 1.简介 Bash(GNU Bourne-Again Shell)是一个为GNU计划编写的Unix shell,它是许多Linux...
  • Bash脚本教程之基本语法

    多人点赞 热门讨论 2020-07-06 21:40:38
    目录 echo 命令 -n参数 -e参数 命令格式 空格 分号 命令的组合符&&和|| type 命令 快捷键 echo 命令 ...如果想要输出的是多行文本,即包括换行符。这时需要把多行文本放在引号里面.
  • echo -ne "内容\r"可以实现 -n,不换行;-e和\r配合,光标移至行首。不换行,覆盖原内容。
  • Bash脚本教程之条件判断

    多人点赞 热门讨论 2020-07-07 09:45:56
    if是最常用的条件判断结构,只有符合给定条件时,才会执行指定的命令。它的语法如下。 if commands; then commands [elif commands; then commands...] [else commands] fi 这个命令分成三个部分:if、elif和...
  • bash 脚本编写 人们想要学习Unix shell的一个常见原因是释放批处理的功能。 如果要对多个文件执行某些操作,一种方法是构造一个遍历这些文件的命令。 在编程术语中,这称为执行控制,最常见的示例之一是for循环。 ...
  • 这篇文章介绍一下BASH下的常用的与、或同编写格式的基础知识。
  • 这里的技术技巧最初是来自...我的所有bash脚本都以下面几句为开场白: #!/bin/bash set -o nounset set -o errexit 这样做会避免两种常见的问题: 引用未定义的变量(缺省值为“”) 执行失败的命令被忽略
  • Bash脚本教程之引号和转义

    千次阅读 多人点赞 2020-07-06 22:25:48
    某些字符在 Bash 里面有特殊含义(比如$、&、*)。 $ echo $date $ 上面例子中,输出$date不会有任何结果,因为$是一个特殊字符。 如果想要原样输出这些特殊字符,就必须在它们前面加上反斜杠,使其变成...
  • 高级Bash脚本编程指南

    2015-09-22 13:48:00
    http://tldp.org/LDP/abs/html/高级Bash脚本编程指南对脚本语言艺术的深入探索 本教程不承担以前的脚本或编程知识,但进展迅速走向一个中级/高级水平的指令。..一直偷偷在细小的UNIX®智慧和学识。它作为一本教科书...
  • 所以,我就决定自己写一个Bash脚本,统计服务器的日志,顺便温习一下脚本知识。 事实证明,这件事比我预想的难。虽然最终脚本只有20多行,但花了我整整一天,反复查看手册,确认用法和合适的参数。下面就是我的...
  • bash脚本(上)

    2019-05-16 12:22:44
    vim中插入按i 保存并退出换行按esc然后输入:wq再enter #! 是说明 hello 这个文件的类型,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。 Linux 系统根据 "#!...在 BASH 中 第一...
  • BASH脚本基础:环境变量PS2介绍

    千次阅读 2020-01-29 21:59:58
    这篇文章介绍一下Bash中的环境变量PS2。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,899
精华内容 4,359
关键字:

bash脚本执行多行