Chinaunix首页 | 论坛 | 博客
  • 博客访问: 318259
  • 博文数量: 82
  • 博客积分: 1530
  • 博客等级: 上尉
  • 技术积分: 771
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-16 03:44
文章分类

全部博文(82)

文章存档

2011年(6)

2010年(76)

我的朋友

分类: LINUX

2010-04-21 02:39:41

第四章、基础shell编程
shell脚本和函数:
注意子shell

函数:
两种形式,如下
function functname
{
    shell commands
}

functname ()
{
    shell commands
}

declare -f  找到登录会话里的函数(里面好多东西呢)
declare -F  只显示那些函数的名字


shell变量:
最重要的内置变量称为位置参数
$0 表示文件名的名字
$1 表示第一个位置参数。。。。
$@ 匹配后面跟着的所有位置参数
$# 保存位置参数的数目

注意$@和$*的区别(其实我现在还搞不清楚,照抄书的)
“$*”是包含所有参数位置的单一字符串,由环境变量IFS中的第一个字符分隔。IFS默认为空格、TAB和NEWLINE。另一方面,“$@”等价于"$1" "$2"....."$N",这里N为位置参数数目,等价于N个单独的由空格分隔的双引号字符串。如果没有参数,“$@”扩展为空。

echo "Alice: $@"
echo "$0: $1 $2 $3 $4"
echo "$# arguments"

函数变量的范围:
假设有一个脚本称为ascript
function afunc
{
 echo in function: $0 $1 $2
 var1="in function"
 echo var1: $var
}

var1="outside function"
echo var1: $var1
echo $0: $1 $2
afunc funcarg1 funcarg2
echo var1: $var1
echo $0: $1 $2

如果输入ascript arg1 arg2会有一下的输出:
var1: outside function
ascript: arg1 arg2
in function: ascript funcarg1 funcarg2
var1: in function
var1: in function
ascript: arg1 arg2

函数afunc将变量var1从函数外变成函数内,而这以改变对函数外是可知的。$1和$2在函数内和主脚本中有不同的取值。但$0是不会改变的。

将上一个例子扩展,将函数内的var1设为局部变量:
function afunc
{
 local var1
 echo in function: $0 $1 $2
 var1="in function"
 echo var1: $var
}

运行ascript arg1 arg2的输出结果如下:
var1: outside function
ascript: arg1 arg2
in function: ascript funcarg1 funcarg2
var1: in function
var1: outside function
ascript: arg1 arg2

问题:
为什么元素“$*”用IFS的第一个字符而不是用空格分隔呢?
因为是为了输出的灵活性。下面是一个打印用逗号分隔的位置参数列表,脚本为:
IFS=,
echo "$*"
但在脚本里面改变IFS是很危险的

问题:
为什么“$@”用作N个独立的双引号引用字符串?
目的是允许你在此分别使用他们。

阅读(1475) | 评论(0) | 转发(0) |
0

上一篇:第一二三章

下一篇:第四章(小脚本)

给主人留下些什么吧!~~