【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) 收藏 举报
浙公网安备 33010602011771号