程序示例:
hello.sh
#! /bin/bash # #用途:这是一个简单的shell示范程序 # # function show_name(){ echo "今个儿是$1,你$2大大,来自$3" } name="$1" ip="163.26.197.1" today=`date +%F` if [ $# != 1 ]; then echo "Usage: $0 [使用者名称]" exit fi show_name "$today" "$name" "$ip" sleep 5 echo echo "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