您的位置:首页 > 运维架构 > Shell

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

2012-11-01 11:22 295 查看
程序示例:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: