Beer<-...->Belly

I like black beer.

导航

【Bash脚本便利贴】【一】【Bash脚本的运行方式】

###############################

#Linux环境:Red Hat Enterprise Linux 5.4

#Bash环境:GUN bash 3.2.25

#操作用户:root

###############################

不同的Bash脚本的运行方式,总会有一些差别。

由下面举一个简单的例子开始:

在同级目录下新建两个Bash脚本,test1.sh、test2.sh。

test1.sh

1
#!/bin/sh 2 3 ECHO="/bin/echo"
test2.sh

1
#!/bin/sh 2 3 . test1.sh 4 ${ECHO} "test2.sh"
新建文件的状态
-rw-r--r-- 1 root root 28 Sep 29 11:50 test1.sh
-rw-r--r-- 1 root root 38 Sep 29 11:50 test2.sh

 

Bash脚本的三种运行方式 

 

Bash脚本的主要运行方式有三种:

 

第一种,使用bash指令或sh指令(推荐适用bash指令,当然Redhat中sh指令是指向bash指令的

# bash test1.sh 或 # sh test2.sh
输出结果:
Hello test2.sh

当我们使用如下指令查看变量ECHO的值时:

# echo ${ECHO}value

会发现
test1.sh中定义的变量ECHO的值是空的。
# value

这种情况脚本文件不用赋予执行权限。

由bash或sh指令来逐行解释执行。

脚本在新建的子进程中运行。

 

补充:

可以使用 bash -u {脚本名称}来校验脚本是否语法错误。

使用 bash -x {脚本名称}来显示脚本的运行过程。

 

第二种,使用source指令(source指令等同于.)

# source test2.sh 或 # . test2.sh

符号.跟脚本文件中间有空格
输出结果:
Hello test2.sh

当我们使用如下指令查看变量ECHO的值时:

# echo ${ECHO}value

会发现test1.sh中定义的变量ECHO的值被显示出来了。

# /bin/echovalue
 

这种情况脚本文件不用赋予执行权限。

由当前的Shell来逐行解释执行。

脚本在本Shell进程中运行。

 

第三种,给脚本赋予运行权限直接运行

# chmod 755 test2.sh
# ECHO="" #将ECHO变量置空,用于后续的操作
# ./test2.sh
输出结果:
Hello test2.sh

当我们使用如下指令查看变量ECHO的值时:

# echo ${ECHO}value

会发现test1.sh中定义的变量ECHO的值被显示出来了。

# /bin/echovalue
 

这种情况下,脚本在新建的子进程中运行。

 

脚本的运行进程

 

针对脚本三种方式下脚本具体的运行进程,新建一个脚本文件,test3.sh。

test3.sh

1
#!/bin/sh 2 echo "本进程PID:$$" 3 ps -fp $$ 4 echo "相关进程信息如下:" 5 ps -ef | grep -v grep | grep -E "bash|test3.sh"

下面是不同方式运行test3.sh后的结果

[root@amt01 work]# bash test3.sh 
本进程PID:12572
UID        PID  PPID  C STIME TTY          TIME CMD
root     12572 12523  0 22:37 pts/0    00:00:00 bash test3.sh
相关进程信息如下:
root     12523 12521  0 22:33 pts/0    00:00:00 -bash
root     12572 12523  0 22:37 pts/0    00:00:00 bash test3.sh
[root@amt01 work]# sh test3.sh 
本进程PID:12577
UID        PID  PPID  C STIME TTY          TIME CMD
root     12577 12523  0 22:37 pts/0    00:00:00 sh test3.sh
相关进程信息如下:
root     12523 12521  0 22:33 pts/0    00:00:00 -bash
root     12577 12523  0 22:37 pts/0    00:00:00 sh test3.sh
[root@amt01 work]# source test3.sh 
本进程PID:12523
UID        PID  PPID  C STIME TTY          TIME CMD
root     12523 12521  0 22:33 pts/0    00:00:00 -bash
相关进程信息如下:
root     12523 12521  0 22:33 pts/0    00:00:00 -bash
[root@amt01 work]# . test3.sh 
本进程PID:12523
UID        PID  PPID  C STIME TTY          TIME CMD
root     12523 12521  0 22:33 pts/0    00:00:00 -bash
相关进程信息如下:
root     12523 12521  0 22:33 pts/0    00:00:00 -bash
[root@amt01 work]# ./test3.sh 
本进程PID:12590
UID        PID  PPID  C STIME TTY          TIME CMD
root     12590 12523  0 22:38 pts/0    00:00:00 /bin/sh ./test3.sh  #由此可以发现Sha-Bang的作用,不信你把脚本的Sha-Bang换成#!/bin/bash。
相关进程信息如下:
root     12523 12521  0 22:33 pts/0    00:00:00 -bash
root     12590 12523  0 22:38 pts/0    00:00:00 /bin/sh ./test3.sh 

##################################

#[文章履历]

#[2012/09/30 23:00]---[新建完成]

#[2012/10/08 19:18]---[将文章中名称“Bash Shell脚本”改为“Bash脚本”]

##################################

<-...->  

posted on 2012-09-30 23:01  Beer Belly  阅读(590)  评论(0)    收藏  举报