UNIT05 Script Execute Principle

.父Shell和子Shell

1.login shell和父shell

登陆主机后,在执行Script之前,我们所处的环境已经是在一个Bash Shell之中。这个Shell叫做login Shell是将来我们执行任何Script的上层环境,又叫做父shell。

2.shell和子shell

执行某个Script时,父shell会根据script的第一行#!后指定的shell程序开启(fork)一个子shell环境,然后在子shell中执行此script。一旦子shell中的script执行完毕,此子shell随即结束,仍然回到父shell中,不影响父shell原来的环境。

3.shell会继承父shell的若干变量值的内容,这些变量称为环境变量。

4.shell再开启子shell——echo $SHLVL用于看第几层

.bash的启动配置文件(在脚本中加入echo验证)

1.登陆

→/etc/profile.d/*.sh

→/etc/profile——bash login(提示符,7个shell全同)

→/etc/bashrc——all shell(bash提示符)

→~/.bashrc——all shell

→~/.bash_profile——all shell

→~/.bash_logout——bash(rm –rf /tmp/*)

2.注销

~/.bash_logout——举例history –c;poweroff

3.执行新shell

→/etc/bashrc

→~/.bashrc——末尾加exit然后ctrl+shift+t

4.执行script(使用!/bin/bash

查BASH_ENV的内容

5.执行script(使用!/bin/sh)

不调用启动文件,没有其它检查环境变量的操作。

.子shell会继承环境变量,不需每次启动profile

1.登陆shell

Su –;login

2.非登陆shell

su;gnome-terminal;exec-script;other

 

上下文

登陆shell

交互shell

1

从TTYn登shell

Ok

Ok

2

从网络登陆shell

Ok

Ok

3

X初始化shell

Ok

Ok

4

X终端shell

X

Ok

5

执行bash命令的子shell

X

ok

6

命令替换中的子shell  $(命令)

X

X

7

圆括号分组的命令的子shell

X

X

8

执行脚本时使用的子shell

X

X

.source和script的区别

1.script

script是启动一个子shell来执行命令,在script中设的变量,无法改变当前bash。

#vim auth.sh

echo “what is your name”

read name

echo “… … ok”

chmod +x auth.sh

. ./auth.sh————script

2.source

source在当前bash环境下执行命令,所以通过文件设置环境变量是要用source命令。

#vim auth.sh

echo “what is your name”

 

read

echo ‘your name is:’$REPLY

 

echo “what is your pass”

read pass

echo “… … ok”

chmod +x auth.sh

source auth.sh————source

.环境信息配置文件bashrc与profile的区别

1.当登入系统时候获得一个shell进程时,其读取环境设定档有三步

首先读入的是全局环境变量设定档/etc/profile,然后根据其内容读取额外的设定的文档,如/etc/profile.d和/etc/inputrc

然后根据不同使用者帐号,去其家目录读取~/.bash_profile,如果这读取不了就读取~/.bash_login,这个也读取不了才会读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系

然后在根据用户帐号读取~/.bashrc

2.bashrc用于non-loginshell,而profile用于login shell

/etc/profile:用户登陆时,该文件仅被执行一次,并从/etc/profile.d下的文件中搜集shell的设置。

/etc/bashrc:用户打开新有bash shell时。有些linux版本中/etc下已经没有该文件。

~/. profile:专用于某个用户登录时,该文件仅仅执行一次!然后执行用户的.bashrc。

~/.bashrc:专用于某个用户,当该用户登录时以及每次打开新的shell时该文件被读取。

.BASH分析命令行的方式

分隔管道

将指令切成个别的命令,以各个命令进行以下分析

取出token

使用分隔字符——空格.tab将命令分成token

替换别名

检查命令的第一个token是不是别名,若是则把名名替换成真正的指令

括号扩展

如{sb,b}in会扩展成sbin.bin

~符号扩展

如~user2替换成/home/user2

替换变量

如$HZ替换成’Hello!’

替换命令

若token含$(which diff)的型式则把它替换成实际结果/usr/bin/diff

替换通配符

如*.sh替换成foo.sh

替换算术

若有算术式,则计算其结果并进行替换,如$((3+5))替换成8

根据函数.内置命令.搜寻路径的顺序,找寻第一个token所代表的命令位于何处。

执行已替换完成的指令

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值