Shell学习笔记(3)-一个复杂一点的Shell程序

来源:互联网 发布:淘宝p图用什么软件好 编辑:程序博客网 时间:2024/05/16 17:41

程序示例:

 

hello.sh

 

#! /bin/bash##用途:这是一个简单的shell示范程序##function show_name(){echo "今个儿是$1,你$2大大,来自$3"}name="$1"ip="163.26.197.1"today=`date +%F`if [ $# != 1 ]; thenecho "Usage: $0 [使用者名称]"exitfishow_name "$today" "$name" "$ip"sleep 5echoecho "Bye-Bye ;-)"


#! /bin/bash
指明了运行这个script脚本所使用的shell。在我们登录系统后,我们已经身处在一个login shell中,称为父Shell(可以在/etc/passwd中看login shell的类型).当我们执行某一个Shell Script时,父Shell会根据Script程序的第一行#!之后指定的Shell程序开启(此操作称为fork)一个子Shell的环境,然后在子Shell中执行此Shell Script。一旦子Shell中的Script执行完毕,此子Shell随即结束,仍然回到父Shell中,不会影响父Shell原本的环境。子Shell和父Shell一样,会开户3个文件:标准输入(键盘)、标准输出(屏幕)、标准错误(屏幕),同时,子Shell会继承父Shell的若干变量值的内容,这些变量称为环境变量。
 

执行Shell的方法:

1.进入到当前目录,执行

./hello.sh

直接执行hello.sh可能不行,因为当前目录可能没有放入path环境变量中

2.以绝对路径的方式,执行Script(假设当前目录为/root/tmp,下同)

/root/tmp/hello.sh

3.进入文件所在目录,执行Bash或sh命令

cd /root/tmp

Bash hello.sh或sh hello.sh

这种方式可以不指定script的执行权,即不需#! /bin/bash来指明执行script的shell类型

4.在现行的shell中执行

. /root/tmp/hello.sh

或者source /root/tmp/hello.sh

注意中间有个空格.

使用.或source会让Script只在父Shell的环境中执行,否则shell script会在新生成的子Shell中执行。

 

跟踪hello.sh的执行情况,可使用如下命令

/bin/bash -x /root/tmp/hello.sh Jack

执行记录如下:

 

+ name=Jack
+ ip=163.26.197.1
++ date +%F
+ today=2012-11-01
+ '[' 1 '!=' 1 ']'
+ show_name 2012-11-01 Jack 163.26.197.1
+ echo $'\275\361\270\366\266\371\312\3072012-11-01\243\254\304\343Jack\264\363\264\363\243\254\300\264\327\324163.26.197.1'
今个儿是2012-11-01,你Jack大大,来自163.26.197.1
+ slep 5

原创粉丝点击