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

Shell:子shell概念

Shell脚本是从上至下、从左至右依次执行每一行的命令及语句的,即执行完一个命令之后再执行下一个。...如果在Shell脚本中遇到子脚本(即脚本嵌套),就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句。...可以使用$BASH_SUBSHELL变量来查看从当前进程开始的子shell层数,$BASHPID查看当前所处BASH的PID,这不同于特殊变量$$值,因为$$在大多数情况下都会从父shell中继承。...注意:子 Shell 虽然能使用父 Shell 的的一切,但是如果子 Shell 对数据做了修改,比如修改了全局变量,那么这种修改只能停留在子 Shell,无法传递给父 Shell。...不管是子进程还是子 Shell,都是“传子不父”。

1.3K30

Shell 简明教程

如果终端或远程登录,那么登录 Shell 是该用户的所有其他进程的父进程,所以环境变量在登录 Shell 的启动脚本里设置一次就可以自动带到其他非登录 Shell 里,而本地变量、函数、 alias 等设置没有办法带到子..."$BASH_ENV"; fi 2.4. 以 sh 命令启动 如果以 sh 命令启动 bashbash 模拟 sh 的行为。 如果作为交互登录 shell 启动,则会依次执行: 1....算术代换 — $(()) Shell 会将 $(()) 中的 Shell 变量的取值转换成整数用于算术计算(其他情况下 Shell 都将变量视为字符串,无法进行算术计算) VAR=45 echo $((...echo 'ABC\\' 会显示 ABC\ 双引号也将其中的字符串视为字面值,但是反引号、$、转义字符等等都保持原来的意义。 如: echo "$SHELL" 会显示 /bin/bash。...Shell函数没有参数列表并不表示不能参数,事实上,函数就像是迷你脚本,调用函数时可以任意个参数,在函数内同样是用 0 、 1 、 2 等变量来提取参数,函数中的位置参数相当于函数的局部变量,改变这些变量并不会影响函数外面的

2K40
您找到你想要的搜索结果了吗?
是的
没有找到

如何入门 Bash 编程

编写基本的脚本来运行命令,只不过是复制我用来从 PDF 中删除图像的命令和选项,并将其粘贴到文本文件中而已。这个文件作为脚本运行,大概也会产生同样的结果。...向 Bash 脚本参数 在终端中运行命令与在 Shell 脚本中运行命令之间的区别在于前者是交互式的。在终端中,你可以随时进行调整。...初始变量是 $0,它代表了启动脚本命令。下一个变量是 $1 ,它表示传递给 Shell 脚本的第一个 “参数”。...但是通过创建一个接受我的输入的脚本,我可以一次几个 PDF 文件全部提交给脚本。该脚本按顺序处理了每个文件,这可能需要半小时或稍长一点时间,但是我可以用半小时来完成其他任务。...脚本都需要先使用 Bash,然后学习如何这些脚本从仅仅是一个命令列表变成响应输入的东西。

92530

Linux常用命令13 - echo

echo 命令是 Linux 中最基本和最常用的命令之一。 传递给 echo 的参数被打印到标准输出中。 echo 通常用于 shell 脚本中,用于显示消息或输出其他命令的结果。...echo 命令 echo 是 Bash其他大多数流行的 shell,如 Zsh 和 Ksh 中的一个 shell 内置程序。 它的行为在不同的 shell 中略有不同。...我们介绍 Bash 内置版本的 echo。 ?...命令 虽然没有必要,但是递给的参数包含起来是一个很好的编程实践双引号或单引号 当使用单引号时'' 保留引号内每个字符的字面值。...不展开变量命令 举个栗子 下面的例子展示了如何使用 echo 命令: 在标准输出上显示一行文本。 echo Hello, World! Hello, World! 显示一行包含双引号的文本。

3.8K30

自媒体良器:音频文件批处理,FFmpeg一行搞定!果断收藏

但也拦不住,FFMpeg 本身是命令行程序,可编写脚本,借助 Bash 轻松快速地构建自动化程序。 ? 1 - 设置变量 使用 FFMpeg 处理批处理文件转换的唯一高效方法是通过 Bash 脚本。...首先,创建一个 Bash 脚本文件。 touch ffmpeg-batch.sh 接下来,使用您喜欢的文本编辑器打开它,并将其设置为bash脚本。 #!.../bin/bash脚本将对文件路径、扩展名和 FFMpeg 选项使用一系列变量。 通过这种足够灵活的方式,你可以在不同参数位置,传递不同的文件,并在参过程中选择文件格式。...这样,脚本将能够以相同的文件名导出新转换的文件,而不需要单独指定或重命名文件。 首先,去掉扩展并将其赋给一个新变量。 for filename in "$srcDir"/*....引号是 Bash 每个变量视为字符串所必需的,否则如果中间出现空格,将会解析错误。 ffmpeg -i "$filename" $opts "$destDir"/"$baseName"."

1K10

linux bash环境变量简单总结

系统位置变量—【仅用于shell脚本中获取命令行传递给脚本的参数】 $0、$1 $2 $3 $4 $5 $6 $7 $8 $9,$* ——>$0到9与windows中0~9的含义一样。...:后台运行的最后一个进程号 $_:在此之前执行命令脚本的最后一个参数 引号对变量赋值的影响: 》双引号“”:允许通过$符号引用其他变量值 》单引号‘’: 禁止引用其他变量值,$视为普通字符 》反撇号`...通常而言,shell的功能是从终端或其它输入取得命令行,将其解析为一系列操作指令,调用系统内核或相应的 外部程序执行,然后执行结果返回给终端或其它输出。...主控循环的功能较为简单,它循环读取用户(或脚本)输入,传递给 语法分析器,同时处理下层递归返回的错误。...语法分析器对文本形式的输入首先进行通配符、别名、算术和变量展开等工作,然后通过命令生成器得到 规范的命令结构,并由专门的重定向处理机制填写重定向语义,交由命令执行器执行。

1.8K30

linux bash环境变量简单总结

系统位置变量—【仅用于shell脚本中获取命令行传递给脚本的参数】 $0、$1 $2 $3 $4 $5 $6 $7 $8 $9,$* ——>$0到9与windows中0~9的含义一样。...:后台运行的最后一个进程号 $_:在此之前执行命令脚本的最后一个参数 引号对变量赋值的影响: 》双引号“”:允许通过$符号引用其他变量值 》单引号‘’: 禁止引用其他变量值...,$视为普通字符 》反撇号` `:命令执行的结果变输出给变量 , $(…) :这是反撇号的另一种版本。...通常而言,shell的功能是从终端或其它输入取得命令行,将其解析为一系列操作指令,调用系统内核或相应的 外部程序执行,然后执行结果返回给终端或其它输出。...主控循环的功能较为简单,它循环读取用户(或脚本)输入,传递给 语法分析器,同时处理下层递归返回的错误。

1.8K60

shell脚本还能这么写?

/bin/bash # set用法在文章末尾 set -eu # nginx配置文件在不同环境中可能不同,所以需要将其抽离成可配置变量,后面来引用 NGINX_CONFIG_FILE=/etc/nginx.../bin/bash # set命令的奇妙用途留在文章末尾 set -eu # nginx配置文件在不同环境中,位置可能不同,所以需要将其抽离成可配置变量脚本来引用 NGINX_CONFIG_FILE=.../bin/bash # set命令的奇妙用途留在文章末尾 set -eu # nginx配置文件在不同环境中,位置可能不同,所以需要将其抽离成可配置变量脚本来引用 NGINX_CONFIG_FILE=...main() { config_test reload } # main在此需要获取脚本本身的参数, 故$@传递给main函数 main $@ 4.函数返回值 在其他编程语言...main() { config_test reload } # main需要获取脚本本身的所有参数, 故$@传递给main函数 main $@ 5.set命令 内置的set命令

1.3K20

Linux基础(五)

则是子进程放到父进程进行执行,影响当前环境,常用于读取配置文件 5、bash变量分类、 本地变量(普通变量):生效范围为当前shell,对当前shell之外的其他shell进程,包括当前shell....来表示,用于脚本代码中调用通过命令行参数传递给它的参数 特殊变量:$?...declare -r name declare -ir name ( i表示数字 ) 查看:readonly -p 例如:PI = 3.1415926 位置变量:在脚本代码中调用通过命令行传递给脚本的参数...退出状态码 bash自定义退出状态码 exit [n]:自定义退出状态码 注意:脚本中一旦遇到exit命令脚本会立即终止;终止退出状态取决于exit命令后面的数字 如果未给脚本指定主功能代码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码...中如何展开命令行 把命令行分成单个命令展开别名 展开大括号中的声明{} 展开波浪符声明~ 命令替换$()和`` 再次把命令行分成命令展开文件通配符(*、?

1.2K80

40 个简单又有效的 Linux Shell 脚本示例

/hello-world.sh 它将打印出传递给脚本内部回显的字符串。 2、使用 echo 打印 echo 命令用于在 bash 中打印信息。...相反,更改脚本中的变量名称和值等部分,以检查它们如何一起工作。 13、case 条件 . switch 构造是 Linux bash 脚本提供的另一个强大功能。...命令 mkdir,并在仔细查看时目录名传递给它。...程序首先要求用户提供文件名作为输入,如果文件名存在,则将其删除。Linux rm 命令在此处执行删除操作。 #!...36、清理日志文件 下一个简单的示例演示了在现实生活中使用 shell 脚本的简便方法。该程序只需删除 / var/log 目录中的所有日志文件。您可以更改保存此目录的变量以清理其他日志。 #!

13310

shell脚本编程之路3

[TOC] 0x09 shell编程函数 描述:Bash(Bourne Again shell)也跟其他编程语言一样也支持函数,一般在编写大型脚本中需要用到,函数可以让我们一个复杂功能划分成若干模块,...Shell 函数必须先定义后使用 Shell 函数与其他高级语言的函数有相似之处,也有返回值、删除函数、在终端调用函数(参和递归)等等....来获取执行的结果; shell中函数参与脚本参是一致的,但是得注意 $0 代表任然是父脚本的名称; 删除函数 描述:像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项,如下所示...如果你希望直接从终端调用函数可以函数定义在主目录下的 .profile 文件,这样每次登录后在命令提示符后面输入函数名字就可以立即调用。...WeiyiGeek.函数嵌套删除 0x09 shell脚本包含 描述:Shell文件包含像其他语言一样,Shell 也可以包含外部脚本外部脚本的内容合并到当前脚本,也能在函数中进行调用外部变量 脚本包含

3.3K10

shell语法学习

/hello-world.sh Bash 它将打印出传递给脚本内部回显的字符串。 2.使用 echo 打印 echo 命令用于在 bash 中打印信息。...相反,更改脚本中的变量名称和值等部分,以检查它们如何一起工作。 13.case 条件 . switch 构造是 Linux bash 脚本提供的另一个强大功能。...shell 命令 mkdir,并在仔细查看时目录名传递给它。...程序首先要求用户提供文件名作为输入,如果文件名存在,则将其删除。Linux rm 命令在此处执行删除操作。 #!...36.清理日志文件 下一个简单的示例演示了在现实生活中使用 shell 脚本的简便方法。该程序只需删除 / var/log 目录中的所有日志文件。您可以更改保存此目录的变量以清理其他日志。 #!

1.2K40

SHELL(bash)脚本编程六:执行流程

bash命令的执行分为四大步骤:输入、解析、扩展和执行。 本文详述bash命令的一般处理过程: 如图所示 ? 输入 交互模式 在交互模式下,输入来自终端。...在编辑缓冲区的内容交给bash之前,Readline会执行历史扩展(见这里),之后由bash负责本条命令存储到历史列表并进入下一步骤。 非交互模式 在非交互模式下,输入一般来自文件。...5、其他 如果非重定向或赋值语句的第一个单词不是别名或复合命令的起始单词,解析器标记它为命令名,并赋值给位置变量0,其余单词(控制操作符之前的)为此命令的参数($1、$2...$n)。...最终解析器返回一个C结构体来表达一个命令(对于复合命令,这个结构体中可能还包含有其他命令),然后将其递给shell的下一阶段:单词展开。...复合命令 bash中每种复合命令都使用一个C函数来实现,功能包括执行恰当的展开(如for循环中关键词in后面的单词),执行特定的命令,根据命令的返回值来变更执行流程等等。

1.6K40

Shell脚本攻略01-简介终端打印

 获取、设置日期及延时  调试脚本  函数和参数  命令序列的输出读入变量  以不按回车键的方式获取字符”n”  运行命令直至执行成功  字段分隔符和迭代器...运行脚本的两种方式 脚本作为bash命令行参数 脚本作为命令行参数时的运行方式如下(#号后面的文本是注释,不必输入到命令行中): $ bash script.sh #假设脚本位于当前目录下 或者...$ bash /home/path/script.sh #使用script.sh的完整路径 如果脚本作为bash命令行参数来运行,那么就用不着脚本中的shebang了。...对于浮点数,可以使用其他参数对小数部分进行舍入。 对于Mark字段,将其格式化为%-4.2f,其中.2指定保留2个小数位。...注意,在每行格式字符串后都有一个换行符(\n) ---- 其他注意事项 使用echo和printf的命令选项时,要确保选项应该出现在命令行内所有字符串之前,否则Bash将其视为另外一个字符串。

2.5K20

Shell特殊变量命令行参数详解

这些变量会在创建子进程时传递给子进程。...用env命令可以查看当前的环境变量。常用的系统环境变量如下: _(下划线):上一条命令的最后一个参数 BASH展开为调用bash实例时使用的全路径名 CDPATH:cd命令的搜索路径。...:~:/usr EDITOR:内置编辑器emacs、gmacs或vi的路径名 ENV:每一个新的bash shell(包括脚本)启动时执行的环境文件。通常赋予这个变量的文件名是.bashrc。...EUID:展开为在shell启动时被初始化的当前用户的有效ID GROUPS:当前用户所属的组 HISTFILE:指定保存命令行历史的文件。默认值是~/.bash_history。...未指定目录时,cd命令转向该目录 IFS:内部字段分隔符,一般是空格符、制表符和换行符,用于由命令替换,循环结构中的表和读取的输入产生的词的字段划分 LANG:用来为没有以LC_开头的变量明确选取的种类确定

2.5K60

记一次远程命令执行漏洞的挖掘过程

6、结合上面的目录信息和任意文件读取漏洞,对JSP文件简单审计一下,发现logContentNewest.jsp会调用一个bash脚本,便猜想能否使用它构造命令执行: ?...分析logContentNewest.jsp和 被调用的sh脚本,得知path参数最终会传入sh脚本的FILE_PATH变量,然后调用下面的判断逻辑。...(arguments),传递给其他命令。...因为以空格作为分隔符,所以有一些文件名或者其他意义的名词内含有空格的时候,xargs可能会误判。简单来说,xargs是给其他命令传递参数的一个过滤器,是构建单行命令的重要组件之一。...小结 漏洞是由于程序调用bash脚本参时没有做过滤,通过$(cmd)这样的方式来执行命令并将结果存入变量中,在脚本判断文件不存在时会返回文件名,造成了回显。

1.6K10

Bash 脚本中,特殊变量$0到底是什么?

图片在 Bash 脚本中,$0 变量通常用于以下情况:1. 显示脚本的名称和路径可以使用 $0 变量来显示脚本的名称和路径。通常,这种情况下,我们使用 echo 命令来输出脚本的名称和路径。...命令输出 $0 变量中的文件名部分。...如果脚本在绝对路径下执行,脚本显示“脚本在绝对路径下执行”,否则将显示“脚本在相对路径下执行”。$0 还可以在脚本中引用其他文件,例如配置文件或其他脚本。...在 Bash 脚本中,$0 变量是只读变量,不能被修改。在使用 $0 变量时,需要小心空格和引号。如果在使用 $0 变量将其括在引号中,则需要使用双引号而不是单引号。...否则,Bash 将不会展开它,并输出整个字符串。$0 变量也可以用于获取命令行参数中的程序名称。例如,如果我们执行以下命令:.

1.8K00

Bash 编程易错总结大全

这里主要两个问题: 使用命令展开时不带引号,其执行结果会使用 IFS 作为分隔符,拆分成参数传递给 for 循环处理; 不应该让脚本去解析 ls 命令的结果[2]; 我们不能避免某些文件名中包含空格,Shell...这个展开的列表传递给有些命令的时候,会错误的-filename 解析成命令行选项。这里有两种方法来解决这个问题。...但是事实上,Bash 命令替换里面的引号当成一组,外面的当成另外一组。...出错时,cd 命令会报告无法改变当前目录,同时错误消息输出到标准错误,例如 "bash: cd: /foo: No such file or directory"。...: event not found 这是因为,在默认的交互式 Shell 环境下,Bash 发现感叹号时会执行历史命令展开。在 Shell 脚本中,这种行为是被禁止的,所以不会发生错误。

2.8K10

拥有此神技,脚本调试从此与 echo、set、test 说分手!

什么样的测试才是 Bash 脚本的单元测试? 首先,所有存在于PATH环境变量的路径中的命令都不应该在单元测试中被执行。对 Bash 脚本来说,被调用的这些命令可以正常运行,有返回值,有输出。...与其他编程语言一样,Bash 也有多个测试框架,比如 Bats、Shunit2 等,但这些框架实际上并不能隔离所有PATH环境变量中的命令。...然后我们就可以执行真正的命令了,find命令的输出结果传递给xargs命令,并组合到rm -rf命令之后。..."bar*" 的文件 @touch bar1 bar2 bar3 "bar*" # 要删除这个错误的文件名 bar*,而不删除其他文件,使用了双引号来参,这是正确的 cleanup...,期望只删除文件bar,但是在函数 cleanup里面,因为遗漏了双引号,会导致变量被二次展开

1K20

linux的shell编程入门

典型的脚本语言有,JavaScript,Python,shell等。 其他常用的脚本语句种类 PHP是网页程序,也是脚本语言。...f、脚本中的引号都是英文状态下的引号,其他字符也是英文状态。 1.3 shell脚本的执行 1.3.1 执行脚本的办法 sh/bash scripts.sh chown +x ....$# 获取当前执行的shell脚本后面接的参数的总个数 $* 获取当前shell的所有参的参数,不加引号同$@;如果给$*加上双引号,例如: “$*”,则表示所有的参数视为单个字符串,相当于“1...$@ 获取当前shell的所有参的参数,不加引号同$*;如果给$@加上双引号,例如: “$@”,则表示所有参数视为不同的独立字符串,相当于“$1” “$2” “$3” “……”,这是参数传递给其他程序的最佳方式...1.6.1 三种定义变量的方式   1、直接赋值   2、参 (传递参数)   3、交互式设置变量,使用read命令 1.6.2 read命令说明 在命令行中使用 [root@clsn scripts

8K30
领券