首页
学习
活动
专区
圈层
工具
发布

Bash shell中bash、sh、source及“.”的区别与联系

在众多Linux发行版中bash shell 可谓是随处可见。作为众多发行版的首选shell,对于bash shell的学习对我们来说,显得格外重要。...在学习bash shell的过程中,bash、sh、source及英文输入状态下的点号经常交替出现,他们看起来作用都差不多,但是深究下去,他们也有着不小的区别与联系。...查看shell的历史我们可以知道,我们通常所说的bash shell(bash)全称为GNU Bourne-Again SHell。在目前的发行版中,sh已经成为bash的一个软连接。...从上面的2个代码块中,我们可以看出,b.sh脚本直接引用了a.sh中的变了,如果我们依次执行几个有关联的脚本就可以采用这种方式,否则则使用bash及sh比较恰当。...四、结论 bash与sh在对于脚本执行来说,效果一致,不继承除了当前shell之外的变量值。在无空格“.”且有执行权限的脚本执行中,效果与bash及sh一致。

2.6K10

在当前bash(sh)中执行脚本和注册函数

在研究《管理Python虚拟环境的脚本》时,我们使用了source指令而没有使用sh或者bash来执行脚本,就是因为source指令可以让脚本在当前bash(sh)中执行;而sh或者bash则会新启动一个...source source test.sh $$ processInfo: 40883 bash 可以见得没有启动新的bash程序。 source还可以让自动注册脚本中的函数。...所以如果我们希望脚本对当前bash有所影响,就要使用source去执行脚本;如果不希望影响当前bash,则可以使用bash或者sh去执行。 需要注意的是,bash并不等价于sh。...sh(Bourne Shell)是1978年由史蒂夫·伯恩编写的shell;bash(Bourne-Again Shell)是1987年由布莱恩·福克斯为GNU计划编写的Unix shell。...主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,是各种Linux发行版标准配置的Shell。比如上面test.sh使用bash可以正确执行,而sh执行就会报错。

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

    【shell脚本】$ 在shell脚本中的使用

    shell脚本中 '$' 与不同的符号搭配其表示的意义也会不同 特殊标志符 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。...例如,第一个参数是$1,第二个参数是$2 $# 传递给脚本或函数的参数个数 $* 传递给脚本或函数的所有参数 $@ 传递给脚本或函数的所有参数 $?...上个命令的退出状态 $$ 当前Shell进程ID $() 与 `(反引号) 一样用来命令替换使用 ${} 引用变量划分出边界 注释:$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ".../bin/bash echo "file name $0" echo "first param $1" echo "pid $$" echo "total num of param $#" echo...echo "$@" echo "$*" 执行 ./1.sh hello mayuan file name ./1.sh first param hello pid 142 total num of param

    10.8K20

    Bash shell中bash、sh、source及“.”点等五种执行方式的区别与联系

    欢迎转载,转载请注明出处,谢谢 在众多Linux发行版中bash shell 可谓是随处可见。作为众多发行版的首选shell,对于bash shell的学习对我们来说,显得格外重要。...查看shell的历史我们可以知道,我们通常所说的bash shell(bash)全称为GNU Bourne-Again SHell。在目前的发行版中,sh已经成为bash的一个软连接。...从上面的2个代码块中,我们可以看出,b.sh脚本直接引用了a.sh中的变了,如果我们依次执行几个有关联的脚本就可以采用这种方式,否则则使用bash及sh比较恰当。...四、结论 bash与sh在对于脚本执行来说,效果一致,不继承除了当前shell之外的变量值。在无空格“.”(相对路径)、绝对路径且有执行权限的脚本执行中,效果与bash及sh一致。...bash、sh、不带空格的点(相对路径)或绝对路径中,脚本是在子进程中执行的。在source及带空格的点中,脚本是在父进程中执行的,差别很大。

    4.3K10

    SHELL(bash)脚本编程一:变量

    本篇开始,介绍shell脚本编程,更确切的说是bash脚本编程(版本:4.2.46(1)-release)。我们从变量开始。...登录shell的进程名为-bash,非登录shell(比如在桌面环境下通过打开一个"终端"窗口程序而获得的shell)的进程名为bash。.../中所有以.sh结尾的文件);然后按顺序搜索用户家目录下的~/.bash_profile、~/.bash_login和~/.profile,并执行找到的第一个可读文件(在centos7系统中是文件~/....非交互式shell启动时(如脚本中),会继承派生出此shell的父shell的环境变量并执行环境变量BASH_ENV的值中所指代的文件。...$_ 在shell初始启动时表示启动此shell命令的绝对路径或脚本名,随后,表示前一条命令的最后一个参数。 声明/定义及赋值 通常bash的变量是不需要提前声明的,可以直接进行赋值。

    3.9K40

    SHELL(bash)脚本编程八:技巧

    至此,我们介绍了linux系统中常用命令的使用方法,简述了bash程序的使用方法和工作流程。在使用bash编写脚本程序时,熟练掌握这些工具的用法,往往能够达到事半功倍的效果。...1、笔试题 先来看某公司的两个笔试题: 1、写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。...2、写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。 问题没什么可分析的,直接的解决方案: #!...4、并发 我们在描述重定向与管道的文章中讲述过一种并发方式,下面介绍另一种。 我们说过,命令替换的问题是命令的立即执行然后等待结果,此时shell无法传入输入。...关键在于Bash为这条命令打开了一个用于读和写的管道,并且绑定到一个文件名,最后展开为结果。 利用进程替换的这一特性,可以想到另外一种并发的方式: #!

    1.4K20

    如何在 Bash Shell 脚本中显示对话框

    这个教程给出几个如何使用类似zenity和whiptail的工具在Bash Shell 脚本中提供消息/对话框的例子。使用这些工具,你的脚本能够告知用户当前程序运行的状态并能与用户进行交互。...Zenity 工具 在Ubuntu中安装zenity,运行: ? 用zenity创建消息框或者对话框的命令是不言自明的,我们会给你提供一些例子来参考。 创建消息框 ? ?...创建输入框并将输入值保存到变量中 ? ? 输入后,值会保存在变量 $a 中。 这是一个获取用户姓名并显示的实际事例。 ? 这些是运行前面脚本的截图。 ? 框1 ? 输入框 ? 输入框 ? 输入框 ?...这是一个请求用户输入一个文件夹的路径并输出它的大小的 shell 脚本。 ? 这是之前例子的一些截图: ? 输入框 ? 消息框 如果你在终端下工作,帮助手册总是有用的。...结论 选择合适的工具显示对话框取决于你期望在桌面机器还是服务器上运行你的脚本。桌面机器用户通常使用GUI窗口环境,也可能运行脚本并与显示的窗口进行交互。

    5.7K10

    【.sh】Shell 脚本文件的基础内容

    基础知识 .sh文件是什么? .sh文件即 Shell 脚本文件,通常用来执行一系列的命令。.../bin/bash:这是脚本的第一行,称为"shebang"。它告诉系统应该使用哪个解释器来执行这个脚本。在这个例子中,#!/bin/bash表示使用Bash作为解释器来执行这个脚本。...#:在脚本中以#开头的行是注释,不会被解释器执行。 echo "Hello, World!":这一行是实际的命令,用于向终端输出文本"Hello, World!"。...可以通过在终端中导航到脚本所在的目录,并键入如下指令: chmod 777 test01.sh ./test01.sh 运行脚本,会在终端输出"Hello, World!".../bin/bash # 提示用户输入姓名 echo "请输入您的姓名:" # 从用户输入中读取姓名并存储到变量中 read name # 打印欢迎消息 echo "欢迎您,$name!

    2.4K10

    SHELL(bash)脚本编程四:其他扩展

    在之前的文章中我们讲述了变量扩展、数学扩展和命令替换。本篇接着介绍shell中用到的其他扩展。 历史扩展 默认时,在交互式shell环境下,bash允许对历史命令进行记录和扩展。...默认时shell脚本中不能使用别名。别名扩展是完全基于文本的,因而别名可以改变shell语法。几乎任何别名的作用,都可以用shell函数来实现。 大括号扩展 大括号扩展是一种生成任意字符串的机制。...关键在于Bash为这条命令打开了一个用于读和写的管道,并且绑定到一个文件名,最后展开为结果。 进程替换的格式为:(command)。.../test.sh 5050 [root@centos7 temp]# 任务控制 在允许任务控制的系统上,bash可以有选择地挂起某个前台进程,并使它在后台异步地继续执行。...shell或脚本中,以控制操作符&结尾的命令也会被作为后台命令异步地执行,当前shell不会等待此命令执行结束,命令的返回码为0。

    1.4K30

    SHELL(bash)脚本编程五:内置命令

    因为是在当前环境中执行文件内容,该文件并不需要具备可执行权限,执行完毕后,在文件内部声明的变量或定义的函数可以在当前环境中直接使用。...中执行的外部命令会被缓存在一个哈希表中,直接执行命令hash可以查看当前bash缓存了哪些外部命令: [root@centos7 ~]# hash 命中 命令 5 /usr/bin/...退出状态: 以命令的状态退出,或者在命令为空的情况下返回成功。 6、shopt 设置或取消设置shell选项,这些选项都是用来控制shell行为的。...一种常见用途是在脚本程序被中断时完成清理工作。.../bin/bash -x #在需要保护运行的代码前设置忽略的信号: trap "echo 'protected'" 1 2 3 20 #或者 trap "echo 'protected'" HUP INT

    1.3K20

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

    bash命令的执行分为四大步骤:输入、解析、扩展和执行。 本文将详述bash命令的一般处理过程: 如图所示 ? 输入 交互模式 在交互模式下,输入来自终端。...在将编辑缓冲区的内容交给bash之前,Readline会执行历史扩展(见这里),之后由bash负责将本条命令存储到历史列表并进入下一步骤。 非交互模式 在非交互模式下,输入一般来自文件。...另外,默认时只有在交互式shell环境下才允许别名扩展。如果需要在脚本中使用命令别名,则需开启选项shopt -s expand_aliases。...由于别名的功能都可以用函数实现,建议在脚本中使用函数来代替命令别名。...最终解析器返回一个C结构体来表达一个命令(对于复合命令,这个结构体中可能还包含有其他命令),然后将其传递给shell的下一阶段:单词展开。

    2.8K40

    如何在 Bash shell 脚本中解析命令行选项

    Bash 中的选项解析 在 Bash 中解析选项的策略是循环遍历所有传递给 shell 脚本的参数,确定它们是否是一个选项,然后转向下一个参数。重复这个过程,直到没有选项为止。 #!...在实际的脚本中,你可以使用 --verbose 和 -v 来触发详细输出)。 shift 关键字会使所有参数位移一位,这样位置 2($2)的参数移动到位置 1($1)。...在脚本的末尾,$ALPHA 的值会输出到终端。 测试一下这个脚本: $ bash ./test.sh --alpha 1 $ bash ./test.sh $ bash ..../test.sh -a 1 可以看到,选项被正确地检测到了。 在 Bash 中检测参数 但上面的脚本还有一个问题:多余的参数被忽略了。 $ bash ....下面是新版脚本的测试: $ bash ./test.sh --config my.conf foo bar my.conf foo bar $ bash .

    3.8K20
    领券