如何设计好酒店网站模板,免费网站模板下载网站,网络营销策略的概念有哪些,comment_form wordpress从编程语言的观点看linux shell-变量的作用域#xff0c;环境变量#xff0c;位置变量我们仍以BASH 为讨论的shell 语言每一种编程语言中#xff0c;我们都会碰到变量的作用域的问题。#xff08;比如在函数中定义的变量在函数外不能使用的)BASH 中也有类似的问题#xff…从编程语言的观点看linux shell-变量的作用域环境变量位置变量我们仍以BASH 为讨论的shell 语言每一种编程语言中我们都会碰到变量的作用域的问题。比如在函数中定义的变量在函数外不能使用的)BASH 中也有类似的问题局部变量和环境变量全局变量。局部变量是普通的变量仅在创建它的Shell中有效。环境变量。我们更多的使用“环境变量”而不是“全局变量”因为这个名称更能体现它的特点。环境变量对创建它的Shell及其派生出来的子进程都有效。或者说环境变量可以继承但它对其它与创建它的Shell没有关系的Shell并不可见。声明环境变量declare -x 变量名值 export 变量名值 export 已经定义的局部变量名在谈谈另一类的重要变量位置变量。函数脚本等都需要参数位置变量就是
用来获得这些参数的。相当于其它编程语言的形参。$0 表示当前脚本文件名。$1,$2,$3,........,$9,${10},.... 表示第123.......个参数。$# 位置变量的个数$* $ 表示所有的位置变量。当然两者还是有区别的。
shell中的变量和运算符 1.什么是变量 这个就不用废话了shell中的变量跟其他高级语言中的变量概念是一样的。 2.shell中变量的类型 shell中的变量类型有:本地变量、环境变量、位置变量、标准变量、特殊变量。 2.1.本地变量在shell脚本的生存周期中使用的变量(也就是登录一个shell到退出这个shell为生存周期)设置一个本地变量格式为变量名变量显示一个变量:echo ${变量名}也可以不要大括号,显示本地所有变量:set就可以,本地变量还可以设置为只读的:readonly 变量名,这时的变量就具有只读属性,如果在shell下运行命令readonly,就会显示当前环境下所有的只读变量。 2.2.环境变量用于所有的用户进程(也就shell下所有的子进程)这个就有点像windows中的环境变量了(系统–高级–环境变量)环境变量一般保存在$HOME/.bash_profile和/etc/profile中前者是只适用于当前用户后者适用于所有用户设置一个环境变量用export比喻我们这里设置一个环境变量:export pagename”ghostwwl”这样就设置了一个叫做pagename的环境变量我们可以通过env这个命令来查看还有就是可以直接通过运行export来查看。 2.3.位置变量也就相当于程序中的参数(也就相当于C中的argv)在shell中位置变量一般允许$0-$9一共10个超过10个的嘿嘿就必须使用其他方式了。很显然这里$0就是脚本的名字了,从$1开始就是后面的参数了。说白了也就是那个argv了。我们这里举个小例子,比喻有shell程序aa.sh于下 #!/bin/bash #named aa echo “程序名为: $0″ echo “姓名为: $1″ echo “年龄为: $2″ echo “所属省分为: $3″ echo “所在城市为: $4″ echo “第五个参数为: $5″ 我们运行这个脚本 ./aa.sh ghostwwl 24 Hubei Wuhan 显示结果为 程序名为: ./aa.sh 姓名为: ghostwwl 年龄为: 24 所属省分为: Hubei 所在城市为: Wuhan 第五个参数为:可以看出因为第五个参数没有所以就为空了当然我们可以在脚本中系统命令传递参数,比喻下面一句:find /usr/share/realpaly -name $1 -print这个脚本语句就可以在脚本中对文件目录/usr/share/realplay中文件名为第一个参数的文件进行查找。说这么多他*的就是参数搞半天。 2.4.标准变量,也就是bash环境建立的一些标准环境的标量,他会自动去解析,基本都在/etc/profile中定义了有EXINIT,HOME,IFS,LOGNAME,MAIL,MAILCHECK等。 EXINIT 是vi编辑器初始化运行的一些参数 HOME 这个傻子都知道,就是偶们的主目录 IFS 一个个字段域之间用什么隔开的理论上可以任意字符,比喻/usr/bin;/usr/sbin这里的IFS就是”;”了。 LOGNAME 看名字就知道 是登录名可以用 echo $LOGNAME 来查看 MAIL 表示当用户的邮箱路径 MAILCHECK 表示每间隔多少秒检查一次收件箱还有一堆标准变量PATH,tz,PS1,PS2,PWD等等,我这里就不全部写了,自己去找资料看,相信应该蛮好找的。 2.5.特殊变量$# 表示传递到脚本的参数列表$* 以一个字符串显示所有向脚本传递的参数,跟位置变量不同的是这里参数可超过9个。$$ 表示当前运行脚本的进程ID号$! 表示后台运行的一个进程的ID号$ 与$#相同但是使用时加引号,并在引号中返回每一个参数$- 显示shell使用的当前选项,与set命令相同$? 显示最后命令运行的推出状态,0表示没有错误,其他任何值表示有错误 3.shell中的变量替换 这里说一下变量替换这个经常用到其实就是用变量的值替 换他的名字,显示变量的时候就是这个可以用:为了试验我们先定义一个变量haha”**** you” a.${变量名}来搞定(这里的大括号可要可不要,不过偶一般都加) b.${变量名:变量值}这个表示如果前面的变量值不为空则显示变量值否则置空比喻echo ${name:”ghostwwl”}这样可不管你以前有没有对name赋过值都会显示这里的”ghostwwl” c.${变量名:?错误信息}这个表示当变量名存在就是变量的值不存在就显示问号后面的错误信息比喻echo ${age:”No defined variable age”}这个因为age不存在所以它会显示错误信息age:No defined variable age d.${变量名:-变量值}这个表示如果如果变量名没有设置就用这里给出变量值来代替显然如果设置了肯定就是返回原来设置的值比喻echo ${age:-24}因为age变量没有设置所以它会用24去代替如果是echo ${haha:-”hello”}这里会显示原来所赋的值”**** you”记得不要跟b中的情况搞混。 e.${变量名:变量值}表示如果没有设置变量名这个变量就设置它的值比喻echo ${age:24}因为没有设置age这个值所以运行这句的时候会赋值并显示。当然这样赋值以后就可以把age当正常变量用了也就是这时我们有haha和age这两个变量了。 就这五种了(当然如果把第一种去掉大括号就6种了)开始可能并不习惯用多了就习惯了啊哈哈 4.清除变量(unset) 能定义变量当然也就能删除变量了,比喻我们要删除那个haha因为值为”**** you”不太文明我们可以用:unset haha 从这里就可以看出清除变量用unset 变量名。 这里我们要注意设置了readonly的只读变量不能取消也不能重新设置值。 我们这里再来把前面个例子改一下: #!/bin/bash #named aa echo “程序名为: $0″ echo “姓名为: $1″ echo “年龄为: $2″ echo “所属省分为: $3″ echo “所在城市为: $4″ echo “参数个数为: $#” echo “脚本参数为: $*” echo “脚本进程ID为: $$”我们再来运行这个脚本 ./aa.sh ghostwwl 24 hubei wuhan 结果为: 程序名为: ./aa.sh 姓名为: ghostwwl 年龄为: 24 所属省分为: hubei 所在城市为: wuhan 脚本参数个数为: 4 脚本参数为: ghostwwl 24 hubei wuhan 脚本进程ID为: 212 5.影响变量的一些命令 5.1 declare 创建或显示变量 参数-f 只显示函数名 参数-r 创建只读变量(typeset也可以) 参数-x 创建转出变量 参数-i 创建整数变量 如果参数中使用来代替-,表示选项的含义相反。 5.2 export 创建环境变量 参数– 表明选项结束,所有后面的参数都是实参 参数-f 表示在”变量-值”对照中的变量是一个函数名 参数-n 表示把全局变量转换成局部变量(也就是本地变量)。 参数-p 显示全局变量列表 5.3 readonly 创建或显示只读变量 参数– 表示选项结束 参数-f 创建只读变量 5.4 set 设置或者重设各种shell 5.5 shift [n] 用来移动或调整位置变量使$4赋给$3(也就是全都向前面移动一次)这个里面的n表示移动几位默认是移动一位。 5.6 typeset 这个就跟declare相同了 5.7 unset 清除变量的定义 参数– 表示选项结束 参数-f 删除只读变量但是不能sehll环境中制定的变量和函数。 6.shell的运算符 6.1 位运算 ~,,,,|,^ 一看就知道分别是取反,左移,右移,与,或,异或。 6.2 $[]表示对[]中的表达式求值和$(())相等的。 6.3 逻辑运算符 ,||,,,,! 是人都看得懂跟C里一样的。 6.4 赋值运算符 ,,-,*,/,%,,|,,^ 跟其他语言差不多一看就明白的。当然表达式赋值let $a$b$c这种形式。 6.5 运算符的优先级我就不想废话了,都跟其他语言差不多的,自己去找。 http://why-gudu.spaces.live.com/Blog/cns!1pziotErZQfm5-4NtdB7DJ3w!155.entry
http://bbs.topsage.com/dv_rss_xm_119_195915_1.html