您的位置:首页 > 运维架构 > Shell

Shell学习--(3)替换,字符串,数组

2015-12-10 22:47 288 查看
替换

Shell变量替换,命令替换,转义字符

命令替换命令替换是指Shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。

命令替换的语法:

复制纯文本新窗口


`command`

`command`


注意是反引号,不是单引号,这个键位于 Esc 键下方。

下面的例子中,将命令执行结果保存在变量中:

复制纯文本新窗口


#!/bin/bash
 
DATE=`date`
echo "Date is $DATE"

变量替换变量替换可以根据变量的状态(是否为空、是否定义等)来改变它的值

可以使用的变量替换形式:

形式说明
${var}变量本来的值
${var:-word}如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word}如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message}如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。

若此替换出现在Shell脚本中,那么脚本将停止运行。
${var:+word}如果变量 var 被定义,那么返回 word,但不改变 var 的值。
字符转义

举个例子:

复制纯文本新窗口


#!/bin/bash
 
a=10
echo -e "Value of a is $a \n"

#!/bin/bash

a=10
echo -e "Value of a is $a \n"


运行结果:

Value of a is 10

这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出:

Value of a is 10\n


下面的转义字符都可以用在 echo 中:

转义字符含义
\\反斜杠
\a警报,响铃
\b退格(删除键)
\f换页(FF),将当前位置移到下页开头
\n换行
\r回车
\t水平制表符(tab键) 
\v垂直制表符
可以使用 echo 命令的 -E 选项禁止转义,默认也是不转义的;使用 -n 选项可以禁止插入换行符。

Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。


expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

例如,两个数相加:

复制纯文本新窗口


#!/bin/bash
 
val=`expr 2 + 2`
echo "Total value : $val"

#!/bin/bash

val=`expr 2 + 2`
echo "Total value : $val"


运行脚本输出:

Total value : 4

两点注意:

表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。

单引号

复制纯文本新窗口


str='this is a string'

str='this is a string'


单引号字符串的限制:

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号

复制纯文本新窗口


your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"

your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"


双引号的优点:

双引号里可以有变量
双引号里可以出现转义字符

定义数组

在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:

    array_name=(value1 ... valuen)

例如:

复制纯文本新窗口


cd51

array_name=(value0 value1 value2 value3)

array_name=(value0 value1 value2 value3)


或者

复制纯文本新窗口


array_name=(
value0
value1
value2
value3
)

array_name=(
value0
value1
value2
value3
)


还可以单独定义数组的各个分量:

复制纯文本新窗口


array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2


可以不使用连续的下标,而且下标的范围没有限制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux shell