shell脚本编程

Posted XiaoBaWu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本编程相关的知识,希望对你有一定的参考价值。

shell中变量的使用

有关环境变量,详见 Linux环境变量详解

1.变量的定义

  • 一个shell程序将继承其父shell的所有全局环境变量(即export的变量),并且可以对其重写而不影响父shell
  • shell中的变量是无类型的。shell不支持浮点型只支持整型和字符串型,判断标准:变量中只包含数字的话是整型,包含了其他是字符就是字符串型
  • 在shell脚本中可以随时定义变量,尤其要注意bash的语法中“=”两边不能有空格,变量值中间也不能有空格,有的话要用单引号围起来
test=123    #局部环境变量一般用小写
export TEST=123 #全局环境变量一般用大写
export MYNAME='XIAO BA WU' #变量值有空格,要用单引号围起来

export test #也可以这样把前面的局部变量导出到全局

local functest #函数体内变量定义使用local关键字,可以将作用域限制在函数体内
  • 此外,和c语言一样,变量必须先定义再使用。若使用了一个未定义的变量,倒是不会报错,相当于调用了一个值为空的变量

2.变量操作

  • shell中,不能直接由变量名获取变量值,根本原因是shell中的字符串可以不加引号,所以系统无法判断它是字符串还是变量名,故通过$来引用变量名获取其值。而当变量名作为右值时,系统可以直接判定其为变量,无需添加$
value1=value2   //value1的值为字符串"value2"
value1=$value2 //value1的值为value2的值
  • 此外$对变量名的判断是空格敏感的,当发生如下情况时,为了让bash能正确识别变量名,必须要使用{}将变量名包围,这是一个好习惯
name=123
name1=456
echo hah! hah! $name1 #打印name1的值
echo hah! hah! $name11 #打印name11的值(空值)
echo hah! hah! ${name}11 #打印name的值 
  • 当我们需要在一个字符串变量尾部,再续上几个字符时,可以:
name='aa bb cc d'
name=$name'd ee'
name+='d ee' #这种形式的接续操作很常见
  • $在shell中是关键字,如果要在字符串中单纯显示$符号,必须加\\

  • shell中,我们可以使用反引号` (就是键盘上~所处的键),来将命令的返回值赋给变量,如:

PATH=`pwd`
  • shell中,我们还可定义数组变量
platforms=( 
"android"
"linux"
)

3.参数变量

  • 还有一种非常重要的变量,参数变量。$0是第0个参数,恒定为本脚本/程序的名字; $1是第一个参数 ,$2是第二个参数 ,以此类推。。。$#代表了输入参数的个数(不包括恒定的参数$0
  • $*是所有参数的总集,作为单个的参数。而 $@也是所有参数的总集,但将它们作为数组,假设现在传入参数1 2 3 4$*相当于"1 2 3 4"$@相当于("1" "2" "3" "4")
  • shift命令用来左移参数,即$3移到$2$2移到 $1$1被删除,$0永远不被。在不知道参数个数时,shift命令常用来遍历参数,我们可以只操作第一个参数,操作完后执行shift,然后继续操作第一个参数

4.返回值变量

  • 在shell中的每个命令,在执行结束时都会返回给shell一个返回值,其值为0-255之间的整数值,一般0表示成功执行,正数表示发生了错误
  • 我们可以使用$?来获取上条执行命令的返回值
  • 脚本可以由我们主动退出,在错误处理中经常使用,具体方法为exit var,var可以是我们指定的脚本退出时的返回值

以上是关于shell脚本编程的主要内容,如果未能解决你的问题,请参考以下文章

用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]

常用python日期日志获取内容循环的代码片段

Shell编程入门

shell脚本引用expect

Shell脚本切割日志

Eclipse 中的通用代码片段或模板