首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Shell 编程(八):学习总结

文件分隔符一定要选对,否则代码白写,Linux 和 MacOs 上运行建议使用 LF(\n),Windows 运行一定要选 CRLF(\r\n),不然满是包。...单小括号 () 单小括号 (),有三种用途:命令组、命令替换、初始化数组。 命令组:括号中的命令将会新开一个子 shell 顺序执行,所以括号中的变量不能够被脚本余下的部分使用。...[] 单中括号 [],有四种用途:内部命令、比较运算符、字符范围、索引编号 内部命令:bash 的内部命令,[] 和 test 是等同的。...如果我们不用绝对路径指明,通常我们用的都是 bash 自带的命令。if/test 结构中的左中括号是调用 test 的命令标识,右中括号是关闭条件判断的。...在 [[和]] 之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。 字符串的模式匹配:字符串的模式匹配,使用=~操作符时甚至支持 shell 的正则表达式。

1.4K20

shell中的括号(小括号,中括号,大括号)

一、小括号,园括号()   1、单小括号 ()     ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。...,方括号[]   1、单中括号 []     ①bash 的内部命令,[和test是等同的。...如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。...在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。     ②支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。...与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。

3.9K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    shell中各种括号的作用(上)

    一.小括号,圆括号() 单小括号() 1.命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。...再如可以直接使用if (($i使用双括号, 则为if [ $i -lt 5 ]。 二.中括号,方括号[] 单中括号 [] 1.bash 的内部命令,[和test是等同的。...如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。...这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。if/test结构中并不是必须右中括号,但是新版的Bash中要求必须这样。...[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。

    90820

    shell脚本编程之路1

    它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。...进入到了sh exit #退出当前Shell #使用bash命令可以在已有的Bash下创建一个子Shell,同样使用exit退出,调用和退出都是一级一级连贯的....in {0..4},再如 if((i使用双括号,则为if[i使用双括号,则为if[i -lt 5 ] 3.单中括号,方括号[] bash 的内部命令: [和test是等同的...if/test结构中的左中括号是调用test的命令标识/右中括号是关闭条件判断的,注意结构中并不是必须有中括号,但是新版的Bash中要求必须这样。...与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。

    2.7K20

    Linux Shell 中的 ()、(())、]、{} 怎么用是不是还傻傻分不清?

    来源:乌托邦2号 一、小括号,圆括号() 1、单小括号 () ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。...再如可以直接使用if (($i使用双括号, 则为if [ $i -lt 5 ]。 二、中括号,方括号[] 1、单中括号 [] ①bash 的内部命令,[和test是等同的。...如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。...与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。...五、使用 多条命令执行 (1)单小括号,(cmd1;cmd2;cmd3) 新开一个子shell顺序执行命令cmd1,cmd2,cmd3, 各命令之间用分号隔开, 最后一个命令后可以没有分号。

    4.1K20

    shell中各种括号的作用()、(())、]、{}「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 一、小括号,圆括号() 1、单小括号 () ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。...二、中括号,方括号[] 1、单中括号 [] ①bash 的内部命令,[和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。...if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。...④bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。...与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。

    4K40

    Shell编程:流程控制与高级应用的深入解析

    Shell 流程控制使用Shell编程时,流程控制是非常重要的,它允许你根据条件执行不同的命令或者控制程序的执行流程。Shell支持一些基本的流程控制结构,包括条件语句和循环语句。...3、在函数体内,我们使用echo命令来打印一条消息。4、最后,我们在脚本的主体部分调用了my_function函数。这会执行函数体内的代码,从而打印出相应的消息。#!...Shell 输入/输出重定向这些示例展示了如何使用不同的输入/输出重定向操作符来处理命令的输入和输出。你可以根据具体的需求,将这些示例中的操作符和命令组合起来使用。...文件包含在Shell脚本中,你可以使用文件包含来将一个脚本分解成多个文件,以提高可维护性和代码复用。...脚本1.sh# 包含脚本2.shsource 脚本2.sh# 主脚本的内容echo "这是主脚本"# 运行脚本1.sh和脚本2.sh中的命令这样,你可以将一些通用的功能放在单独的脚本文件中,然后在需要的地方包含它们

    20221

    《Linux操作系统编程》第七章 shell的交互功能: 了解shell的启动过程,shell的功能,shell的命令形式,shell程序的建立和运行,理解管道和重定向,环境变量和系统变量以及变量引用

    圆括号形式:括号内的命令任意组合、顺序执行,且由一个子shell来单独控制运行, 相当于一个小的功能程序. 方便灵活, 运行效率高...., 不覆盖filename (4) 标准错误输出重定向 command 2> filename 进程运行中的错误信息重定向到文件filename。...shell的内部命令 shell 的内部命令包含在shell内部, 不是一条单独的操作系统命令, 因此无法在文件系统中查找到。...shell 包含几十条内部命令。在 bash 环境下,输入 help 命令(这也是一条内部命令),就可列出bash的所有内部命令。...$ unset V (7) 输出变量export 新的shell变量定义后或已有的shell变量修改值后, 如果未经export命令输出, 则只在当前的shell中起作用, 对其各个子shell不产生任何影响

    27310

    Linux环境变量 转

    假设用户使用的是BASH ,那么 2.    /etc/bashrc : 在执行完/etc/profile 内容之后,如果用户的SHELL 运行的是bash ,那么接着就会执行此文件。...每个使用bash 的用户在登陆以后执行完/etc/profile 中内容以后都会执行此文件,在新开一个bash 的时候也会执行此文件。...修改上面介绍的那几个环境变量的配置文件 source 当直接执行一个脚本的时候,其实是在一个子shell 环境运行的,即开启了一个子shell 来执行这个脚本,脚本执行完后该子shell 自动退出。...有没有办法在当前shell 中执行一个脚本呢?使用source 命令就可以让脚本在当前shell 中执行。...,在子shell 中不可见 -- 这里什么都没有输出 一、Shell变量分为本地变量和环境变量。

    2.6K10

    Shell base用法描述

    name 变量类型 在shell中存在三种变量 局部变量:::局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。...echo `expr index "$str" is` # 将输出7,即在第七位找到is中的s 他找到的是is中的任意一个字符,那个线出现就返回哪个 主义这里使用的是“而不是”,这个符号在exc下面 1.4...数组 数组定义 bash支持一维数组,不支持多维数组 数组的下标从0开始,获取数组时下边可以使用算术表达式 数组用()包裹,每个子元素都用空格分开 #直接定义 arr1=(1 2 3 4) #单独定义...传参 使用方法 我们在使用脚本文件的时候可以向文件中传递一些参数,脚本则可以使用n这种方式来获取参数,n这种方式来获取参数,0代表文件名,1代表的是第一个参数,1代表的是第一个参数,2代表第二个参数,以此类推...[ -e $file ] 返回 true 1.7. echo命令 输出普通字符串 echo 用于输出字符串,单双引号的作用不同,单引号只输出文本,双引号中可以输出变量,并且双引号也可以省去 name=

    35020

    支持多用户web终端实现及安全保障(nodejs)

    每次在命令行中输入一串命令,敲入回车,终端进程都会fork一个子进程,用来执行输入的命令,终端进程通过系统调用wait4()监听子进程退出,同时通过暴露的stdout输出子进程执行信息。...由于伪终端主设备是在父进程中执行系统调用的创建的,而且主设备的文件描述符通过fd暴露给node层,那么伪终端的输入输出也就通过读写根据fd创建对应的文件类型如PIPE、FILE来完成。...)-- 通过volume “/usr/local/bin/docker”等二进制文件,使用宿主机的docker命令,开启兄弟镜像运行构建服务。...在指定根目录下无法跳出该目录,因此无法访问原系统的所有目录;同时chroot会创建一个与原系统隔离的系统目录结构,因此原系统的各种命令无法在“新系统”中使用,因为它是全新的、空的;最后,多个用户使用时他们是隔离的...此处的初始化shell指的是预处理脚本,由于chroot需要针对每个用户设置根目录,因此在shell中为每个开通命令行权限的使用者创建对应的user,并通过jailkit配置文件拷贝基本的二进制文件及其

    1.7K50

    入侵检测之syscall监控

    操作系统中断处理流程: 其系统调用执行流程如下: 根据其功能将其主要分为3大类: (1)进程控制类fork 创建一个子进程 clone  按照指定条件创建子进程 execve 运行可执行文件 … (...开启另外的终端,监听本地的4444端口 反向跟踪,可以看到调用的syscall为ptrace 0x06:持久化之文件属性syscall监控 在权限提升和持久化中,设置setuid或setgid位,使应用程序将分别以拥有用户或组的特权运行...,以确保他们将来能够在提升的环境中执行,也是常见的操作,可以使用chmod实现。...其主要原理为将标准输入以及标准输出是否指向一个socket或pipe 以最简单的bash反弹为例: Linux bash是从左向右读取这条命令的,首先系统会创建bash -i子进程,并分配文件描述符:...,如bash、perl、python等 对应的syscall为socketcall 0x08:命令执行之syscall监控 snoopy轻量级的lib库,用来记录系统中所有执行过的命令以及参数,实际使用场景中结合

    2.6K10

    Shell脚本编程_shell简单脚本

    . & 代表后台运行并且生成 nohup.log 日志文件 # command>/dev/null 代表命令输出结果导入到空设备 # 2>&1 代表将标准错误的内容重定向到标准输出,即将程序运行中的错误信息也打印出来...bash shell 中内置的变量,在脚本代码中调用通过命令行传递给脚本的参数。...func_name ③ 删除函数 unset func_name (3) 函数调用 函数的调用方式: 可在交互式环境下定义函数 可将函数放在脚本文件中作为它的一部分 可放在只包含函数的单独文件中 函数的生命周期...可以将经常使用的函数存入一个单独的函数文件,然后将函数文件载入 shell,再进行调用函数 文件名可任意选取,但最好与相关任务有某种联系,例如:functions 一旦函数文件载入 shell,就可以在命令行或脚本中调用函数...: 使用 echo 等命令进行输出 函数体中调用命令的输出结果 函数的退出状态码: 默认取决于函数中执行的最后一条命令的退出状态码 自定义退出状态码,其格式为: return 从函数中返回,用最后状态命令决定返回值

    8K10

    用 JS 编写自动化脚本,而不是 bash!

    zx 涵盖了多个软件包提供的功能: node-fetch:使用与浏览器中相同的 API 发出 HTTP 请求 fs-extra:运行文件系统 Globby:匹配给定用户友好模式的文件名 接下来是他所分享的一些看法...对,MacOS 是兼容 POSIX 的,但是许多命令在选项和输出格式上仍然有细微的差异。现在,你需要 Windows 支持吗?...在 bash 中,有两个麻烦的选项可以与基于 node 的工具集成: 通过奇怪的选项格式调用 CLI。 编写一个最小的 JS 包装器来调用 node API,从 bash 调用它。...也可以 —— 在 node 中,这可以通过 child_process 异步且跨平台地完成!你甚至可以在不同的进程之间使用管道输出,就像 shell 的管道操作符 |。...bash 也擅长于流程管理,但对我来说,有太多的可能性了——参考这个 stackoverflow 问题:里面提到有五种不同的并行运行命令的方式,如果你不知道自己在做什么,这就很容易让你搬起石头砸自己的脚

    2.1K50

    第三十七章 : 奇珍异宝

    三个命令的输出都重定向到一个名为 output.txt 的文件中。...行22-27:输出文件列表。为做到这一点,使用了 “${array[@]}” 参数展开,展开成整个的数组元素列表,并且每个元素被当做是一个单独的词。从而允许文件名包含空格的情况。...然而,一个组命令在当前 shell 中执行它的所有命令,而一个子 shell(顾名思义)在当前 shell 的一个子副本中执行它的命令。这意味着运行环境被复制给了一个新的 shell 实例。...20章中看到过一个子 shell 运行环境问题的例子,当我们发现管道线中的一个 read 命令不按我们所期望的那样工作的时候。...通常这涉及到启动一个脚本,依次,启动一个或多个子脚本来执行额外的任务,而父脚本继续运行。然而,当一系列脚本以这种方式运行时,要保持父子脚本之间协调工作,会有一些问题。

    61710

    一篇文章从了解到入门shell

    推荐在终端的交互式使用中使用zsh,再安利一个插件Oh My Zsh 其实我个人的理解是,在终端中使用shell,基本上只是调用各种命令,比如:curl cat ls等等,基本不会使用到zsh的编程,所以终端中使用..."a=$a" 来个比较过分的 cat text.txt 把1.sh文件的内容出入到cat,然后cat在输出到text.txt中,相当于,把1.sh的内容输出到text.txt中了...中,有几个符号要非常注意,用的也比较多,不要搞混了,搞混了,逻辑运算很容易出错 4.7.1、单小括号() 命令组 括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用...' ;; esac 4.10、函数 shell也可以用户定义函数,然后在shell脚本中可以随便调用。...后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

    2.1K30

    Linux下Shell脚本的调试

    实际中,使用该标识可以在执行某行代码之前输出改行代码。这对于我们查找脚本错误是非常有帮助的。...但是,通过使用-v标识,在脚本运行过程中,起码你可以知道当前脚本的执行状态。 Combining the -n & -v Options 我们也可以将多个标识进行组合(-n和-v)。...通过这种组合可以得到更多好处,因为我们在查看脚本输出的过程中同时也检查了语法错误。 让我们再来看前面讨论过的脚本文件“debug_quotes.sh”。...x标识,是xtrace或者execution trace的缩写,��Shell执行完每一小步(每个子命令)后会输出每一步的结果。...因此,我们可以看到变量和值和命令的结果。通常情况下,单独的-x命令可以帮助我追溯脚本的问题。 大多数时候,-x标识都会提供关于脚本的特别有用的信息,但是它也会导致大量的输出。

    31910

    shell(二)

    shell(二) 1.shell流程控制 1.1简单流程控制语句 1.1.1if判断语句 首先我们通过一个示例来展示单分支if语句: 需求:如果输入的参数为 man,那么输出您的性别为男。 #!...执行上面的脚本: ethanyan@ethanyan-PC:~$ bash fun1.sh my name is ethanyan 注意:在调用函数的时候没有括号。...5.2.2复杂脚本编写 手工执行的命令一定要可执行。 根据发布流程编写脚本的框架。 将手工执行的命令填充到对应的框架函数内部。 增加日志功能,方便跟踪脚本历史执行记录。 主函数中逻辑流程控制好。...成对的符号,要成对写,避免丢失。 函数调用。写好函数后,一定要在主函数中进行调用。 避免符号出现中文。 命令变量的写法一定要规范。 固定的内容一定要变量实现,方便以后更改。 日志的输出。...优质文章推荐: 公众号使用指南 redis操作命令总结 前端中那些让你头疼的英文单词 Flask框架重点知识总结回顾 项目重点知识点详解 难点理解&面试题问答 flask框架中的一些常见问题

    97420

    Linux:进程替换

    加载器的理解: argv这个参数会被传递给ls,其实exec系列接口含义也是如此,在命令行参数中,有所的进程都是bash的子进程,所以exec其实就是一个代码级别的加载器,他可以做到将可执行程序的代码和数据导入到内存中...脚本语言不是脚本在跑,而是由解释器来解释执行 我们想要执行脚本文件的话,路径传的就不是脚本文件,而是脚本文件的解释器, bash+test.sh则是作为命令行参数。 .../0         我们可以使用strtok这个函数   返回的 i-1 可以用来帮我们检测当前的选项个数  传递给argc 2.4 普通命令 我们普通命令就是bash让子进程去帮助我们完成,所以我们要做的其实就是...,所以表里面存的是指针,本质上是一个指针数组, 所以我们如果将字符串信息保留在栈帧中,那么当被释放的时候就找不到这个环境变量了,因此我们必须单独维护一段空间  环境变量是你在shell启动的时候从用户目录底下的配置文件读取的...// 4.0 分析输入的命令行字符串,获取有多少个|, 命令打散多个子命令字符串 // 4.1 malloc申请空间,pipe先申请多个管道 // 4.2 循环创建多个子进程

    13410
    领券