父shell和子shell

本文深入解析Linux环境下Shell的loginShell、父Shell与子Shell的概念,阐述了如何通过ShellScript在不同Shell环境中执行命令,以及环境变量、标准输入输出在Shell间的作用机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

source

在这里插入图片描述
source :是在当前shell执行文件中命令

.

在这里插入图片描述
. :点也是在当前shell执行文件中的命令

父shell和子shell

Login Shell

  • List item

登录主机后,在执行Bash Script之前,其实我们已经处于一个BashShell中。

这个Shell叫login Shell,是将来我们执行任何Script的上层环境。又叫父SHell

其实每个帐号都可以自定义loginShell。以Linux来说,帐号的login Shell定义在==/etc/passwd==这个文件中。

  • List item

/etc/passwd的每一行代表一个帐号,共有7个字段,之间用:隔开。

帐号❌UID 使用者代码:GID 群组代码:用户信息:主目录:login shell路径

第二栏x为密码栏,基于系统安全考虑,编码后的密码已经被放入/etc/passwd文件中。

login Shell定义在第7个字段,如果这个字段的Shell程序不存在、不合法,或执行失败,则无法登录主机。

  • List item

父Shell、子Shell

当在执行一个Shell Script时,==父Shell会根据Script程序的第一行#!之后指定的Shell程序开启一个子Shell环境,然后在子Shell中执行此Shell Script。==一旦子Shell中的Script执行完毕,此子Shell随即结束,回到父Shell中,不会影响父Shell原本的环境。

子Shell环境拥有与父Shell相同的环境变量、标准输入、输出、错误等。

例如:

test.sh文件内容

#!/bin/bash

cd /var/www/html

命令行:chmod +x /test.sh

命令行:./test.sh

执行完脚本后还原到父Shell,并且父Shell并没有进入/var/www/html目录。

注:这是因为当执行Shell文件时,父Shell会创建子Shell,各自独立。

如果需要使用父Shell来执行此脚本,可以使用:

命令行:. ./test.sh

注意.与./之间有一个空格符

子Shell继续开启子Shell

与父Shell启动子Shell方式一样,继续调用下去,即子Shell开启子Shell。

通过$SHLVL变量,可以知道当前所在Shell的层次

补充:
可以通过bash命令打开bash,通过exit命令退出bash

在这里插入图片描述 可以通过pstree来查看子shell
在这里插入图片描述

用bash来执行文件中的命令,此时这个bash是子bash

在这里插入图片描述

通过改变chmod +x *.sh 可以使*.sh 文件有执行能力,此时是通过子bash来运行这个文件

$在linux中

不同的地方符号的定义不同,在bash里这个符号一般表示普通用户的命令提示符(可更改),在bash脚本里。符号的定义不同,在bash里这个符号一般表示普通用户的命令提示符(可更改),在bash脚本里。bashbash开头表示变量
$str表示变量,可赋值等操作,下面是一些特殊的变量

$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
@是传给脚本的所有参数的列表@ 是传给脚本的所有参数的列表@* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值