快速业务通道

Shell 编程学习笔记

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-22
Shell 变量
(1). 设定变量
Shell变量没有数据型态,像JS变量一样,除非用内置命令declare声明其数据型态.SHELL变量不用声明即可使用.
默认情况下以字符串对待.SHELL变量的命名与C语言变量命名相同,并区分大小写.取得变量值用$varname,${varname}
两种方式.
例如(anran.sh):
#! /bin/bash
shopt -s -o nounset #表示变量设定过才能使用.(1)
myname=guojianjun #设定变量myname (2)
#比较好的习惯,把字符串用单/双引号引起来“guojianjun”
#=号两边不能有空格,如果右边值有空格,用引号引起来“guo jianjun”
echo $myname
#或者${myname},如果后面还有字符串,数字,下画线,要用{}把变量括起来,否则无法定位变量,这里也就是说只要能
定位变量就可以,如$myname/2,就工作的挺好.
#如果同时#掉(1),(2),则报: ./anran.sh: line 6: myname: unbound variable
#再者如果我们想显示$符号,可以用或者''''(不是双引号,否则会显示变量值,SHELL真能折腾):echo $myname ''$myname''.
除了用echo显示变量外,Bash还有一个printf(C语言的叛徒,不说它了,用到再联系)
(2).取消[回收内存空间]或清空变量[不回收内存空间]
使用unset清除变量,-v 清除变量,-f清除函数,不加选择的话,尝试清除变量,或失败,再试着取消与之同名的涵数.
如:unset -v myname.
清空变量很简单 : myname= 赋空即可.
(3).以前说的变量都是本地变量,即在当前shell中有效.如在父shell中设定:myname=guojianjun
执行:
#! /bin/bash
echo $myname
输出为空.怎样才能使子SHELL可以使用它呢,设定为环境变理:export myname=guojianjun或者declare -x myname=guojianjun
(4).变量扩展
1.语法:${var-defaultvalue}
若变量存在,返回变量值,否则返回defaultvalue
#! /bin/bash
unset myname
echo ${myname-anran}
(以下用法都与1相同).
2.语法:${var:-defaultvalue}
若变量存在且不为空,返回变量值,否则返回defaultvalue
3.语法:${var:=defaultvalue}
若变量存在且不为空,返回变量值,否则给变量设定defaultvalue,并返回变量值.
4.语法:语法:${var:?erro}
若变量存在且不为空,则继续执行,否则停止执行.
#! /bin/bash
fn=${1:?''请提供删除的目录''}
echo $fn
5.语法: ${var: 真值}
测试变量的存在性,若变量存在且不为空,则什传回真值[真值是非空字符串或数字],否则,传回空值.
6.语法:${var:startIndex}
从指定位置截取字符串到字符串结束.
7.语法:${var:startIndex:length}
从指定位置截取指定长度字符串.6,7与JAVA语言的SUBSTRING函数差不多.
有一个特殊的用法${@:2} 由2起取得后面所有的位置参数,而不是字符串长度,${@:2:2}同理.
8.语法:${#var}
传回变量值的字符串长度.对比:取得数组元素个数:${#a[@]}/${#a[*]}
9.语法:${var#style}
从左边开始,将符合样式的字符串删除(饱汉式,即找到符合的即停止,导至删除最短的).
filename="/usr/share/opt"
echo ${filename#/*/} #结果为share/opt
10.语法:${var##style}
同9,但是是饿汉式,删除最长的.按上列返回:opt
11.语法:${var%style}
同9,但是是从右边开始.
filename="/usr/share/opt"
echo ${filename#/*} #结果为/usr/share
12.语法:${var%%style}
同10,但是是从右边开始.按上列返回:
13.语法:${var/style/replace}
只替换第一个对比符合的字符串(取最长的).如果没有replace,就变成的删除.
14.语法:${var//style/replace}
只替换全部对比符合的字符串(取最长的).如果没有replace,就变成的删除.
13~14中的style如果以#开头,则表示该样式出现在变量的开头,以%开头则样式要出现在变量的结尾.
也符合了9,11一个从左边开始,一边从右边开始.SHELL有些地方还是通的.
(5).命令替换
语法:varname=$(命令)
也有这样写的:`命令`(难看).
bls=$(ls -l /)
IFS=''n''
echo $bls
wait for next...

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号