Linux Shell

在bash环境中,所有变量默认都是字符串类型。但可使用declare设置其他属性。

在Shell中字符串可以以三种形式定义

1. 单引号

    使用单引号声明变量,变量值中引用其他变量不会被解析,直接将引用变量的名称作为声明变量值的一部分。

2. 双引号

    使用双引号声明变量,变量值中引用其他变量会被解析,会将引用变量的值作为声明变量值的一部分。

3.不使用引号

    和使用双引号一样,引用变量会被解析,但是变量值中不能存在空格

4.反单引号

    可以执行命令,并将执行结果赋值给自定义变量。

date=`date +%Y%m%d.%H%M%S`

注意:在字符串值中引用其他变量时,推荐使用大括号“{}”,一方便阅读,二以免Shell认为“$”后字符串都为变量名称。


举例:vim /root/shell/stringvariables.sh

#!/bin/bash
# 声明变量 名称 年龄 爱好
name=mslh
age=2
hoppy=type

# 使用单引号声明变量
var_a='名称:${name} 年龄:$age 爱好:$hoppy'
echo $var_a

# 使用双引号声明变量
var_b="名称:${name} 年龄:$age 爱好:$hoppy"
echo $var_b

# 不是用引号
var_c=名称:${name}_年龄:${age}_爱好:$hoppy
echo $var_c

var_d=名称:${name} 年龄:$age 爱好:$hoppy
echo $var_d

执行

# sh stringvariables.sh 
名称:${name} 年龄:$age 爱好:$hoppy
名称:mslh 年龄:2 爱好:type
名称:mslh_年龄:2_爱好:type
stringvariables.sh: line 19: 年龄:2: command not found


获取字符串长度,使用${#变量名称}

echo '$var_a的长度是:'${#var_a}


截取字符串

格式

说明

${string:start:length}

string左侧start个字符开始(下标从0开始)向右截取length长度。

${string:start}

string左侧start个字符开始(下标从0开始)向右截取全部字符。

${string:0-start:length}

string右侧start个字符开始(下标从1开始)向右截取length长度。

${string:0-start}

string右侧start个字符开始(下标从1开始)向右截取全部字符。

${string#*chars}

string左侧开始第一次出现chars的位置,向右截取所有字符。

${string##*chars}

string左侧开始最后一次出现chars的位置,向右截取所有字符。

${string%chars*}

string右侧开始第一次出现chars的位置,向左截取所有字符。

${string%%chars*}

string右侧开始最后一次出现chars的位置,向左截取所有字符。

代码:vim /root/shell/subString.sh

#!/bin/bash
appName=miselehe.com
echo "字符串: ${appName}"

# 从左开始起始位置为0
echo "从左侧第2个字符开始向右截取3个字符,预期值ise:"${appName:1:3}

echo "从左侧第2个字符开始向右截取所有字符,预期值:iselehe.com:"${appName:1}
          
# 从右侧开始起始位置为1
echo "从右侧第4个字符开始向右侧截取4个字符,预期值.com:"${appName:0-4:4}

echo "从右侧第6个字符开始向右侧截取所有字符,预期值he.com:"${appName:0-6}

echo "从左侧第一次出现e的地方向右截取所有字符串,预期值lehe.com:"${appName#*e}

echo "从左侧最后一次出现e的地方向右截取所有字符串,预期值.com:"${appName##*e}

echo "从右侧第一次出现e的地方向左截取所有字符串,预期值miseleh:"${appName%e*}

echo "从右侧最后一次出现e的地方向左截取所有字符串,预期值mis:"${appName%%e*}

执行

# sh subString.sh 
字符串: miselehe.com
从左侧第2个字符开始向右截取3个字符,预期值ise:ise
从左侧第2个字符开始向右截取所有字符,预期值:iselehe.com:iselehe.com
从右侧第4个字符开始向右侧截取4个字符,预期值.com:.com
从右侧第6个字符开始向右侧截取所有字符,预期值he.com:he.com
从左侧第一次出现e的地方向右截取所有字符串,预期值lehe.com:lehe.com
从左侧最后一次出现e的地方向右截取所有字符串,预期值.com:.com
从右侧第一次出现e的地方向左截取所有字符串,预期值miseleh:miseleh
从右侧最后一次出现e的地方向左截取所有字符串,预期值mis:mis


转载请指明出处!http://www.miselehe.com/article/view/125