目录
Shell概述
常量
变量
Shell中特殊的变量:
引号
单引号与双引号的区别:
对字符串的基本操作
获取字符串长度
截取部分字符串
替换字符串
单个替换:
多个全部替换:
删除字符串
从头删除
从尾删除
基本运算符
Shell概述
Shell是一个使用C语言编写的程序,他既是一种命令语言,又是一种程序设计语言。他是一个应用程序,该应用提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell是用户与Linux操作系统沟通的桥梁。
这个界面其实就是来自于文本。
写shell脚本需要有一个以.sh结尾的文件:vim test.sh,当没有该文件时,自动创建该文件,文件名就是test,打开该文件就可以在其中编写shell脚本代码。
这里使用Xshell演示:
向该文件中编写代码输出helloworld
执行该文件:三种方式
第一种:使用sh 文件,进行文件的执行
第二种:使用dash 文件,进行文件的执行
第三种:更改文件权限为可执行:即使用chmod,前面提到关于文件权限使用4,2,1分别代表可读可写可执行,则将每个权限都改为可读可写可执行,然后通过./文件名的方式执行:
上述三种方式常用第一种
在编写helloworld代码时就写了一行代码,由于Shell是命令语言,所以该代码实际可以在命令行中直接输出。
但当一行中写两个helloworld代码时,第二个写的代码也被输出了
而在test.sh文件中再写一行代码时,两行代码都被输出,由此可见:
echo的作用:类似于Java中的输出语句,起到输出语句的作用
echo:显示一行文本,属于Linux,当两行输出语句写在同一行时,效果和在命令行中写两个代码相同。
Shell文件中的注释:#
脚本中的规定:在每个脚本的第一行加入一个注释,标识当前脚本用什么方式执行
常量
程序执行过程中不可以发生改变的量
上述的helloworld就可以看成是一个常量
常量在Shell脚本中的输出可以不加引号,一样可以输出
输出:
通过输出发现,双引号中是String类型的数据,而不加引号也可以输出数据,由此可见:
shell针对常量没有明确的划分,只有一个统一的类型String
变量
变量:程序执行过程中可以发生改变的量
由于Shell针对常量值的定义没有明确划分,统一全部是String,所以当定义变量时不需要加上变量定义的数据类型,全部都是String类型
而在变量定义完毕后,想要输出该变量的值时若按照代码中所写的方式去输出,echo会自动默认其后面加上双引号和没加双引号的x是常量String字符串,因此仍然输出字符串x,而不是其值test
故需要手动加入一个符号$让Shell在识别x时当作一个变量识别。
输出:
变量不需要声明,初始化不需要指定类型变量命名。但:
1、变量只能使用数字、字母、和下划线,且不能以数字开头
2、变量名区分大小写(大小写敏感)
3、建议变量的名称要通俗易懂
注意:变量赋值时通过等号赋值,在变量、等号和值之间不可以出现空格。否则输出会成为空
空格在Shell中的作用就是分隔符
显示变量值使用echo加上$变量名,也可以使用${变量名}
变量在Shell中没有声明只有初始化,即若出现单独的一个变量名,输出时会报无法找到该变量。
代码举例:
若是不加上分界线{},$会根据命名规则一直识别后面的字符为一个变量,只不过没有这个变量,就没有输出。
输出:
或者在字符串与变量中间加入一个空格,也可以达到效果,但输出中会加上一个空格
Shell中特殊的变量:
位置变量:Shell中自带的变量,等同于0,1,2,3,4。。。8,9。。。
该变量由于是数字开头,所以不可以初始化,但表示位置,可以直接使用相应位置上的值
举例:
输出这些位置变量时,$0代表该.sh文件的完整文件名,在输出时若在后面加上一些内容,这些位置变量会自动匹配这些内容并输出相应位置变量的值
输出:
这里在输出时在后面加上了英文字母,这些位置变量自动匹配内容并输出第1第2第3和第5位置上的变量值
由此可见:内容的匹配是从第1个位置变量开始,$0始终表示固定输出文件名,可以视作一个常量
而当位置变量到第10变量时,$识别位置变量时默认只能识别一位数,故只能识别1,后面在识别的值加上一个0进行输出
若想成功识别个位数以上,需要加入{}:
引号
单引号与双引号
无论是哪种引号,其中包裹的内容肯定都是字符串
当把变量的值初始化为一个关键字的时候,该关键字变为字符串输出
这里注意:在Xshell中不能通过颜色去识别其是字符串还是关键字,代码中关键字是黄色,字符串是红色,但输出时是作为字符串输出
单引号与双引号的区别:
双引号:
若是在输出中想要实现有双引号的话,按照正常的思路:
而结果中没有显示双引号,而当把代码中去除最后一个引号时,会报错:
这是由于:双引号是两个为一组,当缺少一个引号时,从第一个引号开始,到第二个引号结束为一对,而当第三个引号开始时,他会一直向后寻找第四个引号,但是一直没有找到,所以报错
若想在输出中输出双引号则正确的操作为:加入转义字符,让双引号发挥原本的意思。
单引号:
若想一样输出上述结果:发现按照正常形式去写就可以输出该结果
若将双引号加上转义字符,结果发现转义字符一同输出了
若是将内部的双引号换成单引号:输出结果中也含有单引号
这是由于:单引号中无论出现什么特殊字符,全部当作字符串来使用,同时也是成对出现
总结:
双引号:成对出现,若缺少一个则会一直向后寻找另一个引号,直到报错,输出引号需要转义字符,可以识别特殊字符。
单引号:成对出现,同单引号一样,但不同的是若在单引号中出现转义字符或者$符,全部当作字符串使用。
对字符串的基本操作
获取字符串长度
使用特殊符号:#
格式:${#变量名} 表示获取当前变量的长度
截取部分字符串
使用格式:${变量名:开始位置:截取长度}
注意:对字符串的操作不会改变原来的字符串,除非在操作的同时重新赋值
若开始位置不写,默认从头开始,且第二个冒号可以不加;若长度不写,则输出为空,且不可省略第二个冒号,否则就改改变为第一种情况。
举例:
替换字符串
单个替换:
格式:${变量名/被替换的内容/替换的内容}
多个全部替换:
格式:${变量名//被替换的内容/替换的内容}
利用多个替换删除某个字符串:将替换的内容设置为”“即可
举例:
删除字符串
删除字符串的特点:不允许从中间删除
从头删除
删除第一个:从头开始删除匹配成功的第一个,后面相同的不会删除
格式:${变量名#表达式}
删除到末尾:从头开始,连续依次匹配,删除匹配成功的最后一次
格式:${变量名##表达式}
举例:
从尾删除
删除第一个:从尾开始匹配,删除匹配成功的第一个
格式:${变量名%表达式}
删除到末尾:从尾开始匹配,删除匹配成功的最后一个
格式:${变量名%%表达式}
举例:
同时在输出时加入位置变量使其输出位置变量的个数和所加入的位置变量:
基本运算符
Shell中的基本运算符
Shell中默认不支持表达式,因为Shell中都是String类型,针对这种情况,Shell提供了一个命令可以识别表达式:expr
常用的两个命令有两个:expr和awk
在使用该命令时有格式要求:
格式:`expr 2 + 2`
举例:
要求: 实现运算符的使用必须使用反引号`,而且数字与数字、数字与运算符之间需要有空格。
当出现变量之间相加时,还需要加上$符,由于过于麻烦,一般不这样写,有一种更为简单的方法
格式二:$[表达式]
举例:
输出:
使用这种格式不需要关心反引号和空格问题,可以自动识别变量
这种格式也可以适用于其他运算符



