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

字符串是shell编制程序中最常用最实惠的数据类型(除了数字和字符串,也没啥其余种类好用了),字符串能够用单引号,也足以用双引号,也能够毫无引号。单双引号的分别跟PHP类似,输出语句echo和PHP也挺像。

澳门金沙国际 1

Shell 函数Shell 字符串

然而单引号和双引号是有分其他:

单引号

str='this is a string'

单引号字符串的范围:

  • 单引号里的别样字符都会原样输出,单引号字符串中的变量是无用的;
  • 单引号字串中不能够冒出单引号(对单引号使用转义符后也极度)。

题图:gratisography

单引号

单引号字符串的限定:

         
单引号里的别的字符都会原样输出,单引号字符串中的变量是无效的;

          单引号字串中无法冒出单引号(对单引号使用转义符后也丰盛)。

  单引号:

双引号

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

双引号的亮点:

  • 双引号里能够有变量
  • 双引号里能够出现转

反引号

 反引号用于将系统命令的输出到变量

变量、字符串、数组

双引号

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

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

字符串的值

表达式 含义
${var} 变量var的值, 与$var相同
${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 *
${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *
${var=DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 *
${var:=DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *
${var+OTHER} 如果var声明了, 那么其值就是$OTHER, 否则就为null字符串
${var:+OTHER} 如果var被设置了, 那么其值就是$OTHER, 否则就为null字符串
${var?ERR_MSG} 如果var没被声明, 那么就打印$ERR_MSG *
${var:?ERR_MSG} 如果var没被设置, 那么就打印$ERR_MSG *
${!varprefix*} 匹配之前所有以varprefix开头进行声明的变量
${!varprefix@} 匹配之前所有以varprefix开头进行声明的变量

1.变量

1.1 常规变量

变量名的命名须遵照如下规则:

  • 首个字符必须为字母(a-z,A-Z)。
  • 个中不可能有空格,能够选取下划线(_)。
  • 不可能选取标点符号。
  • 无法应用bash里的基本点字(可用help命令查看保留首要字)。

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

variableName="value"

利用三个概念过的变量,只要在变量名前面加港币符号($)即可,{}可加可不加,如:

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

Shell学习之路。已定义的变量,能够被再一次定义,如:

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

上边的脚本没有任何输出。

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

$* 和 $@ 的区别

$* 和 $@ 都表示传递给函数或脚本的装有参数,不被双引号(”
“)包涵时,都是”$1” “$2” … “$n” 的款型出口全数参数。

不过当它们被双引号(” “)包含时,”$*” 会将有所的参数作为一个完好,以”$1
$2 … $n”的款式出口全部参数;”$@” 会将相继参数分开,以”$1″ “$2” … “$n”
的样式出口全体参数。

拼接字符串

             your_name=”qinjx”

             greeting=”hello, “$your_name” !”

             greeting_1=”hello, ${your_name} !”

             echo $greeting $greeting_1

  双引号:

拼接字符串

your_name="abc"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

2.字符串

字符串是shell编制程序中最常用最实用的数据类型(除了数字和字符串,也没啥别的种类好用了),字符串能够用单引号,也得以用双引号,也得以毫无引号。单双引号的界别跟PHP类似。

2.1 单引号

  • 单引号里的别样字符都会原样输出,单引号字符串中的变量是无用的;
  • 单引号字串中无法冒出单引号(对单引号使用转义符后也12分)。

例:

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

能够看出,该函数只检查和测试第③假名第叁回面世的职位。

获得字符串长度

           string=”abcd”

           echo ${#string}#输出 4

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

获得字符串长度

string="abcd"
echo ${#string} #输出 4

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语言汉语网及本人在动用进度的一对接头整理。如有侵权,请及时通报本人,作者将霎时删除,如有错误之处也请建议,举行研讨学习。小说只是起3个指点效应,详细的数量解析内容还请查看Shell相关教程,多谢您的查看。

领到子字符串

           以下实例从字符串第2个字符开头截取4个字符:

          string=”runoob is a great site”

          echo ${string:1:4}

          # 输出 unoo

获得字符串长度:例:

查找子字符串

找寻字符 “is” 的位置:

string="runoob is a great company"
echo `expr index "$string" is`  # 输出 8    "`" 是反引号,而不是单引号 "'"

查找子字符串

           string=”runoob is a great company”

           echo`expr index “$string” is`

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

字符串截取

假若有变量 var=

1. # 号截取,删除右侧字符,保留右侧字符。

echo ${var#*//}

内部 var 是变量名,# 号是运算符,*// 表示从左侧起先删除第3个 //
号及左侧的富有字符

即删除 http://

澳门金沙国际,结果是 :blog.csdn.net/Liveor_Die

2. ## 号截取,删除左侧字符,保留左边字符。

echo ${var##*/}  #  #、## 表示从左边开始删除。一个 # 表示从左边删除到第一个指定的字符;两个 # 表示从左边删除到从右边第一个/及左边的所有字符。

##*/ 表示从左边发轫删除最终(最右边)三个 / 号及左边的拥有字符

即删除

结果是Liveor_Die

3. %号截取,删除左侧字符,保留左手字符

echo ${var%/*}

%/* 表示从左侧开头,删除第①个 / 号及右侧的字符

结果是:

4. %% 号截取,删除右侧字符,保留左手字符

echo ${var%%/*}

%%/* 表示从右边初叶,删除最终(最左侧)2个 / 号及左侧的字符

结果是:http:

5. 从左侧第多少个字符开始,及字符的个数

echo ${var:0:5}

内部的 0 表示左边第一个字符伊始,5 表示字符的总个数。

结果是:http:

6. 从左边第多少个字符开首,从来到告竣。

echo ${var:7}

内部的 7 表示左侧第九个字符初叶,平素到告竣。

结果是 :blog.csdn.net/Liveor_Die

7. 从左侧第多少个字符开首,及字符的个数

echo ${var:0-7:3}

里面包车型客车 0-7 表示左边算初步个字符开首,3 表示字符的个数。

结果是:ero

8. 从右侧第几个字符开头,一向到停止。

echo ${var:0-7}

代表从左侧第多少个字符开始,一贯到截至。

结果是:eor_Die

注:(左边的第一个字符是用 0 表示,左侧的首先个字符用 0-1 表示)

Shell 数组

bash扶助一维数组(不补助多维数组),并且没有范围数组的轻重缓急。

运营结果:

字符串替换

用replace替换字符串中的子串substring

格式:${str/substring/replace}或者${str//substring/replace}

轮换字符串中首先个abc

echo ${str/abc/TEST}  echo ${str/abc/TEST}  

轮换字符串中全体的abc

echo ${str//abc/TEST}  

**从str起始匹配,用TEST替换最长的a*c**

echo ${str/#a*c/TEST}

**从str结尾匹配,用TEST替换最长的b*l**

echo ${str/%b*l/TEST}

    定义数组

在Shell中,用括号来表示数组,数组成分用”空格”符号分割开。定义数组的貌似形式为:

数组名=(值1值2…值n)

array_name=(value0 value1 value2 value3)

  澳门金沙国际 2

expr操作字符串

对于地点的一对操作,假使改用expr执行,能简化一些。

str='hello world!'  
#求字符串长度  
length=`expr length $str`  
echo $length  

#截取字符串  
substr=`expr substr $str 1 4`  
echo $substr  


#求字符串中元素的下标索引,如果元素不存在输出0(因为此时索引从1开始)  
index=`expr index $str "l"`  
echo $index  

    读取数组

读取数组成分值的一般格式是:${数组名[下标]}

valuen=${array_name[n]}

行使@符号能够收获数组中的全数因素:echo ${array_name[@]}

 

    获取数组的长度

# 取得数组元素的个数

length=${#array_name[@]}

# 或者

length=${#array_name[*]}

# 取得数组单个成分的尺寸

lengthn=${#array_name[n]}

领取子字符串:例:(以下代码为从第一个字符伊始截取贰个字符)

    Shell 注释

以”#”起初的行就是注释,会被解释器忽略。

sh里没有多行注释,只可以每一行加四个#号。

   
 借使在支付过程中,蒙受大段的代码要求临时注释起来,过一会儿又打消注释,怎么办呢?每一行加个#标志太讨厌了,能够把这一段要诠释的代码用一对花括号括起来,定义成叁个函数,没有地点调用这一个函数,那块代码就不会执行,达到了和注释一样的功用。

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

Shell 传递参数

    脚本内取得参数的格式为:$nn代表三个数字,1
为实施脚本的第三个参数,2 为实践脚本的第四个参数,以此类推……

澳门金沙国际 3

多少个奇特字符用来拍卖参数

$* 与 $@ 区别:

相同点:都以引用全数参数。

不相同点:唯有在双引号中反映出来。假诺在剧本运转时写了多个参数
一 、二 、3,,则 ” * ” 等价于 “1 2 3″(传递了1个参数),而 “@” 等价于 “1”
“2” “3”(传递了多少个参数)。

澳门金沙国际 4

运转结果:

Shell 基本运算符

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

两点注意:

①表明式和运算符之间要有空格,例如 2+2 是颠三倒四的,必须写成 2 +
2,那与大家耳熟能详的大部编程语言不平等。

②一体化的表明式要被 ` ` 包罗,注意那些字符不是常用的单引号,在 Esc
键下面。

  澳门金沙国际 5

    算术运算符

澳门金沙国际 6

澳门金沙国际 7

  原字符串为   dongxiucai  
 从第四个字符起初(n)截取三个字符(到x),所以结果为ngx

    关系运算符

事关运算符只支持数字,不帮助字符串,除非字符串的值是数字。

澳门金沙国际 8

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

    布尔运算符

澳门金沙国际 9

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

    逻辑运算符

澳门金沙国际 10

搜寻   g   字符在子符串中的地点:运维结果:

    字符串运算符

澳门金沙国际 11

  澳门金沙国际 12

    文件测试运算符

澳门金沙国际 13

  在寻觅匹配字符串时,能够也足以如此写:

    Shell echo命令

用来字符串的输出.

read 命令从标准输入中读取一行,并把输入行的各样字段的值钦赐给 shell
变量

来得换行

echo-e”OK! \n”# -e 开启转义

浮现不换行

echo-e”OK! \c”# -e 开启转义 \c 不换行

 

    显示命令执行结果

echo `date`

急需熟识“ 命令;

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

    Shell printf 命令

printf  format-string[arguments…]
format-string:为格式控制字符串   arguments:为参数列表。

%s %c %d %f都以格式替代符

%-10s
指1个上涨幅度为拾个字符(-表示左对齐,没有则代表右对齐),任何字符都会被出示在十个字符宽的字符内,假如不足则自动以空格填充,超过也会将内容总体体现出来。

%-4.2f 指格式化为小数,在那之中.2指保留2个人小数。

d: Decimal 十进制整数— 对应地点参数必须是十进制整数,不然报错!

s: String 字符串— 对应地方参数必须是字符串大概字符型,不然报错!

c: Char 字符— 对应地点参数必须是字符串大概字符型,否则报错!

f: Float 浮点— 对应地方参数必须是数字型,不然报错!

  前面有八个字符,哪个字符先出现,就输出那些字符的地点:运营结果:

    Shell 流程序控制制

  澳门金沙国际 14

澳门金沙国际 15

澳门金沙国际 16

澳门金沙国际 17

  结果为   3  ,因为  n   先出现  ,则地方显得  n  的职责  ,结果为  
3

for 循环

澳门金沙国际 18

 

while 语句

澳门金沙国际 19

专注:在  expr  中的符号为   `  反引号,而不是单引号   ‘
 ,不要看错输错了

case

澳门金沙国际 20

Shell 函数

澳门金沙国际 21

壹 、能够带function fun() 定义,也能够直接fun() 定义,不带任何参数。

二 、参数再次来到,能够显得加:return
重回,如若不加,将以最后一条命令运转结果,作为重返值。
return后跟数值n(0-255

澳门金沙国际 22

Shell 文件包涵

.filename# 注意点号(.)和文书名高级中学级有一空格

source filename

相关文章