文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>shell编程——变量

shell编程——变量

时间:2010-08-15  来源:chinawanglun

一、变量的种类: 本地变量:用户自定义的变量。 环境变量:用于所有用户变量,用于用户进程前,必须用export命令导出。 位置变量:$0(脚本名),$1-$9:脚本参数。 特殊变量:脚本运行时的一些相关信息。
 $# 传递到脚本的参数个数
 $* 传递到脚本的参数,与位置变量不同,此选项参数可超过9个  
 $$ 脚本运行时当前进程的ID号  
 $! 后台运行的(&)最后一个进程的ID号 
 $@ 与$*相同,使用时加引号,并在引号中返回参数个数
 $- 上一个命令的最后一个参数 
 $? 最后命令的退出状态,0表示没有错误,其他任何值表明有错误 


区别$@和$*:这两个除了在加双引号使用是不同,其他情况都是相同的。加双引号时,$*把所有的位置参数看作是一个参数,包括分隔符等,$@还是生成一串参数,每个位置参数仍然是一个单独的参数
例如有如下脚本test.sh

#!/bin/bash #区别位置参数$@和$*之间的区别 

var=""

 n1=0 

n2=0 

for var in "$*" 

do 

    ((n1++)) 

done 

echo "n1=$n1" 


for var in "$@" 

do 

     ((n2++)) 

done 

echo "n2=$n2"


执行:bash test.sh a b c 执行结果为:    n1=1    n2=3 说明 "$*"将所有的参数作为一个整体,而"$@"中所有的参数还是单个的参数

二、了解shift 和 set  1、Shift :左移命令行参数,向左移动时,第一个参数($1)被丢弃,第二个参数($2)变成第一个参数   ($1),第三个参数($3)变成第二个参数($2),以此类推。。。而且,参数个数($#)也会减少一个
2、set :  初始化命令行参数 ,set命令把set后面的几个参数赋值给命令行参数 例如: 在一个脚本中 set cat a is it ;echo $4 $3 $2 $1 得到的结果为:it is a cat
单独使用set命令:返回当前环境下所有的定义的变量 set +/-o:开启或关闭shell特性 如:set  -o noclobber  关闭文件覆盖特性    set +o noclobber  打开文件覆盖特性
注意:shell 会依据 IFS 将 命令行上 所输入的文字给拆解为"字段"。然后再针对特殊字符(meta)先作处理,最后再重组整行command line 。

三、当执行一个shell脚本的时候,其实是产生一个子shell进程,由子shell再去执行脚本中的命令。 export   将变量导出为环境变量;环境变量只会影响子shell,不会影响父shell。 source 就是让 shell 脚本在当前 shell 内执行、而不是产生一个 子shell 来执行,因此脚本中对变量的改变就会影响到当前的shell。      利用这个suorce命令。我们就可以实现,在一个脚本A中写一些function,然后在另外的一个文件中source  A ,然后就直接调用这些函数,这个功能将在函数一节中讲到。 exec  在新shell进程中执行脚本,而父shell进程将会被终止 例如,有如下脚本test.sh:    #!/bin/bash                                         echo $$                                            # 分别用bash ./test.sh  source ./test.sh和exec 运行,查看结果
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载