shell编程(二)--变量

“shell编程”的上一篇文章很多知识点都没有提及,如果确实想学习shell脚本的各位看官们,推荐《Advanced Bash-Scripting Guide》,链接:http://www.tldp.org/LDP/abs/html/

1. 内置变量

内置变量包括$BASH, $FUNCNAME, $IFS, $REPLY, $*, $@, 其中最后两个的功能是类似的。

$BASH:Bash脚本解释器的路径;

$FUNCNAME:当前函数的名字;

$IFS:内部域分隔符,这个变量用来标明字符串边界,$IFS默认为空白(空格,制表符,换行符),但它也是可以被修改的,例如:

#!/bin/bash

output_args()
{
  for arg
  do echo "[$arg]"
  done
}

echo; echo "IFS=\" \""
echo "-------"

IFS=" "
var=" a  b c   "
output_args $var


echo; echo "IFS=:"
echo "-----"

#这里用“:”替换了上面的“ ”
IFS=:
var=":a::b:c:::"
output_args $var

echo

exit 0

$REPLY:当没有参数变量提供给read命令时,这个变量会作为默认变量提供给read命令,也可以用于select菜单,但是只提供所选择变量的编号,而不是变量本身的值。在个别版本的Bash中,并不支持$REPLY;

$*, $@:列出所有的参数。$* 所有位置的参数都被看作是一个单词,$@ 每个参数都是一个独立的引用字符串。

2. 字符串

我们可以使用awk来处理字符串,Bash脚本也可以调用awk的字符串操作功能来代替自己的内建字符串操作。

#!/bin/bash

String=1234abcd
# 注意不同的字符串索引系统:
# Bash的第一个字符是从'0'开始记录的.
# Awk的第一个字符是从'1'开始记录的.

echo ${String:2:4} # 位置 3, 4 个字符长
# 34ab

# awk中等价于${string:pos:length}的命令是substr(string,pos,length).
echo | awk '
{
    print substr("'"${String}"'",3,4)      # 34ab
}
'
#  使用一个空的"echo"通过管道传递给awk一个假的输入,
#+ 这样就不必提供一个文件名给awk.

exit 0

3. 子串的删除及替换

${#var}

字符串长度(变量$var的字符个数)。对于数组来说,${#array}表示的是数组中第一个元素的长度。
${var#Pattern}, ${var##Pattern}

从变量$var的开头删除最短或最长匹配$Pattern的子串。“#”表示匹配最短,“##”表示匹配最长。
${var%Pattern}, ${var%%Pattern}

从变量$var的结尾删除最短或最长匹配$Pattern的子串。“%”表示匹配最短,“%%”表示匹配最长。
${var:pos}

变量var从位置pos开始扩展, 也就是pos之前的字符都丢弃。
${var:pos:len}

变量var从位置pos开始,并扩展len个字符。
${var/Pattern/Replacement}

使用Replacement来替换变量var中第一个匹配Pattern的字符串。
${var//Pattern/Replacement}

全局替换。所有在变量var匹配Pattern的字符串,都会被替换为Replacement。
${var/#Pattern/Replacement}

如果变量var的前缀匹配Pattern,那么就使用Replacement来替换匹配到Pattern的字符串。
${var/%Pattern/Replacement}

如果变量var的后缀匹配Pattern,那么就使用Replacement来替换匹配到Pattern的字符串。

4. 变量类型

使用declare或者typeset可以指定变量的类型。

类型说明
-r只读
-i整形
-a数组
-f函数
-xexport
例如:

#!/bin/bash

func1 ()
{
  echo This is a function.
}

declare -f        # 列出前面定义的所有函数.

exit 0

为了进一步了解shell,下一篇文章将实现一个简单的Linux系统信息监控脚本。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值