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脚本编程的主要内容,如果未能解决你的问题,请参考以下文章