安装脚本中的shell基本知识点总结

举报
单调函数 发表于 2020/07/09 11:02:39 2020/07/09
【摘要】 本文讲述了在Install.sh脚本中出现的shell相关语法,这可以帮助无shell编程基础的人员扫清语法障碍,快速理解脚本的意图。

本文讲述了在Install.sh脚本中出现的shell相关语法,这可以帮助无shell编程基础的人员扫清语法障碍,快速理解脚本的意图。

 

 

1.        #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种ShellShell脚本解释器的种类有bashshcshksh等,bashLinux标准默认的shell

 

2.        main函数为脚本的主函数,脚本执行的入口

 

3.        if ... fi语句:

如果[]内的表达式返回truethen后边的语句将会被执行;如果返回false,不会执行任何语句。最后必须用fi结尾来闭合if

4.        命令替换

$(id -u)$(cmd)的意思是将cmd执行一次,并用标准输出替换$(cmd)。其等价于`cmd`,即用反引号包含命令,反引号是键盘上Esc下面的符号。

5.        条件测试—整数测试

if  [ $(id -u) -ne 0 ]:条件表达式要放在方括号中,并且[]和表达式之间要有空格,否则会有语法错误。[为一个shell命令,其语法为:[ expression ]

方括号也可以用test命令代替,test命令的语法为:test expression

其中 –ne 为关系运算符,用于检测两个数是否相等。

1:整数运算符列表

运算符

说明

举例

-eq

检测两个数是否相等,相等返回 true

[ $a -eq $b ] 返回 true

-ne

检测两个数是否相等,不相等返回 true

[ $a -ne $b ] 返回 true

-gt

检测左边的数是否大于右边的,如果是,则返回 true

[ $a -gt $b ] 返回 false

-lt

检测左边的数是否小于右边的,如果是,则返回 true

[ $a -lt $b ] 返回 true

-ge

检测左边的数是否大等于右边的,如果是,则返回 true

[ $a -ge $b ] 返回 false

-le

检测左边的数是否小于等于右边的,如果是,则返回 true

[ $a -le $b ] 返回 true

6.        变量的使用

${INS_DEBUG_ERROR}:使用一个定义过的变量,只要在变量名前面加美元符号$即可,变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。推荐给所有变量加上花括号,这是个好的编程习惯。

 

7.        函数定义和调用

check_input_param是脚本里定义的一个函数,定义函数的一般格式如下:

function_name () {

    list of commands

    [ return value ]

}

函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。

Shell 函数返回值只能是整数(0~255),一般用来表示函数执行成功与否,0表示成功,其他值表示失败。如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。

如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数返回值,通过echo语句将数据返回。

调用函数时只需要给出函数名,不需要加括号。当用户定义一个函数后,实际上该函数就成为一个合法的shell命令。在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,

8.        特殊变量

retVal=$?:其中$?为特殊变量(又称系统变量),此处代表上个函数check_input_param的返回状态,0代表成功,非0代表失败。

2:特殊变量列表

变量

含义

$0

当前脚本的文件名

$n

传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2n>=10时,需要使用${n}来获取参数。

$#

传递给脚本或函数的参数个数。

$*

传递给脚本或函数的所有参数。

$@

传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。

$?

上个命令的退出状态,或函数的返回值。

$$

当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID

$!

Shell最后运行的后台ProcessPID

 

9.        条件测试—字符串测试

if中的[ —字母 ]代表的意思:

[ -z STRING ] “STRING” 的长度为零则为真

String1 = string2 等于,:if [ "$a" = "$b" ]

String1 != sring2 不等于,:if [ "$a" == "$b" ],=等价

[ -d FILE ] 如果FILE存在且是一个目录则为真。

 

10.   >>>都是重定向输出>会覆盖已有的文件内容,而>>会附加到已有内容之后。

1> 指标准信息输出路径(也就是默认的输出方式)

2> 指错误信息输出路径

2>&1 指将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起)

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null,如果这样写command > /dev/null 2>&1即代表屏蔽 stdout stderr

 

11.    Here Document:目前没有统一的翻译,这里暂译为”嵌入文档“。Here DocumentShell中的一种特殊的重定向方式,它的基本的形式如下:

command << delimiter

    document

delimiter

它的作用是将两个delimiter之间的内容(document)作为输入传递给command。结尾的delimiter 一定要顶格写。

 

12.    变量作用域

全局变量:

在脚本中定义的变量为全局变量,作用域为被定义的地方开始到脚本结束或被显示地删除处为止。函数体内部的变量默认也是全局变量,其作用域为“函数被调用时执行变量定义的地方”开始,到shell结束或被显示删除处为止。

局部变量:

关键字为local,如果变量被定义为local,其作用域变为函数体内。另外,函数的参数也是局部变量。

当局部变量和全部变量同名时,函数内部的局部变量会优先被使用。                               

环境变量:一般是指在操作系统中用来指定操作系统运行环境的一些参数,是所有shell程序都可以使用的变量。常用的有PATHHOMETMOUTPWD等等。按照惯例,shell中的环境变量都使用大写字母表示。

上图中PWD就是一个环境变量,用于记录当前工作目录。

export:设置新的环境变量。例如$ export TEST="Test..." #增加一个环境变量TEST

env:显示所有环境变量。

 

13.    引用

单引号:

可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。

双引号:

把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。

不加引号:

如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来;如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号。一般连续的字符串,数字,路径等可以用。

在echo命令中,双引号可有可无,单引号主要用于原样输出

 

 

 

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。