shell编程学习笔记(一)

导读

注意,这篇博客是记录博主学习的笔记,撰写风格可能不适合没有编程基础的读者。

变量

定义

不需要声明类型,只需要加赋值号(=)

输入 输出
name=’hemim’
echo $name
hemim

只能以数字和下划线开头,如:

输入 输出
_name=’hemim’
echo $_name
hemim

注意

赋值号前后不能加空格,因为shell以空格作为分隔符,每个键入词都作为一个命令

字符串

用单引号和双引号甚至不加引号的值都可以作为字符串

输入 输出
string=abcd
string=‘abcd’
string=“abcd”

三种赋值方式的区别

首先说不加引号和加引号的区别:
很明显的是,不加引号,只能定义没有空格的字符串,我们上面说到了shell以空格作为分隔符,如果加了空格,那就不是一个整体的字符串了。所以加引号的意义显而易见的是能把空格也作为字符串的一部分。
再说说单双引号的区别:
单引号会把整个字符串原意输出,而双引号则会识别字符串的转义字符,这意味着双引号中的字符串可以加入某些业务逻辑

输入 输出
name=hemim
echo $name
hemim
name=’hemim’
echo ‘${name}’
${name}
name=’hemim’
echo “${name}”
hemim

拼接

字符串的拼接不像java和python,java是可以用+来拼接,python用,来拼接,而shell则直接跟在原来的字符串后面表示拼接。如:

输入 输出
echo “asdf”asd asdfasd
echo “asdf”+asd asdf+asd

长度

获取字符串长度:用花括号包裹变量,同时在开头加上#

输入 输出
echo ${#name} 5

字符串截取

${name:2:4}第一个数表示从第几个字符开始截取(从1开始),第二个数表示截取的长度。通常地,第二个数不写,表示截取到末尾,第二个数超出了长度范围也不会报错,也是截取到末尾。
全局定义:name=hemim

输入 输出
echo ${name:2:2} mi
echo ${name:2} mim
echo ${name:2:6} mim

字符串查找

用反引号作为操作命令:
`expr index $name h`
expr后面跟index命令

输入 输出
echo `expr index $name h` 1

反引号

被反引号``包裹的值会被识别为linux中的命令

输入 输出
echo `date` Sat Nov 10 16:21:16 CST 2018

会输出当前日期,如果反引号里的不是命令,则会报错

数组

shell只支持一维数组,不支持多维数组,数组不定长,数组下标从0开始

声明

数组的声明类似变量声明,不过初始化的时候用()来表示,如:
arr=(1 2 3)

注意

在多个元素之间要用空格来隔开,不是逗号

访问

数组的访问类似于其他语言arr[1],中括号里面加上元素下标,如果下标为*号,则访问所有的元素拼接的字符串。另外,下标为@符号,则也可以访问所以元素,返回的是一个数组。

注意

如果把arr1=${arr[*]},则arr输出的是一个字符串,而不是输出整个数组,所以arr1里面只有一个元素;如果arr1=${arr[@]},则arr1里面存储的是整个arr,相当于把arr复制给arr1。
前置输入:arr=(1 2 3)

输入 输出
arr1=${arr[*]}
echo ${arr1[0]}
1 2 3
arr1=${arr[@]}
echo ${arr1[0]}
1

如果下标超出数组的元素个数范围,shell也不会报错,而是返回空,这是和java不一样的地方。

注释

shell用#表示注释一行,除了第一行用#!表示解释器外。如果想要用多行注释,可以使用花括号把代码括起来,只要不调用这个函数,就达到了注释的效果

运算符

数学运算符

原生shell不支持简单的数学运算,可以借助其他的命令来实现,如exprawk
全局定义:a=10 b=3

输入 输出
`expr $a + $b` 13
`expr $a - $b` 7
`expr $a \* $b` 30
`expr $a / $b` 3
`expr $a % $b` 1

注意

*在shell里面是特殊符号,所以要加上转义字符\

关系运算符

关系运算符只支持数字的比较,不支持字符串,除非字符串的值为数字

表示 英文解释 中文解释
-eq equals 等于
-ne not equals 不等于
-gt greater than 大于
-ge greater-equals than 大于等于
-lt less than 小于
-le less-equals than 小于等于

我们仅选取其中一个作为代表,学习一下语法即可
全局定义:a=20b=10

输入 输出
if [ $a -gt $b ]
then echo 'a > b’
fi
a > b

我们看到,成功输出了a > b

注意

在使用[]时,[]前后记得使用空格。联想一下前面提到的,shell把空格作为分隔符,也就是说[]是分别作为一个单独输入。这个其实很容易理解,联想我们前面间接实现的数学运算,相当于把每个输入当作一个字符串来处理,然后再在方法里面实现具体的运算逻辑。其实如果有过Handlebars模板引擎自定义helper的经验也不会奇怪这样的操作方式。

布尔运算符

表示 英文解释 中文解释
!
-o or
-a and

你可能感兴趣的:(linux,shell,学习笔记)