Shell学习之路-(03-变量、字符串、数组)上海时时乐

查找子字符串:例:(查找字符)

3.数组

bash协助一维数组(不支持多维数组),何况未有限制数组的尺寸。类似与C语言,数组成分的下标由0早先编号。获取数组中的成分要利用下标,下标可以是整数或算术表达式,其值应超过或等于0。

3.1 定义数组

在Shell中,用括号来表示数组,数组成分用“空格”符号分割开。

概念数组的形似格局为:array_name=(value1 ... valuen)例如:

array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)

还是能独自定义数组的逐个分量:

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

能够不选拔三回九转的下标,况兼下标的范围未有限制。

3.2 读取数组

读取数组成分值的相似格式是:${array_name[index]}例如:

valuen=${array_name[2]}

举个例证:

#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"

运营脚本,输出:

$./test.sh
First Index: Zara
Second Index: Qadir

使用@ 或 * 可以博得数组中的全数因素,比方:

${array_name[*]}
${array_name[@]}

举个例证:

#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}"
echo "Second Method: ${NAME[@]}"

运营脚本,输出:

$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy

3.3 获取数组的长度

收获数首席营业官度的办法与收获字符串长度的点子一致,举例:

  • 赢得数组成分的个数length=${#array_name[@]}或者length=${#array_name[*]}
  • 猎取数组单个成分的长度lengthn=${#array_name[n]}

变量、字符串、数组的分析就到那边,有柳暗花明时会持续会更新。

注:以上内容出自C语言闽南语网及本身在动用进程的一些精晓整理。如有侵犯权益,请立刻文告笔者,小编将及时删除,如有错误之处也请指出,实行探究学习。小说只是起二个引导效应,详细的数码分析内容还请查看Shell相关教程,多谢您的查看。

#!/bin/bash
name="dongxiucai"
echo `expr index "$name" xn`

题图:gratisography

  前边有三个字符,哪个字符先出现,就输出那么些字符的岗位:运维结果:

变量、字符串、数组

运作结果:

上海时时乐走势图 1

  双引号:

2.字符串

字符串是shell编制程序中最常用最管用的数据类型(除了数字和字符串,也没啥另外品类好用了),字符串能够用单引号,也可以用双引号,也能够毫无引号。单双引号的区分跟PHP类似。

2.1 单引号

  • 单引号里的别样字符都会原样输出,单引号字符串中的变量是不著见效的;
  • 单引号字串中不可能出现单引号(对单引号使用转义符后也要命)。

例:

str='this is a string'

2.2 双引号

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

例1:

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

例2:

your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"

echo $greeting $greeting_1

2.3 获取字符串长度

长度的拿走及经过上面的特有变量$#演化来的

string="abcd"
echo ${#string} 

2.4 提取子字符串

例1,截取1-4,多个字符串,注意两种方法的前奏位乘除情势是不雷同的,一种是从0伊始,一种是从1上马。

string="alibaba is a great company"
echo ${string:1:4} 
或者
echo `expr substr "$string" 2 4`

例2,截取1前面包车型地铁全部字符

 echo ${string:1}

2.5 查找子字符串

搜寻首字母所在的地点,例:

string="alibaba is a great company"
echo `expr index "$string" is`
echo `expr index "$string" llll`
echo `expr index "$string" bjhjkhjkhj`
echo `expr index "$string" gg`

结果:

3
2
4
14

能够看出,该函数只检查实验第一字母第一回出现的地点。

#!/bin/bash
name="dongxiucai"
echo ${name:2:3}

1.变量

1.1 常规变量

变量名的命名须根据如下法则:

  • 第4个字符必得为字母(a-z,A-Z)。
  • 高级中学档不可能有空格,能够动用下划线(_)。
  • 不能够利用标点符号。
  • 不可能运用bash里的首要字(可用help命令查看保留主要字)。

概念变量时,变量名不加美元符号($),如:

variableName="value"

利用四个定义过的变量,只要在变量名后面加法郎符号($)就可以,{}可加可不加,如:

your_name="mozhiyan"
echo $your_name
echo ${your_name}

已定义的变量,可以被再一次定义,如:

myUrl="http://see.xidian.edu.cn/cpp/linux/"
echo ${myUrl}
myUrl="http://see.xidian.edu.cn/cpp/shell/"
echo ${myUrl}

利用 readonly 命令能够将变量定义为只读变量,只读变量的值不可能被更换。

上面包车型客车事例尝试更改只读变量,结果报错:

#!/bin/bash
myUrl="http://see.xidian.edu.cn/cpp/shell/"
readonly myUrl
myUrl="http://see.xidian.edu.cn/cpp/danpianji/"

运维脚本,结果如下:

/bin/sh: NAME: This variable is read only.

选取 unset 命令能够去除变量。语法:

unset variable_name

变量被删去后不能够再次使用;unset 命令不能够去除只读变量。

举例:

#!/bin/sh
myUrl="http://see.xidian.edu.cn/cpp/u/xitong/"
unset myUrl
echo $myUrl

上面包车型客车剧本未有其余输出。

Shell学习之路-(03-变量、字符串、数组)上海时时乐走势图。1.2 特殊变量

变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $*稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

例:

#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

运维结果:

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2

$*Shell学习之路-(03-变量、字符串、数组)上海时时乐走势图。 和 $@ 的区别

$* 和 $@ 都意味着传递给函数或脚本的享有参数,不被双引号(" ")富含时,都是"$1" "$2" … "$n" 的花样出口全体参数。

Shell学习之路-(03-变量、字符串、数组)上海时时乐走势图。但是当它们被双引号(" ")富含时,"$*" 会将具有的参数作为四个平安无事,以"$1 $2 … $n"的情势出口全数参数;"$@" 会将顺序参数分开,以"$1" "$2" … "$n" 的款式出口全体参数。

  单引号:

#!/bin/bash
name="dongxiucai"
echo ${#name}

领到子字符串:例:(以下代码为从第2个字符初步截取3个字符)

#!/bin/bash
name="dongxiucai"
echo `expr index "$name" g`

  原字符串为   dongxiucai    从第二个字符开头(n)截取3个字符(到x),所以结果为ngx

  上海时时乐走势图 2

检索   g   字符在子符串中的地方:运营结果:

  结果为   3  ,因为  n   先出现  ,则地方突显  n  的岗位  ,结果为   3

只是单引号和双引号是有分别的:

 

只顾:在  expr  中的符号为   `  反引号,并不是单引号   '  ,不要看错输错了

赢得字符串长度:例:

  上海时时乐走势图 3

  上海时时乐走势图 4

  字符串是shell编制程序中最常用最得力的数据类型(除了数字和字符串,也没啥此外连串好用了),字符串能够用单引号,也得以用双引号,也得以毫无引号。

  • 双引号里能够有变量
  • 双引号里能够现身转义字符

 

 

运作结果:

  上海时时乐走势图 5

  在搜索相称字符串时,能够也足以如此写:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是不行的;
  • 单引号字串中不可能现身单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

本文由上海时时乐走势图发布于上海时时乐走势图,转载请注明出处:Shell学习之路-(03-变量、字符串、数组)上海时时乐

您可能还会对下面的文章感兴趣: