shell变量,字符串,数组

一、shell变量定义:

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头;

中间不能有空格,可以使用下划线;

不能使用标点符号;

不能使用bash里的关键字。

变量使用:

使用一个定义过的变量,只要在变量名前面加美元符号即可,

your_name="test"
echo $your_name
echo ${your_name}

花括号可以省略,但以下情况需要添加:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

不然解释器会把$skillScript当成一个变量。

只读变量:

使用readonly命令可以将将变量定义为只读变量,只读变量的值不能被改变。

删除变量:

使用unset命令可以删除变量。

#!/bin/sh

test="11111"
readonly test
test="22222"  #报错,不可修改

unset test
echo $test    #输出为空,变量已删除

运行shell时,会同时存在三种变量:

(1)局部变量,在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量;

(2)环境变量,包括shell启动的程序,都能访问环境变量;

(3)shell变量,由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量。

二、shell字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。

str='this is a string'

单引号限制:

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

单引号字符串中不能出现单独一个的单引号(也不能使用转义符)。

双引号:

your_name="test"
str="Hello, I know you are "$your_name"! 
"
echo -e $str    # -e参数表明处理特殊字符,不会当成一般文字输出,此处表示换行而不直接输出"
"

输出为:
Hello, I know you are "test"!

双引号优点:引号里可以有变量,可以出现转义字符。

获取字符串长度:

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

提取子字符串:

str="Hello, I know you!"
echo ${str:1:4}  #输出从第2个字符开始的4个字符  输出ello

查找子字符串:

str="Hello, I know you!"
echo `expr index "$str" l`  #输出 3  注意和提取字符串的索引区别

三、shell数组

bash支持一维数组,下标由0开始,下标可以是整数或算术表达式。

定义数组:

array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)
或单独定义数组的各个分量
array_name[0]=value0
array_name[1]=value1
array_name[n]=value

读取数组:

${数组名[下标]}

例如:

value=${array_name[1]}
使用@符号可以获取数组中的所有元素,如下:
echo ${array_name[@]}

获取数组长度:和获取字符串长度的方法相同

length=${#array_name[@]}  #取得数组元素的个数
#或者
length=${#array_name[*]}

len=${#array_name[n]} #获取数组单个元素的长度
原文地址:https://www.cnblogs.com/sssblog/p/10185330.html